From 39f0cfa4c56b56d77487f1b8e11bf403a0f8f029 Mon Sep 17 00:00:00 2001 From: Razharas Date: Wed, 4 May 2016 17:55:37 +0300 Subject: [PATCH 01/13] Fixes autoclick with UIs Fixes autoclick with UIs --- code/_onclick/autoclick.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/_onclick/autoclick.dm b/code/_onclick/autoclick.dm index 6413d6642e2..ffed451bc7d 100644 --- a/code/_onclick/autoclick.dm +++ b/code/_onclick/autoclick.dm @@ -13,12 +13,14 @@ selected_target = null /client/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) - if(selected_target) + if(selected_target && !istype(over_object, /obj/screen)) selected_target = over_object /mob/proc/CanMobAutoclick(object, location, params) /mob/living/CanMobAutoclick(object, location, params) + if(istype(object, /obj/screen)) + return 0 var/obj/item/h = get_active_hand() if(h) . = h.CanItemAutoclick(object, location, params) From 445b689a1de0a63b7b654b7e171d29debbb19712 Mon Sep 17 00:00:00 2001 From: Razharas Date: Wed, 4 May 2016 19:20:22 +0300 Subject: [PATCH 02/13] Removed snoflek Removed snoflek --- code/_onclick/autoclick.dm | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/code/_onclick/autoclick.dm b/code/_onclick/autoclick.dm index ffed451bc7d..e3c4b4f04d0 100644 --- a/code/_onclick/autoclick.dm +++ b/code/_onclick/autoclick.dm @@ -12,15 +12,15 @@ /client/MouseUp(object, location, control, params) selected_target = null -/client/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) - if(selected_target && !istype(over_object, /obj/screen)) +/client/MouseDrag(src_object,atom/over_object,src_location,over_location,src_control,over_control,params) + if(selected_target && over_object.IsAutoclickable()) selected_target = over_object /mob/proc/CanMobAutoclick(object, location, params) -/mob/living/CanMobAutoclick(object, location, params) - if(istype(object, /obj/screen)) - return 0 +/mob/living/carbon/CanMobAutoclick(atom/object, location, params) + if(!object.IsAutoclickable()) + return var/obj/item/h = get_active_hand() if(h) . = h.CanItemAutoclick(object, location, params) @@ -31,4 +31,13 @@ var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds /obj/item/weapon/gun/CanItemAutoclick(object, location, params) - . = automatic \ No newline at end of file + . = automatic + +/atom/proc/IsAutoclickable() + . = 1 + +/obj/screen/IsAutoclickable() + . = 0 + +/obj/screen/click_catcher/IsAutoclickable() + . = 1 \ No newline at end of file From b130c19801d675c5666ea85d3da0af664f61e265 Mon Sep 17 00:00:00 2001 From: Aloraydrel Date: Sun, 8 May 2016 00:17:49 -0400 Subject: [PATCH 03/13] ayy (#17446) --- code/modules/clothing/suits/armor.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 2dd3343470f..2d80c678690 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,5 +1,5 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/kitchen/knife/combat) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/kitchen/knife/combat,/obj/item/weapon/tank/internals/emergency_oxygen) body_parts_covered = CHEST cold_protection = CHEST|GROIN min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT @@ -22,7 +22,7 @@ desc = "An armored vest that protects against most types of damage." icon_state = "armor" item_state = "armor" - + /obj/item/clothing/suit/armor/hos name = "armored greatcoat" desc = "A greatcoat enchanced with a special alloy for some protection and style for those with a commanding presence." From ea655923bc1e5d3223578a17aeba13c1cef4f1b8 Mon Sep 17 00:00:00 2001 From: Core0verload Date: Sun, 8 May 2016 07:21:09 +0300 Subject: [PATCH 04/13] Can screwdriver swarmer shells to disable them (#17202) * Adds 1 new ways to destroy inactive swarmer shells * Swarmers are now exportable * Feedback messages --- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 40 +++++++++++++++--- .../miniantags/bot_swarm/swarmer_event.dm | 2 +- code/game/machinery/droneDispenser.dm | 2 +- code/modules/cargo/exports/parts.dm | 18 +++++++- icons/mob/swarmer.dmi | Bin 15498 -> 21405 bytes 5 files changed, 53 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 03d896d0e1d..b0509ca1b28 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -1,24 +1,45 @@ ////Deactivated swarmer shell//// -/obj/item/unactivated_swarmer +/obj/item/device/unactivated_swarmer name = "unactivated swarmer" desc = "A currently unactivated swarmer. Swarmers can self activate at any time, it would be wise to immediately dispose of this." icon = 'icons/mob/swarmer.dmi' icon_state = "swarmer_unactivated" + origin_tech = "bluespace=4;materials=4;programming=6" + materials = list(MAT_METAL=10000, MAT_GLASS=4000) -/obj/item/unactivated_swarmer/New() - notify_ghosts("An unactivated swarmer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, attack_not_jump = 1) + +/obj/item/device/unactivated_swarmer/New() + if(!crit_fail) + notify_ghosts("An unactivated swarmer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, attack_not_jump = 1) ..() -/obj/item/unactivated_swarmer/Topic(href, href_list) +/obj/item/device/unactivated_swarmer/Topic(href, href_list) if(href_list["ghostjoin"]) var/mob/dead/observer/ghost = usr if(istype(ghost)) attack_ghost(ghost) -/obj/item/unactivated_swarmer/attack_ghost(mob/user) +/obj/item/device/unactivated_swarmer/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/screwdriver) && !crit_fail) + user.visible_message("[usr.name] deactivates [src].", + "After some fiddling, you find a way to disable [src]'s power source.", + "You hear clicking.") + name = "deactivated swarmer" + desc = "A shell of swarmer that was completely powered down. It no longer can activate itself." + crit_fail = 1 + +/obj/item/device/unactivated_swarmer/attack_ghost(mob/user) + if(crit_fail) + user << "This swarmer shell is completely depowered. You cannot activate it." + return + var/be_swarmer = alert("Become a swarmer? (Warning, You can no longer be cloned!)",,"Yes","No") if(be_swarmer == "No") return + if(crit_fail) + user << "Swarmer has been depowered." + return if(qdeleted(src)) user << "Swarmer has been occupied by someone else." return @@ -26,6 +47,13 @@ S.key = user.key qdel(src) + +/obj/item/device/unactivated_swarmer/deactivated + name = "deactivated swarmer" + desc = "A shell of swarmer that was completely powered down. It no longer can activate itself." + crit_fail = 1 + + ////The Mob itself//// /mob/living/simple_animal/hostile/swarmer @@ -494,7 +522,7 @@ src << "This is not a suitable location for replicating ourselves. We need more room." return if(do_mob(src, src, 100)) - if(Fabricate(/obj/item/unactivated_swarmer, 50)) + if(Fabricate(/obj/item/device/unactivated_swarmer, 50)) playsound(loc,'sound/items/poster_being_created.ogg',50, 1, -1) /mob/living/simple_animal/hostile/swarmer/proc/RepairSelf() diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm index ce74d37a293..364a74aeb0c 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -15,7 +15,7 @@ return 0 if(!the_gateway) return 0 - new /obj/item/unactivated_swarmer(get_turf(the_gateway)) + new /obj/item/device/unactivated_swarmer(get_turf(the_gateway)) if(prob(25)) //25% chance to announce it to the crew var/swarmer_report = "[command_name()] High-Priority Update" swarmer_report += "

Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come \ diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index c2743105444..dc9bf8e0115 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -109,7 +109,7 @@ metal_cost = 0 glass_cost = 0 cooldownTime = 300 //30 seconds - dispense_type = /obj/item/unactivated_swarmer + dispense_type = /obj/item/device/unactivated_swarmer begin_create_message = "hums softly as an interface appears above it, scrolling by at unreadable speed." end_create_message = "materializes a strange shell, which drops to the ground." recharging_text = "Its lights are slowly increasing in brightness." diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm index a41d5bd0f30..b78bb3b2e37 100644 --- a/code/modules/cargo/exports/parts.dm +++ b/code/modules/cargo/exports/parts.dm @@ -13,4 +13,20 @@ /datum/export/solar/control_board cost = 150 unit_name = "solar panel control board" - export_types = list(/obj/item/weapon/circuitboard/solar_control) \ No newline at end of file + export_types = list(/obj/item/weapon/circuitboard/solar_control) + + + +/datum/export/swarmer + cost = 2000 + unit_name = "deactivated alien deconstruction drone" + export_types = list(/obj/item/device/unactivated_swarmer) + +/datum/export/swarmer/applies_to(obj/O, contr = 0, emag = 0) + if(!..()) + return FALSE + + var/obj/item/device/unactivated_swarmer/S = O + if(!S.crit_fail) + return FALSE + return TRUE \ No newline at end of file diff --git a/icons/mob/swarmer.dmi b/icons/mob/swarmer.dmi index f8ff43f3b9f8a79c66ff54173413913b0ac2160a..de4756e620c62a748362620bf416ed0990dae73d 100644 GIT binary patch literal 21405 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 z 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 literal 15498 zcmb8WcRZY5_bz3IKlJW4oD?q z{G>Jm4$puez*8OaE`y5ocl=TCt*aK~$?jI!m4}y?S1>!F60Uy^mjZ?Iff9ZsJE7Hj zR4hQL?fH(K5MU8ZhsesOsXoHb*CPXhZA!w#HXOXK8SedzwuNlI|+ajD!Zjh^%_gY*g9A5A09l4&m!E4?aCEBnCdSv8wpB2ky=CVF5t0 zOW0(@rN%>@6fJO6i+ee{76qr&BcZx@LoICqKAj`z87AH#?jTwMc8T9?6c(5VMHNoB zk1#25j9WZ^MT1mb++jA&H_z3+pG(6*M`?B=K&IeIzbuK9NQ%c!rHju#x0kbMmlONm z@!CZZiKF0k{ks;@cRPdEyJ_j+vsX0BNd}jHgPv}*Od;xZ3PM!2+8u);9C1>df;P-V z%CKjN>C9y}ZuiBI+P2gfn)cI`q*yG3W?|gTgJ#n-w?kS;ZM@PS3fzTWHHiGVL3TaS zaOsPhcDS5EebYGmuuV$5&&2eZlnAKpqVW|n_M3~?M$?tKW#62>y$R4OgXSP3P8ME{RQ^X=fm zO*bDW;uvrqT;kSxlc=!}$Wb;vBqUp(7Kr@%a{xhCBwUThr!LR$&+vrjJAUQIhP47oc%cTrB zRAyMpyIVW+V{>0X%bD^3-gX20_-bBQk>xkh(}%pNR=&lhGl^pR-FPqcFLu+}8K4GB z5hJy749g1-IwF?vey@{utOD!yc=vj4Zytj4T(eTVR0tgq01b`%wC1gaNGSVToZqHm zY%+d2e_OIS8vLI;Ia=;~&j4-xhJ2QZq-$$~(~fn%C&>Tug$n5Ci($e797Z$n08LHJ zN@(ip`$W{a^g0}?8tp^hIJ^jHh`^&3i$U#CdwRU?57w*W@S z0WdnyMq#c{^ zBkh(7;$u3sK2uld|DZ;QUj5;u5d1u|wblbZsqeFqmbd)lQ4y?!xW`Sn21O?#_#NTs zN_1oYFcV{_B;{1lV#Y9mr|h*1I0~ZXQ_7wb+tOj^$-s7wh#bi{oX+g#_0Rn!&X@X4 zqVCzv#DL6hYulUVdNnsz=?!9>VFT1;_i=zZ#M9@Ad^Eyua~^J@ z!e`|-C{rN?cNFyK6c!E#KE5zT1fE1hEPtP*Ik9zso#L&#-5^l0g*Fx1=TEnlpX1sR z#c#kCSP2n!4R6kAi`t6FxUTERw%E3@gTH0<8@Acs4;VQQl~CGot{Z!U$*fNysd0j>47mtO%ZBU%3cQ= zKH2@}H|*jy)I}yNUT7`h{37Mc46)tVlt9j4W?`c&g^O(E(_*(`93b&)k~Qzc=pzVS z*OeJP5ovC1>D{`ex*u-EPrzOOG9Kc;D3oHbZqqMIF>^QCUtNh+Ml4zX%^#d56AAe! z9H<=4^($@pcC9Frgu~dP#qKM!&*oq1jOl%Ry8YI24{rX>5e*g~qj;eTBk#f0Bmkad zTkS2>n>{}7<8SX=WD+w2Dr<|!3grxS;rIaZlAwty-=dzlPxz;v{P<;Io56kDS<95Y zOw#34f2tkv5-uL~c!FnDh``=@>fy9Y=CNPbGBKC1y%b*!ym7e0B5&)b{_cg#s_bw% zabcdzWheq zA`)`P0mGg(Kg2S<{WsS*oVQOuY$!^f*x>9SPqbeZbmHTl7R;rx6};&MqSWQJpK27g zC)5-aile;{2ZFlw&$DuSi(gw`*ir1YNe3N#fl{vvrI?jvDX>!{Vk4^7;IpJ>DNMlf zed#}|E0Z1t=u)<=9Qhn_Zv!Fp`#7t9oX-rF3L`Lw-;DYEhmbIYIKS?$8L{OJ#FVjh z)8yPc8VOT+W6bq;#0*i7O+~Ds&9fpfyGcr_I9(xwANuPIb$agDpx%o$sV1<#*l5PtTOa<0*9I20}j)cpqR-l4?sU;+MT zbBF4_Ul)M1<8OaCd^%?*}G3SIm(y56qDm1yZnlcCsZmy>6XWVEy)GGWkz$jFp#>fX3B-Ud>5e=SB@mMf zu=?@rf)Bq$?O)*o&)Y?lcP@*qB)Vvc-h~!Of##eXN#My}4>Tzh$xwQVUzZ}Ph&E-q z_OHu|9RvA=ef_2t32aiNe2x{V+(+f8z)ySyPSGOd5?cw+&|&Jg(qIv%#fz4S+pvfUl+(+RUCB985RtO3zU!G)@AT zMcxl!d`9|t$?G9S`?9tf!=B5Eqh&&ZX3bcL5@pI^{ zbAH9bM)DZ?;Uw;{RORt!pBCiSnNMh(J3) z`2QVR@n1>$XDrVD^|IA#XZuk0>V)kXhFyStoJXgI)Fe`kg81_^&O2)ZnVJgnVtMw= zeT%YMm*9plqN=64w_CQ{%t8-hwj ze~w2;AQT}Q_>S`jf>gi|~N?Xggq@DPXH@|8@#M)^sy1IDQ;IuJj6V7F?7qcvfkw>CWD?gM@s= zJTirR<0b!tZxC#6|UVp-8pVNdo}V1=NzMV*|&hHy1H zb=iyIf3?XYj&(<=>)Dtau(Ow1{M8yS2R7 zoFc7Xd8@^={{ntd@rHh7! zlD*nK;FEd`oz&V-fv?_h=R(zSqn^{!lE2!{SnqluOPe)KP%9<@#<07%hacFoY9|=g z3M!_DYun73`&{F)f0mB>1o1(SH=rAfaqeYTO{)$g@K1A0Hz0Dn@;~SL^HrSBwT$3Q zZ74D?r{d+!c&4|>hMWG=8Q_?97ul$B^S4^{53X!mPD1#g1=7oH{8yLtrU5nb?#x&5 zRq*rsuZ#*ZgH2F7*nl;0h%f+g6XMs-vPJE5jn=jqFsDFF=Q*BA-9B^@CaoX#Rv@js zOARA?hu2<kYF z&0M3kQK=9;^%5kQ)1qen&KqwTIjsU;HKVW zKGrNi?;mIzaq<9gpAqL9FlI`Py!aC|dpj;4-{PQKYnreW#pAgJRuNfoCuLa8(yk5E zB%E#k>db`sz1oja=iS9X_@AxGifI^#+bMT~@ROkSzuACtUsA8r%Z>J3v$Np_hH;4( zHzdD_DRT{)$v&sO9m+w(k4fPNgPAn9(If?JX7Dd0HBHAY{y&FJP&;z$);LcTX>SM{ zwAbjFJI;!&~K+= z;Te#p8V=8j%WS(3LyNdXx4izD4BjaWPM65cXfuO6gPEl0-^`U{l1=1iP7wUc89r+A zT5wlBd$OUOr>+hQo8G~pZp2BFkLN=^GXPndVzV{H|4Pr;ag-^-ME)CV`wy2zYQ>5v zX9*gx-nHcw=61^YjHhO*Prezj1Yy5eg`;Y=4X615(E*(dt!T8lJ(C1%Ck82C{P zrRsZ64UZDO)eX{?Fj=Dq3b%n3GyuzH3tHsaU7KBQP0*Dm{tk*Kl{w9cvbm1`Qeu0a z-sxg?eGl-Pei!vYsoU@5!jz%$P9xG+?5savz=R zg+t%WbTYAb1ghv5-h;&LfgT<>d*L~hC?jKxIYX^VYq(|w4yz--A8K7`4HRbPSAltu zXb>dIqyvJ}fpl(lPLgf(1(CveaYp=fKlVvAqF(xX=PGO4He1{F66Y72Lh2YnE%u7R}AL9B5G z*$0aIl4;f-#$@<2!zp0s1Bgi=(lo!2+-WdX5x!Q~8%YE)MF*z;Vf(CBu55RIqT;k1 zkDZD2=M%d!-#0_9Nj?lLH5+aYs42l^Fm%a*i!;Pz2@oFoa2~gD(v+R)+PwyFjjDL$0Zoj1(Tj_~?>lKbtKUBOWIe~|I2tu#fqTj;$p3Nz zLN5Fb*u*Z~AVv~2J#@yj>O-01uhn<_ND zYD>;uN2&G!l0)!$4$1Tl&)Jn6H%h7d6K@=n>PR>_#I1gy9o(03&o)Cbl3W_4-3XQ! zZ~_dK-?~-DZp>*va=#QA08cjmf)SQws37n0eWEvBaVH>f&;H$7QrAT&V02zcrjVY# zCSowyo-^@A19h9ph%3fvdtKHLuv1(C*g5C+soJ8U@CkzT4y0DOkF@|<_vFzQx~v} zK>-FWXin=&QkuiElCL2+N_oo_Wx2OS+_A)#*Gh}$V_^AzLc}do^1b*Ap;TQk17m|F z>g{Iw3dLQqOI3{G6HYmaeu_ty$PbPn=l_!RlJprjVojl3T=KVVIj;Eaw{Fo{?EG6+ zVah19WcKAva2>Lw0#q^;(B0x7Ov{AP?_t^2%fae4o6Uh8FmcpGyvL~U5J$}c9uEch z-%avp$+K@M>iNC897fas*Q}YAZ=v|-&nK~VlP~Gv?KGa$QW^MY=zX@DR7wM^R1v1c zX|1w|M>Q7$B<5_N#aXmREj-Jv0;1*G<8+H@6ojv13%AxfcIQJ(+JBZ(f{?4D3s(j6 z#Rv0*?0qr$@>2)NEE{e-Ilp0hIJ_*VVgd>=wN?{yc1X#+sDI5U3j;g=ch;;D#AT=$ zey9Quz$;+@a*h|Hm*!x8D+BN0Wlrw**!sof;f(eDsj6u3L3ym_G?C>={6Q9VZpY&u zxOBS&8GJ?eRcFyJXE0?2iIikeO@uZ-SpeJtjstv8p*KK>ic9Bn2=>{&8B~E1X*om_}qnZbbub zy+xRr@U=@z|MA0RdOTJoG|qq;in<)<)1$?Q7Vp%4QheNJ$=Heg6tF^XOxSBq{w$l^ zr22;mvMs|yb7*{ z#(6{tQX4yX4UxaP!*gz=-d>Jny$bry=%@SI^;qioObSsx8=5fOq5}CTqLgAtapZGo z@k(AZnwp{G76VtVh4M@@EeK2O0$+o}Za*2Ur5w~pfqEeL*7{MFZ66^nc8H}zp=?s0 zi_wtdEeS1p_@t}=);H+z7_+b7g({2SX+qa1Ksk#oz?@itPcX}?P<};8`7}HvILMi4 zB3vr=pREYr@Er%L()BH({EnQ)Q1irZqpTB)XiGqiddN& z_jLpe&s0sqN^12r_mCF}eH5rS!zHK-wh^P)LG#UE=Fz@E{)G}(F^?#S`Wsk1`ESJR zKk&8x-^=uW8N^MO&m<<$Iw)(Nw8>F91u}tH;eV)7Id<`lrM7QYTa z1svDm+{}-qs>^4x$_b*o6@rA!BGuYiO;84Hc&>AR9VgC3*H--xyZO(Radz*(1qUIj z#UEW(+oQ<;M9c$+Q4Mnsxce_SFR0D4h`Ob0lHT|=-lqw{=wr{HTG7)6T|Voi7G$^R z|G@YLeF&Ng<`$;`7t?P`An33K*KW2yN7WRgQ`^kb$Gg5@sncRf>(I%xw|asG4SG2q z#PkbD!N90KbEY&_y_4F2b^0#^0Ufvc&a2T}I&NYfAvzfJ_}Q!GAklq^m0Mo=zk&1M z4f*-1Bnbrt^?B;v^(VIphX%Ciw}rEYRe{B>S;^k7kw^HNTi1otqtl43`bhjQ$?rha z_QtOyRK5v#4C;VJGnIAp00?S{pNf3TXrxS}u3bttLE<|&Q>yGgMFb#5@?3l;{tKty zX)^DP8Gfkyw|06kmsf-!$m&Bny%w z`RW6JX+gu6bFH|`L^K-_DZjM!-#Q+8z|M3PRnQcjET0*he)W^TIrIS3MZupYU_ZS3 zy1vZ-Rnv;joquvwTRziuBw%!_hQt&8;J4!Y;bwWZ{*NGkuZ|-<=xSl-%_1NOI~f

t=G^u2rO+l1#U>TFh%M0WTuB_bGM_&zY(}i24?_32l4Z0cGpYK7$yZ03X zh+KE)6CP&5=+Z}_H~5-$8+u@>e+w1Pmmouzo*eCO2LnW0T|lkn7Pu0HY$@&a;Pj@B zpWB9!42O!>6NHMVNC2{I5x2ke`PE;_W#2coq2`nIk5IK%YQn!T|K_7w#uibaMk;}O z$vt26iQs)Z*8aZ|3jdvBHDN5wTZRjtD0DMOzh$@Hy>YvyDMG%7-jP9wET8tF>`*3F zMxv@gH&}MBJ}#n3S`pe$QCNRK9+`?ecGbrpevF63yBH@24DVN}WadM&lb|a3(&bF$ zDoQv#KkM;U`4y@Od8f&7zPic?f>g5C2!pO%z~o%&K2w92`Y8{HKP#22PQYc*O#||F8Mmx z=y6Sf&-XgJ1Y93D8(2%IdUO7@0f{qbdV?r6ddpQhkGICpp7v(ht-Ro<;Vq7%O0Zcj z*>7Gjw#K=sPlE(>u$gTIgzetZ?~~z=w*vY1{*B?L$SIJ?3E20Km(S$w_|k37B!fEK zTh{NsLIfh2AgAq1oU9On*4_ATAyQflcg0NpjrV_&3d;6BcROCr$3w)y)bGcgfKMQx zqjI3Vk&J93!-n8S-|i?h`)j*_iJuoK1sL2slhO8E9fzd0)7UkNhL&<%e?g%7s%2=E zhxtlH&=0BwllEdbx5bM1Pi;~{!3U&-3Rn0;$|$VI*Ej87;*3!svgLn=cwe5Nf=hoP zSR;oqAl8dIht6iz&Po0dHM#N0%Ph>z*LwzT5t9p5XeT!Z$S9n~325yvnK|nPh-%H$lC>6k*EKFl4-`IbK+zlTOu#9_nabokC z)%EjCcBv1Y^G3Tlde{-?n1)wxqk>@4q0D@GL%si+;GQPbAh|t0{No)`9j_|0g=%O5 z_`A45(@u&AD*mf8F$A3gIv(-B<% zKsZqvL<#_ycy45XZOY15%R*UU!&Xzuazhxq!T+iLQrhuyd4Nr36k zoWB*!%@SU$WXk#es$g|ik4Q%aF!sjcdK=Lo9Dh7hCG?CDxn<@de$Kk(Qyl6JrTUMB+9d!OE8`Cr3Y6ZDQFz z9EmXRl?2NOFc<2D*iB!)&uu}doJniEaSwA%6kIcE#kX@v*;>?24qhm%DVE}d7a8j; zg;XhoX{In-vVvtw<>E1k>^uLDEc@R;HKKdJy!!ei2DeJ*VncYIZo}s}ad;qLR9E~W z@?toR;_~Vbtp1)G!TK5`R zElGRS+i-m_lv?^oX-70wv(a-)y#2bn&)vm+2Bd6KSsyYm)i1{9pk)r=p$aRM&lTy^@usPj4Dr$Os$aF-6iS8S-p{o!c4{-S&rvMkp!rZPI(p$_bF741 z=3-k+30ol8M|BiJ5M2ELoC`PlV2DA_0g^AMp{0IgP_URu#`roB^h_1O+ktm3*olGXn z;{s^7-Z_q1CglSgg%pcZsMtbV5EHrF1-snEGS1#?6%IIAJfPH~oi$@;=LhA-{pU^$ zY||S}s7``Ul!Nxwmb99OQmu2MH3uFmJS;e?1l}{^fuxIzitCD9-}Mgu@~-i(=mPlz z?*d5-Suui~JnBiiLtRbUzxv({p}OY_a=&>0h#?2i$PMy0;z|~hNTt2fX|`8!(iQJW z$$eYL87f0VHyQ#jAN2M2)2vYwh3n|+=UrSzwO>S~cw{N}eJJ#Uzj)#y(xs;@OLKzX z`CGVMlfPKd64dwI?reDej+vz$E}iO*j-&ar`wlbx|@ z@=@R_0U0~5zeCT>(A!VtyF5o_36g&&ja^8l*WB)#4$GUzbD|Wj&ND(qIXT$PzK8e# zvpj^k*=PR?X1DmMGRB@G_$$+wp|1qXn&l9ew? z%A1@6{Qrb_`BITDU_|857hDUNa6g+w-fPvB{@@`-wp^6K^udpDBCgb%+&I+TwaJAA z62R|#(YMNem=Sq?zP4+Dk?K=@dfY7LKvEYtyDTQ%znd0B=Q2}n_QJ-7ODS6?8mqXp zw5K~VtsS;LvF z$9Dv0J0a12sTFuO=Rg>4ZNX$*_nL;0iRq2goee6m>x1n|chp|gCRd!SC-%fV`AFxF ze44ICt-|=8AGwGd`pm_6t-Z)8Q1$6kQbC>CLC}Qni$8jV4H%Rfg=A-QY%Gk8QQZDd!*9R~8IHYU*C~*) zw3n3k*4M~uhD82=G6+PYwSwg-8>x6|(8tVP^g(8!r&SC?<%d=#Eg7k&N+u#}V&1+) zzcn`UF>#l#{D$b}ea+09nDu-MMI`=w>}(|ZQ+7pV?_eL_uHLqFJ6-6EtHsYmwj7Wy z(fk+J&@r8+r-PoEr_=6uf*-1al{l)UriikC`r~3Q(bw|VY-pP!%t}{3Cb|l3dNCdc z2|GSU3RcoHGIrsR%TTPHbrB0Mhtruydc0c>A+U~4U;xDxabJ$-_01u>-04qMd9)gQ zAIC-eI5nJCGdxgTSW9=yf7OUIT@G7dY(g}&aQ-D;&fabW+g_A2+}RJk|M`1Ap+6YG z#-_5g24uvM>&3mil5Oy}?LeSd#cmAt&w=9O*i;(CWZCjLTkoI4=Qj2MjNuwzmnAY| zdV0OVH=bplycg@_>_GxdQqXO~+5R@gDEn#WeU_S!-%^#U{<}xDHpt z-{}#N1K(IrvbPSOoJd&V-0HR&C&^m%VYi!#Dv;6)icC4WydwP8OHuNVkKUk1yD|K5KDhqHUd?Et0a>u*S~r@a?^zSYarRa_^9*MIi2NMn$5AB4 z8XsFJ-F&7$3R>2BwmjWG1V1lrq^LToi9)bD$_EQSvbJ1?9XHxAU&f>8p6bI_%{Vx?7>#Vdd&@L)vzJh>d9!3v&nNR_T zgIUJ6ECTTP-TUy@?>EPRXe-<2`X#+ z?Or+yTp;kMlYlT>so}8gO2EnXSiq?2nQvxnbE9wPAK_%gE$;@K*4D)&`>-{ zeQ0w2s9o0=PM!oSwab2qHKkgvvuk6;{5xeiq;s{hpTOcSH1TB zShxK+4`nweNk;`*j;$gfd6?;zcnfk+xQ`T5@C?~~OH%2eAYQ4KZc6z%LGRDQ6oPP2EL&OkMZEQm6rb z{N*&B{F#`0HWL^b=$mB==xx3I>>JVVl10w6-jp3!l>F0(ZdmRxrjnswuM>vIm;;+Z;TEjz?7`+N9tQV6}r zX>ahb>p1-JLWjEkDGVFf3v{8o$<`=W07HSJg^y;VYDu+dwEpT!KS2T`NB<(nt0IiF z{+X*{`k|s4<+GPq_esJdjyEQRt>zGRgrni26Hpw99VkKny5$$UD_p|;PFI{#B93HMZpp@nMaTPw z!qw6)dOlynaOI*)eWQW(Bxyf`1scg$UR_mAYgtMqw#N1B3xc5XLkSLBGK8fZIv>*# z$m1Ftlf$vxyN6`{eu-G$aG7WBS`m5W26&2DDR)uo!wkchP7GHvmLk=Rx;}^#9QSHN z3$`VhV}HcTfkj@-DWHmSvzqgw2_^)xMk~y+?YMeIR4QGXh`6pLDoI|7t}xs;E+I;h zK%n_DZOg=))t)-@M8WXVJ~h!XcuAmDl)L#i{!E^@^olu?9>1U7Yfqhy3t$Gz*e^&3 znEF?m^@>oF@9P2?8Cjz}Yz~02w+`fB4~?#b!JO;A#DTaq_~obXrBqKjt<=7Rx%-iM zdRFURp66hI{ypBV8p>$-6Baek4tJQAX6#aL&$gMGm8H`*mq7F7;b+c{p+#d&ElryS zH~JU!^w&4!lo@xp+}={K(YdKg%6w3}7v0$SSnY+f*uGl}g6UPGmwIY!Yt6c=PcJInsvFII!9jvr-#;ZaHR7HM`?KJ8J8U8?*8H3+gbVVrpNj6EudYP}H8@N;{3tIAeaN%2*WoZQ zI@%A7RBO1pG($o~BCE1Tb=ztg@kTN9HlCD{n+F|1Co?J7Vog*C#KU%maIit9L-4M? z_I{0!ZYEU0ljH~Y_Qzd>Kw6uG&#_fLlP|%lspa{SDVYMqE>!RVx^LfY+3@DVfaX2J z1?N!xgJe)a2@E8}dH?=XHn|YRT0(D)r3&{VDU?$8+^o{e`V8#n_MNC*I)1QPaq|YM zerSE1q*WsQ#U+T$;v?1^J;LLovh9=JCYyw*W*wOeXMjvH{rM2B=5hvNgYYzn=mIK4 zz!*sN(wScr;>;ZG`CC*>jI<-<*EjjDiQWDccgaK%7P7fzr+lcRqfXJE35}|XiOLUA z4y}e_ivngYP5_2t=YXs)%v4vGrEs+Up_C+VoY{5po*}R*pZnI~S0UJN!p~nyY|yN$ z3y=M^dwiU>4Vxwaj85!H(GdA^^CV~?LWtf<_@AIeIhG&o1bI_2lP1EpJ((K9vvX28!O{)TI6nwpw zNJOa)3Nr`AeD=7klc9%Hz_kGlpD4^kkAV#UXIw~+x_J|1)TY*kS2sH#g@fxZ;TL*% z-b2rvd*i}6HQ3js<4aOdaG)A@@9q?oDHzvb+pyyr8rdw{4u}beWsWSf`rbK$L5Tof z0rO8)+ThXxh>Pm5{3ZF2lRl5I!)vMU=TIEqcd?yT%f=PrHdBi%`uKs=WeuC7-o6Aj z(G~HjA~*TE(xlf)7Zhf+L!t0tb31VNbM*}?^zjQyN({N%JM5KrOZb`M0^IfYpE{G^ zekRD>XeZ>x>>sWdkO5D-?|w3E>m2^7Qdz(8Y)Jp0Z>SX-)+(s2^o280ne%fV;U~4a00#yD2MzV34xIZbDJdPx%VoHRg|Uu7tdQk& z9^G)GnIrLTSYF1S+@}rxWT%X)U)qq+FRf6Lj*v|BIn2c#3Xw8$G!xjRK#dG=z z^~9S`L?_LW_nP`jZw8A47MjL!*nO@xl^F#pVs;#GZYi|HyZm$4WMkiJV-d=u8g{Vz z?w3w|a4Bl#)QMJ8fULfm@3`71)Trk(7FASkZtfE=X2Q?`-HG#Y>rnQ{d%W+*7%sR= z3#1D(4bp8M{JaUMd> z8XdZ5uwq1S63KfiEpAEz<{Ge!soOrJw{-4bccq4<5H23zef$H(#+A3VHNYLUa39LO z2+-*D`(WalKAg1iKGrw)xu3t|CDQ$p|hz5`5%r+|C^w@a5 zQ&@GV_|CN63BS8|dDJan{!2}=WHU133-iNyRSH^>hxqG8)ES>xY4f*TC9TnWNvlTe zDlgn6N?D#L;*PXm%0PU|S=@idI5o2|!~hBxqlekF+=}HriXWh<7Y`eTuy^DD_qU<-SUq4 z$<*{;lq-HLGR42O|>)aJ0H*sTU&J)DwL^@7>an? ztz92&Sp@a_@!w;?7co68BL1l`&V{;L(cH5xV^9w0;w0EDHEoZ_#TuA*Vd57O**K@BKkMbg!#Eh$mgF2g z66&@xq^QZZpv07S)^8Bm+Cv_3YqLCkzm)e-0T8t!zbTb{_&E%VCjmDzD%(bzOWoO zuDN1uGm+4-j=g5RJhvE^3_P0}b!xb~MD%*(WyC|wNHV2wC_6IS7(C+=rdY!Zo;rCV zssLKg5!mb1d28##`zM*@j;`ct7G@`r$SLtSHT2AlK+}izrp@?DR7r?trgVmgyFe~t5I`qBF z8A;$?w6X8}Bi%-Y%kj1J8y*)SXML6sJ$UlvKlD)jA6#A>^@v3CK7uE-IRRX#gRpgYF5gglCaaSsrMhNr@T~;1z4yO07@)~82lyV7%eIool0G3-_dzPVqCFM2N z{Q&H5MWw30PK7>G=BoDD=}w>r7~kQvNLp4X){$5vXT6b>3)v_w$!O?D`uEvF6!B5EYerg4l@E!(7KzgDU{i8#JHi7$ z7p#cAhtukC_gnrTR*noMQMDgi{Q4A09gKWtktY|=;COr1DNNC=oBIE@$t^nUFqE># zy0Ed)*z4|F#@AT?pHoc#dD8?WrwP6}&wwwL{`YDu4-|SrIbZv|#`;WYf(sV$X-S4I zUTyD5dS}Y!?wZ+lpNZY-|vVf*Y<1Y&qaYr zoNH{MSTaQReS(G{M{^eKXCuw};MvKW?Rr(P=g?~8al8CGZWHVl{K*-q+c!Es8 uYXJBdPRj|p*Z+L1>_2bF|E`_!0^@19>ew{EC<2}_2A-)rS1wnw4E-Nx6m1Ov From 15639d30b89b46601bfc00b074482b7dc4cbea8d Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 8 May 2016 04:21:10 +0000 Subject: [PATCH 05/13] Automatic changelog generation for PR #17202 --- html/changelogs/AutoChangeLog-pr-17202.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17202.yml diff --git a/html/changelogs/AutoChangeLog-pr-17202.yml b/html/changelogs/AutoChangeLog-pr-17202.yml new file mode 100644 index 00000000000..a8b2d849641 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17202.yml @@ -0,0 +1,5 @@ +author: CoreOverload +delete-after: True +changes: + - rscadd: "You can now de-power inactive swarmers with a screwdriver to prevent them from activating." + - rscadd: "Recycle depowered swarmers in autolathe or sell them in cargo!" From a66c2f44182cd9c26a6841c78420efe1929c60bf Mon Sep 17 00:00:00 2001 From: Core0verload Date: Sun, 8 May 2016 13:11:18 +0300 Subject: [PATCH 06/13] Machine/computer boards and frames refactor (#17300) * Map Changes * Machine/console boards and frames refactor * More board changes --- _maps/RandomRuins/SpaceRuins/deepstorage.dmm | 2 +- .../RandomRuins/SpaceRuins/mechtransport.dmm | 2 +- _maps/RandomRuins/SpaceRuins/onehalf.dmm | 4 +- .../SpaceRuins/turretedoutpost.dmm | 2 +- _maps/RandomZLevels/Academy.dmm | 6 +- _maps/RandomZLevels/centcomAway.dmm | 6 +- _maps/RandomZLevels/moonoutpost19.dmm | 2 +- _maps/RandomZLevels/research.dmm | 2 +- _maps/RandomZLevels/snowdin.dmm | 4 +- .../AsteroidStation/AsteroidStation.dmm | 80 +- _maps/map_files/BirdStation/BirdStation.dmm | 20 +- .../map_files/DreamStation/dreamstation04.dmm | 130 ++-- .../EfficiencyStation/EfficiencyStation.dmm | 94 +-- .../MetaStation/MetaStation.v41I.dmm | 104 +-- _maps/map_files/MiniStation/MiniStation.dmm | 6 +- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 84 +- _maps/map_files/generic/z3.dmm | 10 +- _maps/map_files/generic/z4.dmm | 34 +- _maps/map_files/generic/z6.dmm | 6 +- code/game/machinery/Sleeper.dm | 22 +- code/game/machinery/announcement_system.dm | 17 +- code/game/machinery/autolathe.dm | 19 +- code/game/machinery/cloning.dm | 22 +- code/game/machinery/computer/Operating.dm | 2 +- code/game/machinery/computer/aifixer.dm | 2 +- code/game/machinery/computer/arcade.dm | 6 +- code/game/machinery/computer/atmos_alert.dm | 2 +- code/game/machinery/computer/atmos_control.dm | 4 +- .../game/machinery/computer/buildandrepair.dm | 604 ++++++++------- code/game/machinery/computer/camera.dm | 4 +- code/game/machinery/computer/card.dm | 8 +- code/game/machinery/computer/cloning.dm | 2 +- .../game/machinery/computer/communications.dm | 6 +- code/game/machinery/computer/computer.dm | 9 +- code/game/machinery/computer/crew.dm | 2 +- code/game/machinery/computer/dna_console.dm | 2 +- code/game/machinery/computer/law.dm | 4 +- code/game/machinery/computer/medical.dm | 2 +- code/game/machinery/computer/message.dm | 2 +- code/game/machinery/computer/prisoner.dm | 3 +- code/game/machinery/computer/robot.dm | 2 +- code/game/machinery/computer/security.dm | 2 +- code/game/machinery/computer/station_alert.dm | 2 +- code/game/machinery/constructable_frame.dm | 729 +++--------------- code/game/machinery/dna_scanner.dm | 21 +- code/game/machinery/hologram.dm | 13 +- code/game/machinery/machinery.dm | 4 +- code/game/machinery/recharger.dm | 12 +- code/game/machinery/rechargestation.dm | 19 +- code/game/machinery/recycler.dm | 16 +- code/game/machinery/slotmachine.dm | 2 +- code/game/machinery/spaceheater.dm | 17 +- .../telecomms/computers/logbrowser.dm | 2 +- .../telecomms/computers/telemonitor.dm | 2 +- .../telecomms/machines/broadcaster.dm | 24 +- code/game/machinery/telecomms/machines/bus.dm | 18 +- code/game/machinery/telecomms/machines/hub.dm | 20 +- .../machinery/telecomms/machines/processor.dm | 29 +- .../machinery/telecomms/machines/receiver.dm | 21 +- .../machinery/telecomms/machines/relay.dm | 20 +- .../machinery/telecomms/machines/server.dm | 19 +- .../machinery/telecomms/telecomunications.dm | 1 - code/game/machinery/teleporter.dm | 6 +- code/game/machinery/vending.dm | 48 +- code/game/mecha/mech_bay.dm | 21 +- code/game/mecha/mech_fabricator.dm | 20 +- code/game/mecha/mecha_control_console.dm | 2 +- code/game/mecha/mecha_parts.dm | 1 - .../items/stacks/sheets/sheet_types.dm | 7 +- code/game/objects/items/stacks/stack.dm | 1 + .../objects/items/weapons/storage/boxes.dm | 8 +- code/game/objects/structures/ai_core.dm | 5 + .../components/unary_devices/cryo.dm | 19 +- .../components/unary_devices/thermomachine.dm | 53 +- code/modules/cargo/console.dm | 8 +- code/modules/cargo/exports/parts.dm | 2 +- code/modules/cargo/packs.dm | 2 +- .../food&drinks/kitchen machinery/gibber.dm | 15 +- .../kitchen machinery/microwave.dm | 19 +- .../kitchen machinery/monkeyrecycler.dm | 15 +- .../kitchen machinery/processor.dm | 17 +- .../kitchen machinery/smartfridge.dm | 31 +- code/modules/hydroponics/biogenerator.dm | 23 +- code/modules/hydroponics/gene_modder.dm | 21 +- code/modules/hydroponics/hydroponics.dm | 18 +- code/modules/hydroponics/seed_extractor.dm | 15 +- code/modules/library/lib_machines.dm | 2 +- code/modules/mining/equipment_locker.dm | 51 +- code/modules/mining/laborcamp/laborshuttle.dm | 4 +- code/modules/mining/mine_items.dm | 2 +- .../mob/living/simple_animal/parrot.dm | 2 +- code/modules/power/cell.dm | 1 + code/modules/power/monitor.dm | 2 +- code/modules/power/port_gen.dm | 37 +- code/modules/power/singularity/emitter.dm | 14 +- code/modules/power/smes.dm | 2 +- code/modules/power/solar.dm | 8 +- code/modules/power/tesla/coil.dm | 24 +- code/modules/power/turbine.dm | 41 +- .../mapGenerators/syndicate.dm | 2 +- .../chemistry/machinery/chem_dispenser.dm | 2 +- .../chemistry/machinery/chem_heater.dm | 15 +- .../chemistry/machinery/chem_master.dm | 81 +- .../reagents/chemistry/machinery/pandemic.dm | 2 +- code/modules/research/circuitprinter.dm | 18 +- .../research/designs/AI_module_designs.dm | 10 + .../research/designs/comp_board_designs.dm | 72 +- .../research/designs/machine_designs.dm | 96 +-- .../modules/research/designs/power_designs.dm | 6 +- .../research/designs/telecomms_designs.dm | 14 +- code/modules/research/destructive_analyzer.dm | 17 +- code/modules/research/experimentor.dm | 20 +- code/modules/research/protolathe.dm | 20 +- code/modules/research/rdconsole.dm | 2 +- code/modules/research/server.dm | 20 +- code/modules/shuttle/computer.dm | 4 +- code/modules/shuttle/ferry.dm | 4 +- code/modules/shuttle/white_ship.dm | 2 +- code/modules/telesci/telepad.dm | 2 +- code/modules/telesci/telesci_computer.dm | 2 +- icons/obj/stock_parts.dmi | Bin 13157 -> 13401 bytes 121 files changed, 1540 insertions(+), 1775 deletions(-) diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 7bbf634d695..51daaeb0132 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -104,7 +104,7 @@ "bZ" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/open/floor/plasteel,/area/ruin/unpowered) "ca" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/floorgrime,/area/ruin/unpowered) "cb" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/floorgrime,/area/ruin/unpowered) -"cc" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/unpowered) +"cc" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/unpowered) "cd" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen{dir = 1; name = "Bunker Entrance"; network = list("Bunker1"); pixel_x = 0; pixel_y = 2},/turf/open/floor/plasteel,/area/ruin/unpowered) "ce" = (/obj/structure/table/reinforced,/obj/machinery/button/door{id = "bunker1"; name = "Inner Doors"; pixel_y = 6},/obj/machinery/button/door{id = "bunker2"; name = "Outer Doors"; pixel_y = -4},/turf/open/floor/plasteel/floorgrime,/area/ruin/unpowered) "cf" = (/obj/machinery/door/poddoor{id = "bunker1"; name = "Bunker Door"; tag = "inner"},/turf/open/floor/plating,/area/ruin/unpowered) diff --git a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm index a89e9b0d62c..b0c1f95d53f 100644 --- a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm @@ -7,7 +7,7 @@ "g" = (/obj/structure/closet/crate/secure/loot,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "h" = (/obj/structure/table,/obj/machinery/button/door{id = "mechaship1"; name = "Mecha Cargo Ship Doors"},/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "i" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) -"j" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) +"j" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "k" = (/obj/effect/decal/cleanable/vomit/old,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "l" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) "m" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/shuttle,/area/ruin/powered) diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index e4e78df2b49..d5af9dd9789 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -105,8 +105,8 @@ "ca" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cb" = (/obj/structure/table/reinforced,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cc" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) -"cd" = (/obj/machinery/light{dir = 1},/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) -"ce" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) +"cd" = (/obj/machinery/light{dir = 1},/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) +"ce" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cf" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Bridge APC"; pixel_y = 24},/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "cg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/reinforced,/obj/item/stack/spacecash/c500{pixel_y = 8},/obj/item/stack/spacecash/c1000,/turf/open/floor/plasteel,/area/ruin/onehalf/bridge) "ch" = (/obj/structure/girder/reinforced,/turf/open/floor/plating/airless,/area/space) diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm index 8368eef3e58..2403575403f 100644 --- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -3,7 +3,7 @@ "c" = (/obj/structure/grille,/turf/open/floor/plating,/area/ruin/unpowered) "d" = (/turf/closed/wall/r_wall,/area/ruin/unpowered) "e" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/cell/hyper,/turf/open/floor/plasteel,/area/ruin/unpowered) -"f" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/ruin/unpowered) +"f" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/ruin/unpowered) "g" = (/turf/open/floor/plasteel,/area/ruin/unpowered) "h" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel,/area/ruin/unpowered) "i" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating,/area/ruin/unpowered) diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 72d1d2d19ee..6ef98e0b2ae 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -2,7 +2,7 @@ "ab" = (/turf/closed/wall/r_wall,/area/awaymission/academy/headmaster) "ac" = (/mob/living/simple_animal/hostile/carp/ranged{faction = list("wizard")},/turf/open/space,/area/space) "ad" = (/obj/structure/filingcabinet/filingcabinet,/turf/open/floor/carpet,/area/awaymission/academy/headmaster) -"ae" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/carpet,/area/awaymission/academy/headmaster) +"ae" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/carpet,/area/awaymission/academy/headmaster) "af" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/turf/open/floor/carpet,/area/awaymission/academy/headmaster) "ag" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/blue,/turf/open/floor/carpet,/area/awaymission/academy/headmaster) "ah" = (/turf/open/floor/carpet,/area/awaymission/academy/headmaster) @@ -401,7 +401,7 @@ "hK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/caution,/turf/open/floor/plasteel{icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft) "hL" = (/obj/structure/mecha_wreckage/durand,/turf/open/floor/plating,/area/awaymission/academy/classrooms) "hM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) -"hN" = (/obj/machinery/constructable_frame/machine_frame,/turf/open/floor/plating,/area/awaymission/academy/academyaft) +"hN" = (/obj/structure/frame/machine,/turf/open/floor/plating,/area/awaymission/academy/academyaft) "hO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating,/area/awaymission/academy/academyaft) "hP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "hQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) @@ -423,7 +423,7 @@ "ig" = (/obj/item/stack/cable_coil/random,/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ih" = (/obj/structure/rack,/obj/item/stack/sheet/mineral/plasma{amount = 50},/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ii" = (/turf/open/floor/grass,/area/awaymission/academy/academyaft) -"ij" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/relay,/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) +"ij" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/telecomms/broadcaster,/obj/item/weapon/circuitboard/machine/telecomms/receiver,/obj/item/weapon/circuitboard/machine/telecomms/relay,/turf/open/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft) "ik" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/awaymission/academy/academyaft) "il" = (/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft) "im" = (/obj/structure/mirror{pixel_y = 28},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft) diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 4366496499d..10bb875ef54 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -259,7 +259,7 @@ "eY" = (/turf/closed/wall,/area/awaymission/centcomAway/courtroom) "eZ" = (/obj/structure/table,/obj/item/weapon/storage/lockbox,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fa" = (/obj/structure/table,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) -"fb" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) +"fb" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fc" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fd" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/shuttle,/area/awaymission/centcomAway/hangar) "fe" = (/turf/open/floor/plasteel{icon_state = "green"; dir = 10},/area/awaymission/centcomAway/general) @@ -471,7 +471,7 @@ "jc" = (/turf/open/floor/plasteel{icon_state = "ironsand4"; dir = 8; heat_capacity = 1},/area/awaymission/centcomAway/general) "jd" = (/obj/structure/table/wood{dir = 10},/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) "je" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) -"jf" = (/obj/structure/computerframe,/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) +"jf" = (/obj/structure/frame/computer,/turf/open/floor/plasteel{icon_state = "grimy"},/area/awaymission/centcomAway/general) "jg" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/open/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/general) "jh" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/general) "ji" = (/obj/structure/closet/secure_closet/personal,/turf/open/floor/plasteel{icon_state = "vault"; dir = 1},/area/awaymission/centcomAway/hangar) @@ -636,7 +636,7 @@ "ml" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/centcomAway/cafe) "mm" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mn" = (/obj/structure/table,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) -"mo" = (/obj/structure/computerframe,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) +"mo" = (/obj/structure/frame/computer,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mp" = (/obj/structure/closet/secure_closet/bar,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mq" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) "mr" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plasteel{icon_state = "redyellowfull"; dir = 5},/area/awaymission/centcomAway/thunderdome) diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index ec6efe1a4c1..94372ad1e39 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -415,7 +415,7 @@ "hY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "hZ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/computer/security/telescreen{desc = "Used for monitoring the research division and the labs within."; name = "research monitor"; network = list("MO19X","MO19R")},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "ia" = (/obj/machinery/computer/aifixer,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) -"ib" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/circuitboard/teleporter,/turf/open/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) +"ib" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "ic" = (/obj/structure/rack,/obj/item/device/paicard{pixel_x = 4},/turf/open/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "id" = (/obj/structure/rack,/turf/open/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "warnwhite"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "ie" = (/obj/machinery/door/airlock/glass_medical{glass = 0; id_tag = ""; name = "Research Division"; opacity = 1; req_access_txt = "201"; req_one_access_txt = "0"},/turf/open/floor/plasteel{heat_capacity = 1e+006; icon_state = "white"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 58e77da0d87..b58f159b2e6 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -19,7 +19,7 @@ "as" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/open/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) "at" = (/obj/machinery/suit_storage_unit/engine,/turf/open/floor/plating,/area/awaymission/research/interior/engineering) "au" = (/turf/open/floor/plating,/area/awaymission/research/interior/engineering) -"av" = (/obj/item/weapon/shard{icon_state = "small"},/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high/empty,/turf/open/floor/plating,/area/awaymission/research/interior/engineering) +"av" = (/obj/item/weapon/shard{icon_state = "small"},/obj/structure/frame/machine,/obj/item/weapon/circuitboard/machine/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high/empty,/turf/open/floor/plating,/area/awaymission/research/interior/engineering) "aw" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plasteel/whiteyellow/side,/area/awaymission/research/interior/engineering) "ax" = (/obj/structure/flora/kirbyplants{icon_state = "plant-20"; layer = 4.1; pixel_y = 3},/turf/open/floor/plasteel/whiteyellow/corner{tag = "icon-whiteyellowcorner (WEST)"; icon_state = "whiteyellowcorner"; dir = 8},/area/awaymission/research/interior/engineering) "ay" = (/obj/structure/chair{dir = 8},/mob/living/simple_animal/hostile/syndicate,/turf/open/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 209ebe93ddd..fd12bea52ab 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -329,7 +329,7 @@ "gq" = (/turf/open/floor/plasteel/stairs/right{baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140},/area/awaymission/snowdin/cave) "gr" = (/turf/open/floor/plating,/turf/open/floor/plating/snowed,/area/awaymission/snowdin/post) "gs" = (/obj/structure/girder,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/post) -"gt" = (/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) +"gt" = (/obj/structure/frame/machine,/obj/item/weapon/circuitboard/machine/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gu" = (/obj/item/weapon/stock_parts/cell/high/empty,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gv" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "gw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) @@ -464,7 +464,7 @@ "iY" = (/obj/machinery/light/small,/turf/open/floor/plating/asteroid/snow,/area/awaymission/snowdin) "iZ" = (/obj/machinery/light/small,/turf/open/floor/plating/snowed,/area/awaymission/snowdin) "ja" = (/obj/item/weapon/shard,/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin) -"jb" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle{baseturf = /turf/open/floor/plating/asteroid/snow; icon_state = "shuttlefloor4"; temperature = 180},/area/awaymission/snowdin) +"jb" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle{baseturf = /turf/open/floor/plating/asteroid/snow; icon_state = "shuttlefloor4"; temperature = 180},/area/awaymission/snowdin) "jc" = (/obj/machinery/door/poddoor/shutters{id = "garagesnow3"},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow},/area/awaymission/snowdin/post) "jd" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/sekret) "je" = (/turf/open/floor/plating{baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140},/area/awaymission/snowdin/sekret) diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index f30468aae07..7aa34319ef8 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -81,7 +81,7 @@ }, /area/shuttle/syndicate) "aan" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -4024,17 +4024,17 @@ /area/storage/tech) "ajc" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, /turf/open/floor/plasteel{ dir = 5; icon_state = "yellow" @@ -4042,11 +4042,11 @@ /area/storage/tech) "ajd" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -4064,11 +4064,11 @@ /area/storage/tech) "ajf" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -4076,14 +4076,14 @@ /area/storage/tech) "ajg" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /turf/open/floor/plasteel{ dir = 9; icon_state = "yellow" @@ -4483,14 +4483,14 @@ /area/storage/tech) "ajW" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/cloning, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/cloning, +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plasteel{ dir = 4; icon_state = "yellow" @@ -4508,12 +4508,12 @@ /area/storage/tech) "ajY" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -4895,15 +4895,15 @@ /area/storage/tech) "akI" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, @@ -4969,15 +4969,15 @@ /area/storage/tech) "akO" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -10985,14 +10985,14 @@ /area/tcommsat/computer) "axw" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -13581,13 +13581,13 @@ name = "Construction Site" }) "aBX" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/construction/Storage{ name = "Construction Site" }) "aBY" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/construction/Storage{ name = "Construction Site" @@ -25626,7 +25626,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /turf/open/floor/plasteel{ icon_state = "yellow" @@ -45842,7 +45842,7 @@ /turf/open/floor/plasteel/airless, /area/mine/abandoned) "bOd" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /obj/effect/decal/cleanable/cobweb2, @@ -47113,7 +47113,7 @@ pixel_x = 31 }, /obj/structure/rack, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /obj/item/weapon/circuitboard/aicore{ pixel_x = -2; pixel_y = 4 diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 5ecccfef356..2ce75a3cb31 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -9,7 +9,7 @@ "aai" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aaj" = (/obj/machinery/computer/shuttle/syndicate,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aak" = (/obj/structure/table,/obj/machinery/button/door{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"aal" = (/obj/structure/computerframe,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) +"aal" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aam" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aan" = (/obj/structure/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aao" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 10},/obj/item/device/multitool,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -75,7 +75,7 @@ "abw" = (/obj/structure/table/optable,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abx" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "aby" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/shuttle/syndicate) -"abz" = (/obj/structure/computerframe,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) +"abz" = (/obj/structure/frame/computer,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abA" = (/obj/machinery/teleport/station,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abB" = (/obj/machinery/teleport/hub/syndicate,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abC" = (/turf/open/floor/plasteel/black,/area/engine/engineering) @@ -694,7 +694,7 @@ "anr" = (/obj/machinery/computer/arcade,/turf/open/floor/plating,/area/maintenance/fsmaint) "ans" = (/obj/structure/chair/stool,/obj/machinery/light/small{dir = 1},/turf/open/floor/wood,/area/maintenance/fsmaint) "ant" = (/obj/structure/flora/kirbyplants{anchored = 1; icon_state = "plant-05"; layer = 4.1; name = "incredibly heavy plant"},/turf/open/floor/wood,/area/maintenance/fsmaint) -"anu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fsmaint) +"anu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/computer/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fsmaint) "anv" = (/obj/structure/grille,/turf/open/floor/plating,/area/maintenance/fsmaint) "anw" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel,/area/maintenance/fsmaint) "anx" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/open/floor/plasteel,/area/engine/engineering) @@ -1555,7 +1555,7 @@ "aDU" = (/obj/structure/cable/cyan{icon_state = "4-8"},/turf/open/floor/plasteel,/area/maintenance/asmaint2) "aDV" = (/obj/structure/cable/cyan{icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/open/floor/plasteel/warning/corner,/area/maintenance/asmaint2) "aDW" = (/obj/item/weapon/ed209_assembly,/obj/structure/cable/cyan{icon_state = "0-2"},/turf/open/floor/plating,/area/maintenance/asmaint2) -"aDX" = (/obj/structure/table,/obj/item/weapon/circuitboard/circuit_imprinter,/turf/open/floor/plating,/area/maintenance/asmaint2) +"aDX" = (/obj/structure/table,/obj/item/weapon/circuitboard/machine/circuit_imprinter,/turf/open/floor/plating,/area/maintenance/asmaint2) "aDY" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/shuttle/escape) "aDZ" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape) "aEa" = (/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/shuttle/escape) @@ -2460,7 +2460,7 @@ "aVr" = (/obj/structure/closet/wardrobe/white/medical,/obj/item/weapon/storage/box/bodybags,/turf/open/floor/plasteel/white,/area/security/warden) "aVs" = (/obj/structure/closet{name = "chem implant closet"},/obj/item/weapon/reagent_containers/glass/bottle/cyanide,/obj/item/weapon/reagent_containers/glass/bottle/initropidril,/obj/item/weapon/reagent_containers/glass/bottle/coniine,/obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental,/obj/item/weapon/storage/box/chemimp,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/gun/syringe,/obj/item/weapon/storage/box/syringes,/turf/open/floor/plasteel/white,/area/security/warden) "aVt" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/camera/autoname{icon_state = "camera"; dir = 6},/obj/item/clothing/gloves/color/latex/nitrile,/turf/open/floor/plasteel/white,/area/security/warden) -"aVu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/toxins/xenobiology) +"aVu" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/computer/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/toxins/xenobiology) "aVv" = (/obj/machinery/button/flasher{id = "permaflash"; name = "perma flasher button"; pixel_x = 0; pixel_y = 28},/turf/open/floor/plasteel,/area/security/brig) "aVw" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "perma shutter"; name = "perma brig window shutter"},/turf/open/floor/plating,/area/security/brig) "aVx" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel/warnwhite{icon_state = "warnwhite"; dir = 4},/area/medical/medbay) @@ -2501,7 +2501,7 @@ "aWg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel,/area/maintenance/asmaint2) "aWh" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) "aWi" = (/obj/structure/table,/obj/item/device/flashlight/seclite,/obj/item/clothing/suit/armor/vest,/obj/machinery/light{dir = 1},/obj/item/weapon/restraints/legcuffs/beartrap,/obj/item/weapon/restraints/legcuffs/beartrap,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) -"aWj" = (/obj/item/weapon/circuitboard/security,/turf/open/floor/plating,/area/maintenance/asmaint2) +"aWj" = (/obj/item/weapon/circuitboard/computer/security,/turf/open/floor/plating,/area/maintenance/asmaint2) "aWk" = (/obj/structure/window/reinforced,/obj/structure/flora/kirbyplants{icon_state = "plant-17"; layer = 4.1},/turf/open/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"}) "aWl" = (/obj/machinery/vending/assist,/turf/open/floor/plasteel/warning{icon_state = "warning"; dir = 10},/area/maintenance/fore{name = "Security Maintenance"}) "aWm" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/turf/open/floor/plasteel/warning,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2592,8 +2592,8 @@ "aXT" = (/obj/structure/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/turf/open/floor/plasteel/shuttle,/area/shuttle/arrival) "aXU" = (/obj/effect/landmark{name = "JoinLate"},/turf/open/floor/plasteel/shuttle,/area/shuttle/arrival) "aXV" = (/obj/item/device/flashlight/seclite{name = "dusty seclite"; on = 1},/turf/open/floor/plating/asteroid{name = "dirt"},/area/maintenance/asmaint2) -"aXW" = (/obj/item/weapon/circuitboard/card,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) -"aXX" = (/obj/structure/computerframe,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) +"aXW" = (/obj/item/weapon/circuitboard/computer/card,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) +"aXX" = (/obj/structure/frame/computer,/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/maintenance/asmaint2) "aXY" = (/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1},/turf/open/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"}) "aXZ" = (/turf/open/floor/plasteel/bot,/area/maintenance/fore{name = "Security Maintenance"}) "aYa" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 10},/turf/open/floor/plasteel,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2784,7 +2784,7 @@ "bbD" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/organ/gland/bloody = 7, /obj/item/organ/gland/bodysnatch = 4, /obj/item/organ/gland/egg = 7, /obj/item/organ/gland/emp = 3, /obj/item/organ/gland/mindshock = 5, /obj/item/organ/gland/plasma = 7, /obj/item/organ/gland/pop = 5, /obj/item/organ/gland/slime = 4, /obj/item/organ/gland/spiderman = 5, /obj/item/organ/gland/ventcrawling = 1, /obj/item/organ/body_egg/alien_embryo = 1, /obj/item/organ/hivelord_core = 2); lootcount = 3; name = "organ spawner"},/obj/structure/closet/secure_closet{name = "xenobiology research materials locker"; req_access_txt = "55"},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "bbE" = (/mob/living/simple_animal/mouse/brown,/turf/open/floor/wood,/area/maintenance/fore{name = "Security Maintenance"}) "bbF" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) -"bbG" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) +"bbG" = (/obj/structure/closet/crate{name = "solar pack crate"},/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/weapon/circuitboard/computer/solar_control,/obj/item/weapon/electronics/tracker,/obj/item/weapon/paper/solar,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "bbH" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "bbI" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 5},/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "bbJ" = (/obj/structure/cable/cyan{icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 4},/turf/open/floor/plasteel,/area/maintenance/fore{name = "Security Maintenance"}) @@ -2854,7 +2854,7 @@ "bcV" = (/obj/item/weapon/storage/box/lights/mixed,/turf/open/floor/plating,/area/maintenance/asmaint) "bcW" = (/obj/structure/closet/firecloset,/turf/open/floor/plating,/area/maintenance/asmaint) "bcX" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/maintenance/asmaint) -"bcY" = (/obj/structure/table,/obj/item/weapon/circuitboard/autolathe,/turf/open/floor/plating,/area/maintenance/asmaint2) +"bcY" = (/obj/structure/table,/obj/item/weapon/circuitboard/machine/autolathe,/turf/open/floor/plating,/area/maintenance/asmaint2) "bcZ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plating,/area/maintenance/asmaint2) "bda" = (/turf/open/floor/plasteel/shuttle,/turf/closed/wall/shuttle/interior{icon_state = "swall_f9"},/area/shuttle/transport) "bdb" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle,/area/shuttle/transport) diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 87cdb1c609c..d9b8f0cce5b 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -1434,7 +1434,7 @@ }, /area/shuttle/syndicate) "acC" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -2533,7 +2533,7 @@ }, /area/shuttle/abandoned) "aeG" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plasteel/shuttle{ @@ -2838,7 +2838,7 @@ }, /area/shuttle/abandoned) "afo" = ( -/obj/item/weapon/circuitboard/operating, +/obj/item/weapon/circuitboard/computer/operating, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor3" }, @@ -5745,8 +5745,8 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "alK" = ( -/obj/structure/computerframe, -/obj/item/weapon/circuitboard/operating, +/obj/structure/frame/computer, +/obj/item/weapon/circuitboard/computer/operating, /turf/open/floor/plating, /area/maintenance/fpmaint2) "alL" = ( @@ -5889,7 +5889,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "amj" = ( -/obj/item/weapon/circuitboard/sleeper, +/obj/item/weapon/circuitboard/machine/sleeper, /obj/structure/mirror{ pixel_x = 28 }, @@ -6259,7 +6259,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "amV" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/fpmaint2) "amW" = ( @@ -6807,32 +6807,32 @@ "aop" = ( /obj/structure/table, /obj/item/weapon/stock_parts/manipulator, -/obj/item/weapon/circuitboard/microwave, +/obj/item/weapon/circuitboard/machine/microwave, /turf/open/floor/plating{ broken = 1; icon_state = "platingdmg3" }, /area/maintenance/asmaint) "aoq" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/asmaint) "aor" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, -/obj/item/weapon/circuitboard/arcade/orion_trail, +/obj/item/weapon/circuitboard/computer/arcade/orion_trail, /turf/open/floor/plating, /area/maintenance/asmaint) "aos" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plating, /area/maintenance/asmaint) "aot" = ( /obj/structure/table, -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/asmaint) "aou" = ( @@ -10768,7 +10768,7 @@ /obj/structure/rack, /obj/item/weapon/light/tube, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/protolathe, /turf/open/floor/plating, /area/maintenance/asmaint) "awc" = ( @@ -17763,7 +17763,7 @@ /area/maintenance/atmos_control) "aJM" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, /obj/item/trash/chips, /turf/open/floor/plating, /area/maintenance/atmos_control) @@ -23619,11 +23619,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -23651,11 +23651,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -23675,15 +23675,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -23847,7 +23847,7 @@ /turf/open/floor/plating, /area/maintenance/fore) "aVH" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plating{ @@ -23862,7 +23862,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "aVJ" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -27242,16 +27242,16 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning{ +/obj/item/weapon/circuitboard/computer/cloning{ pixel_x = 0 }, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -27262,11 +27262,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -27281,12 +27281,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -27402,7 +27402,7 @@ "bcx" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/weapon/circuitboard/rdconsole, +/obj/item/weapon/circuitboard/computer/rdconsole, /obj/item/weapon/stock_parts/console_screen, /turf/open/floor/plating{ broken = 1; @@ -28690,21 +28690,21 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, -/obj/item/weapon/circuitboard/aifixer, -/obj/item/weapon/circuitboard/teleporter, -/obj/item/weapon/circuitboard/circuit_imprinter, -/obj/item/weapon/circuitboard/mechfab, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, +/obj/item/weapon/circuitboard/computer/aifixer, +/obj/item/weapon/circuitboard/computer/teleporter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/mechfab, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold-b-f (NORTH)"; dir = 1 @@ -28716,15 +28716,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -28736,12 +28736,12 @@ /area/storage/tech) "bfd" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -37083,7 +37083,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "buF" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/fpmaint) "buG" = ( @@ -38399,7 +38399,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "bwK" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/machinery/power/apc{ aidisabled = 0; auto_name = 1; @@ -47438,7 +47438,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "bMn" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/maintenance/fpmaint) "bMo" = ( @@ -61853,7 +61853,7 @@ }, /area/toxins/lab) "cog" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -62568,18 +62568,18 @@ }, /area/maintenance/electrical) "cpA" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, /area/construction) "cpB" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/construction) "cpC" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/machinery/airalarm{ pixel_y = 23 }, @@ -62600,7 +62600,7 @@ }, /area/construction) "cpE" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -65375,7 +65375,7 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /obj/item/device/aicard, /obj/structure/cable/pink{ tag = "icon-2-8"; @@ -72100,7 +72100,7 @@ "cHe" = ( /obj/structure/closet/crate, /obj/item/weapon/reagent_containers/food/snacks/mint, -/obj/item/weapon/circuitboard/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, /turf/open/floor/plating, /area/maintenance/asmaint2) "cHf" = ( @@ -74722,8 +74722,8 @@ }, /area/maintenance/asmaint2) "cLX" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/chem_master, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/chem_master, /turf/open/floor/plating, /area/maintenance/asmaint2) "cLY" = ( diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index 65a5dd9837b..b15f8f1c392 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -588,7 +588,7 @@ }, /area/shuttle/syndicate) "abt" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -1956,7 +1956,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 8; icon = 'icons/obj/Cryogenic2.dmi'; @@ -1992,7 +1992,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 4; icon = 'icons/obj/Cryogenic2.dmi'; @@ -2202,8 +2202,8 @@ }, /area/shuttle/abandoned) "adV" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/chem_dispenser, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/chem_dispenser, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -2213,7 +2213,7 @@ }, /area/shuttle/abandoned) "adW" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -2777,7 +2777,7 @@ }, /area/shuttle/abandoned) "aeR" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -2787,8 +2787,8 @@ }, /area/shuttle/abandoned) "aeS" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/autolathe, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/autolathe, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -3524,8 +3524,8 @@ }, /area/shuttle/abandoned) "aga" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/cyborgrecharger, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/cyborgrecharger, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -4212,7 +4212,7 @@ }, /area/shuttle/abandoned) "ahk" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -4244,7 +4244,7 @@ }, /area/shuttle/abandoned) "ahn" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -14688,7 +14688,7 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /turf/open/floor/plasteel{ dir = 6; icon_state = "warnwhite" @@ -17007,11 +17007,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -17022,15 +17022,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -17041,11 +17041,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -19057,14 +19057,14 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/cloning, +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -19691,11 +19691,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -20334,15 +20334,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -21705,18 +21705,18 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, -/obj/item/weapon/circuitboard/aifixer, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, +/obj/item/weapon/circuitboard/computer/aifixer, /obj/machinery/light_switch{ pixel_x = -25 }, @@ -22455,12 +22455,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /obj/machinery/light/small{ dir = 8 }, @@ -23206,12 +23206,12 @@ /area/hallway/primary/starboard) "aOL" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, /turf/open/floor/plating, @@ -44400,7 +44400,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /obj/structure/cable{ diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index bbec2be5967..43d40cb3424 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -20887,7 +20887,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /turf/open/floor/plasteel{ @@ -31654,15 +31654,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -31675,11 +31675,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -31696,16 +31696,16 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning{ +/obj/item/weapon/circuitboard/computer/cloning{ pixel_x = 0 }, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -33760,11 +33760,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -33804,14 +33804,14 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, -/obj/item/weapon/circuitboard/arcade/battle{ +/obj/item/weapon/circuitboard/computer/arcade/battle{ pixel_x = -4; pixel_y = 2 }, -/obj/item/weapon/circuitboard/arcade/orion_trail{ +/obj/item/weapon/circuitboard/computer/arcade/orion_trail{ pixel_x = 4 }, /turf/open/floor/plasteel{ @@ -33823,8 +33823,8 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, @@ -33837,17 +33837,17 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ icon_state = "dark" @@ -34518,15 +34518,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -35451,11 +35451,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -56963,14 +56963,14 @@ /area/bridge) "bOg" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -79097,7 +79097,7 @@ pixel_x = -2; pixel_y = 4 }, -/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/computer/teleporter, /turf/open/floor/plasteel{ icon_state = "cafeteria"; dir = 5 @@ -96286,7 +96286,7 @@ }, /area/shuttle/syndicate) "cXz" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -97775,8 +97775,8 @@ }, /area/shuttle/abandoned) "daw" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/cyborgrecharger, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/cyborgrecharger, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -97944,7 +97944,7 @@ }, /area/shuttle/abandoned) "daO" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -98040,7 +98040,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 1; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98057,7 +98057,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 1; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98352,7 +98352,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 2; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98369,7 +98369,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/constructable_frame/machine_frame{ +/obj/structure/frame/machine{ desc = "A NanoTrasen hypersleep chamber - this one appears broken. There are exposed bolts for easy detachment using a wrench."; dir = 2; icon = 'icons/obj/Cryogenic2.dmi'; @@ -98465,7 +98465,7 @@ }, /area/shuttle/abandoned) "dbC" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -98643,7 +98643,7 @@ }, /area/shuttle/abandoned) "dbS" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -98654,8 +98654,8 @@ }, /area/shuttle/abandoned) "dbT" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/autolathe, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/autolathe, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -98787,8 +98787,8 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/abandoned) "dcd" = ( -/obj/machinery/constructable_frame/machine_frame, -/obj/item/weapon/circuitboard/chem_dispenser, +/obj/structure/frame/machine, +/obj/item/weapon/circuitboard/machine/chem_dispenser, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -98798,7 +98798,7 @@ }, /area/shuttle/abandoned) "dce" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/frame/machine, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index aaebffe3620..4220fed6d56 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -13107,7 +13107,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /turf/open/floor/plating{ @@ -13528,7 +13528,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "Cw" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -15520,7 +15520,7 @@ /turf/open/floor/plating, /area/shuttle/syndicate) "Hd" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /obj/item/weapon/paper{ info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions" diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 4b6ad4ccfca..ee5c7cfc719 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -7034,7 +7034,7 @@ /area/maintenance/fpmaint2) "ann" = ( /obj/item/weapon/electronics/airalarm, -/obj/item/weapon/circuitboard/seed_extractor, +/obj/item/weapon/circuitboard/machine/seed_extractor, /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 4; @@ -7502,7 +7502,7 @@ /area/maintenance/fpmaint2) "aoo" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/monkey_recycler, +/obj/item/weapon/circuitboard/machine/monkey_recycler, /turf/open/floor/plating, /area/maintenance/fpmaint2) "aop" = ( @@ -10443,11 +10443,11 @@ /obj/item/weapon/shard{ icon_state = "medium" }, -/obj/item/weapon/circuitboard/operating, +/obj/item/weapon/circuitboard/computer/operating, /turf/open/floor/plating, /area/maintenance/fpmaint2) "auZ" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/maintenance/fpmaint2) "ava" = ( @@ -35006,7 +35006,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "buA" = ( -/obj/structure/computerframe, +/obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" }, @@ -41168,11 +41168,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ +/obj/item/weapon/circuitboard/computer/borgupload{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/aiupload{ +/obj/item/weapon/circuitboard/computer/aiupload{ pixel_x = 2; pixel_y = -2 }, @@ -41199,36 +41199,36 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/pandemic{ +/obj/item/weapon/circuitboard/computer/pandemic{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/circuitboard/rdconsole, -/obj/item/weapon/circuitboard/rdserver{ +/obj/item/weapon/circuitboard/computer/rdconsole, +/obj/item/weapon/circuitboard/machine/rdserver{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe, +/obj/item/weapon/circuitboard/machine/destructive_analyzer, +/obj/item/weapon/circuitboard/machine/protolathe, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/item/weapon/circuitboard/aifixer, -/obj/item/weapon/circuitboard/teleporter, -/obj/item/weapon/circuitboard/circuit_imprinter, -/obj/item/weapon/circuitboard/mechfab, +/obj/item/weapon/circuitboard/computer/aifixer, +/obj/item/weapon/circuitboard/computer/teleporter, +/obj/item/weapon/circuitboard/machine/circuit_imprinter, +/obj/item/weapon/circuitboard/machine/mechfab, /turf/open/floor/plating, /area/storage/tech) "bGx" = ( /obj/structure/rack, -/obj/item/weapon/circuitboard/telecomms/processor, -/obj/item/weapon/circuitboard/telecomms/receiver, -/obj/item/weapon/circuitboard/telecomms/server, -/obj/item/weapon/circuitboard/telecomms/bus, -/obj/item/weapon/circuitboard/telecomms/broadcaster, -/obj/item/weapon/circuitboard/message_monitor{ +/obj/item/weapon/circuitboard/machine/telecomms/processor, +/obj/item/weapon/circuitboard/machine/telecomms/receiver, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ pixel_y = -5 }, /turf/open/floor/plating, @@ -41238,12 +41238,12 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/mining, -/obj/item/weapon/circuitboard/autolathe{ +/obj/item/weapon/circuitboard/computer/mining, +/obj/item/weapon/circuitboard/machine/autolathe{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/arcade/battle, +/obj/item/weapon/circuitboard/computer/arcade/battle, /turf/open/floor/plating, /area/storage/tech) "bGz" = ( @@ -41848,15 +41848,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/crew{ +/obj/item/weapon/circuitboard/computer/crew{ pixel_x = -1; pixel_y = 1 }, -/obj/item/weapon/circuitboard/card{ +/obj/item/weapon/circuitboard/computer/card{ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ +/obj/item/weapon/circuitboard/computer/communications{ pixel_x = 5; pixel_y = -5 }, @@ -42787,11 +42787,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/robotics{ +/obj/item/weapon/circuitboard/computer/robotics{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ +/obj/item/weapon/circuitboard/computer/mecha_control{ pixel_x = 1; pixel_y = -1 }, @@ -42813,16 +42813,16 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning{ +/obj/item/weapon/circuitboard/computer/cloning{ pixel_x = 0 }, -/obj/item/weapon/circuitboard/med_data{ +/obj/item/weapon/circuitboard/computer/med_data{ pixel_x = 3; pixel_y = -3 }, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plating, /area/storage/tech) "bJl" = ( @@ -42830,15 +42830,15 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/powermonitor{ +/obj/item/weapon/circuitboard/computer/powermonitor{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/stationalert{ +/obj/item/weapon/circuitboard/computer/stationalert{ pixel_x = 1; pixel_y = -1 }, -/obj/item/weapon/circuitboard/atmos_alert{ +/obj/item/weapon/circuitboard/computer/atmos_alert{ pixel_x = 3; pixel_y = -3 }, @@ -42849,11 +42849,11 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/secure_data{ +/obj/item/weapon/circuitboard/computer/secure_data{ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/security{ +/obj/item/weapon/circuitboard/computer/security{ pixel_x = 1; pixel_y = -1 }, @@ -56170,7 +56170,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, -/obj/item/weapon/circuitboard/solar_control, +/obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar, /turf/open/floor/plasteel, @@ -63494,7 +63494,7 @@ }, /area/shuttle/abandoned) "czy" = ( -/obj/structure/computerframe{ +/obj/structure/frame/computer{ anchored = 1 }, /turf/open/floor/plasteel/shuttle{ diff --git a/_maps/map_files/generic/z3.dmm b/_maps/map_files/generic/z3.dmm index 16243f9502c..140b55a7d2b 100644 --- a/_maps/map_files/generic/z3.dmm +++ b/_maps/map_files/generic/z3.dmm @@ -32,7 +32,7 @@ "cj" = (/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "ck" = (/obj/structure/table,/obj/item/weapon/paper,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "cl" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cm" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"cm" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "cn" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "co" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat{name = "Cuban Pete-Meat"},/turf/open/floor/engine,/area/tcommsat/chamber) "cp" = (/obj/structure/grille,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) @@ -99,7 +99,7 @@ "dz" = (/obj/effect/decal/cleanable/blood,/obj/item/weapon/scalpel{pixel_y = 12},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) "dA" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) "dB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/tcommsat/chamber) -"dC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/teleporter,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"dC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) "dD" = (/obj/item/device/radio/off,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) "dE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) "dF" = (/obj/effect/decal/cleanable/oil,/turf/open/floor/plating/airless,/area/tcommsat/chamber) @@ -159,11 +159,11 @@ "eH" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) "eI" = (/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/tcommsat/chamber) "eJ" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/tcommsat/chamber) -"eL" = (/obj/structure/computerframe,/turf/open/floor/plating,/area/tcommsat/chamber) +"eL" = (/obj/structure/frame/computer,/turf/open/floor/plating,/area/tcommsat/chamber) "eM" = (/obj/machinery/teleport/station,/turf/open/floor/plating,/area/tcommsat/chamber) "eN" = (/obj/machinery/teleport/hub,/turf/open/floor/plating,/area/tcommsat/chamber) "eO" = (/turf/closed/wall/r_wall,/area/AIsattele) -"eP" = (/obj/structure/computerframe,/turf/open/floor/plating/airless,/area/AIsattele) +"eP" = (/obj/structure/frame/computer,/turf/open/floor/plating/airless,/area/AIsattele) "eQ" = (/obj/machinery/teleport/station,/turf/open/floor/plating/airless,/area/AIsattele) "eR" = (/obj/machinery/teleport/hub,/turf/open/floor/plating/airless,/area/AIsattele) "eS" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/AIsattele) @@ -184,7 +184,7 @@ "fh" = (/obj/item/weapon/shard,/obj/item/weapon/electronics/apc,/turf/open/floor/plating/airless,/area/AIsattele) "fi" = (/obj/structure/closet,/turf/open/floor/plating/airless,/area/AIsattele) "fj" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plating/airless,/area/AIsattele) -"fk" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/teleporter,/turf/open/floor/plating/airless,/area/AIsattele) +"fk" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plating/airless,/area/AIsattele) "fl" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating/airless,/area/AIsattele) "fm" = (/obj/structure/lattice,/turf/open/space,/area/AIsattele) "fn" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/AIsattele) diff --git a/_maps/map_files/generic/z4.dmm b/_maps/map_files/generic/z4.dmm index aec065d7d4f..9ebfeee4a01 100644 --- a/_maps/map_files/generic/z4.dmm +++ b/_maps/map_files/generic/z4.dmm @@ -41,7 +41,7 @@ "aO" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "aP" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; freerange = 1; listening = 0; name = "Pirate Radio Broadcast Channel"; pixel_x = 0},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "aQ" = (/obj/structure/table,/obj/item/weapon/paper/djstation,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aR" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aR" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aS" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aT" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aU" = (/obj/structure/closet,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) @@ -147,8 +147,8 @@ "cQ" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/gravity_generator) "cR" = (/obj/structure/window/fulltile,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "cS" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cT" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/derelict/bridge) -"cU" = (/obj/structure/computerframe,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel,/area/derelict/bridge) +"cT" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge) +"cU" = (/obj/structure/frame/computer,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel,/area/derelict/bridge) "cV" = (/obj/structure/table,/turf/open/floor/plasteel,/area/derelict/bridge) "cW" = (/obj/machinery/computer/security,/turf/open/floor/plasteel,/area/derelict/bridge) "cX" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/open/floor/plasteel,/area/derelict/bridge) @@ -246,7 +246,7 @@ "eL" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "eM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) "eN" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eO" = (/obj/structure/computerframe,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"eO" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "eP" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/solar_control) "eQ" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/solar_control) "eR" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) @@ -359,7 +359,7 @@ "gU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) "gV" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) "gW" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"gX" = (/obj/structure/rack,/obj/item/weapon/circuitboard/autolathe,/obj/item/weapon/circuitboard/protolathe{pixel_x = -5; pixel_y = -3},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"gX" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/autolathe,/obj/item/weapon/circuitboard/machine/protolathe{pixel_x = -5; pixel_y = -3},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "gY" = (/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "gZ" = (/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "ha" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) @@ -378,7 +378,7 @@ "hn" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/derelict/arrival) "ho" = (/obj/structure/window/reinforced,/turf/open/space,/area/space) "hp" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"hq" = (/obj/structure/rack,/obj/item/weapon/circuitboard/circuit_imprinter,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"hq" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/circuit_imprinter,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "hr" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "hs" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "ht" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) @@ -389,7 +389,7 @@ "hy" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "hA" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"hB" = (/obj/structure/computerframe,/obj/item/weapon/circuitboard/rdconsole,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"hB" = (/obj/structure/frame/computer,/obj/item/weapon/circuitboard/computer/rdconsole,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "hC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/space) "hD" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/space) "hE" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/space) @@ -416,7 +416,7 @@ "ia" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/arrival) "ib" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating,/area/derelict/arrival) "ic" = (/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) -"id" = (/obj/structure/rack,/obj/item/weapon/circuitboard/smes,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"id" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "ie" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/space) "if" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) "ig" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) @@ -522,7 +522,7 @@ "kp" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) "kq" = (/obj/structure/door_assembly/door_assembly_mai{name = "airlock assembly"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) "kr" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/bridge/ai_upload) -"ks" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/stock_parts/console_screen,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"ks" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/frame/machine,/obj/item/weapon/stock_parts/console_screen,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) "kt" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) "ku" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) "kv" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/item/drone_shell,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) @@ -571,7 +571,7 @@ "lo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/wallframe/apc,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) "lp" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "lq" = (/obj/item/weapon/ore/slag,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) -"lr" = (/obj/structure/rack,/obj/item/weapon/circuitboard/smes,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"lr" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/access) "ls" = (/obj/item/weapon/stock_parts/matter_bin,/turf/open/space,/area/space) "lt" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) "lu" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/space,/area/space) @@ -659,7 +659,7 @@ "mY" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) "mZ" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "na" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/bridge/ai_upload) -"nb" = (/obj/structure/rack,/obj/item/weapon/circuitboard/microwave,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"nb" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/microwave,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "nc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) "nd" = (/turf/open/space,/area/derelict/bridge/ai_upload) "ne" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{icon_state = "intact"; dir = 5},/turf/open/floor/plating/airless,/area/derelict/atmospherics) @@ -669,11 +669,11 @@ "ni" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) "nj" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) "nk" = (/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"nl" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"nl" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "nm" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel,/area/derelict/solar_control) "nn" = (/turf/open/floor/plasteel{icon_state = "damaged2"; initial_gas_mix = "TEMP=2.7"},/area/derelict/atmospherics) "no" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/atmospherics) -"np" = (/obj/structure/rack,/obj/item/weapon/circuitboard/cryo_tube,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"np" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/cryo_tube,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "nq" = (/obj/machinery/light,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "nr" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) "ns" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) @@ -712,7 +712,7 @@ "nZ" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/space) "oa" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) "ob" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"oc" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"oc" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) "od" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/arrival) "oe" = (/obj/machinery/light{dir = 1},/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/derelict/medical) "of" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/open/space,/area/space) @@ -745,7 +745,7 @@ "oG" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) "oH" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "oI" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"oJ" = (/obj/structure/computerframe,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"oJ" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "oK" = (/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) "oL" = (/obj/structure/closet/wardrobe/genetics_white,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) "oM" = (/obj/machinery/door/airlock/command{name = "Teleporter Room"},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) @@ -780,7 +780,7 @@ "pp" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "pq" = (/obj/structure/window/fulltile,/turf/open/space,/area/derelict/atmospherics) "pr" = (/obj/structure/closet/wardrobe/orange,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/weapon/shovel/spade,/obj/item/weapon/cultivator,/turf/open/floor/plasteel/airless,/area/space) -"ps" = (/obj/structure/computerframe,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"ps" = (/obj/structure/frame/computer,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) "pt" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) "pu" = (/obj/structure/lattice,/turf/open/space,/area/derelict/atmospherics) "pv" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) @@ -835,7 +835,7 @@ "qu" = (/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) "qv" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/space,/area/solar/derelict_aft) "qw" = (/obj/item/device/aicard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) -"qx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/solar_control,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"qx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/solar_control,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) "qy" = (/obj/item/ammo_casing/a357{pixel_x = -5},/obj/item/ammo_casing/a357{pixel_x = 5; pixel_y = 6},/obj/item/ammo_casing/a357,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) "qz" = (/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) "qA" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) diff --git a/_maps/map_files/generic/z6.dmm b/_maps/map_files/generic/z6.dmm index 82a78c133c6..8044fc094c2 100644 --- a/_maps/map_files/generic/z6.dmm +++ b/_maps/map_files/generic/z6.dmm @@ -186,7 +186,7 @@ "dD" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "dE" = (/obj/structure/table,/obj/item/weapon/paper{info = "I'm no scientist, but judging from the design and components, it seems to be some kind of teleporter. This thing is gonna be worth a lot of cash to the right man. The boys are excited, as they have every right to be, and I've let them crack into that case of beer we got. I normally wouldn't allow such a thing, but this is a time for celebration! It's not like a couple drinks will hurt anything."; name = "Captain's log entry"},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "dF" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) -"dG" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) +"dG" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "dH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/carpet,/area/awaymission/BMPship/Fore) "dI" = (/obj/machinery/hydroponics,/turf/open/floor/plasteel{icon_state = "green"; dir = 10},/area/awaymission/BMPship/Midship) "dJ" = (/turf/open/floor/plasteel{icon_state = "green"},/area/awaymission/BMPship/Midship) @@ -344,8 +344,8 @@ "gF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating,/area/awaymission/BMPship/Aft) "gG" = (/turf/closed/wall/shuttle{icon_state = "swallc2"},/area/awaymission/BMPship/Aft) "gH" = (/turf/open/floor/plating/airless{icon_state = "platingdmg2"},/turf/closed/wall/shuttle{dir = 3; icon_state = "swall_f10"; layer = 2},/area/awaymission/BMPship/Fore) -"gI" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/plating/airless{icon_state = "panelscorched"},/area/awaymission/BMPship/Fore) -"gJ" = (/obj/structure/computerframe{anchored = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) +"gI" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plating/airless{icon_state = "panelscorched"},/area/awaymission/BMPship/Fore) +"gJ" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) "gK" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "gL" = (/turf/open/floor/plasteel{icon_state = "platingdmg3"},/area/awaymission/BMPship/Midship) "gM" = (/turf/open/floor/plasteel{icon_state = "platingdmg1"},/area/awaymission/BMPship/Midship) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 68cc017cfd3..253c17eeeb0 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -25,16 +25,20 @@ /obj/machinery/sleeper/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/weapon/circuitboard/sleeper(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/sleeper(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/sleeper + name = "circuit board (Sleeper)" + build_path = /obj/machinery/sleeper + origin_tech = "programming=3;biotech=2;engineering=3;materials=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 2) + /obj/machinery/sleeper/RefreshParts() var/E for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) @@ -186,4 +190,4 @@ /obj/machinery/sleeper/old - icon_state = "oldpod" + icon_state = "oldpod" diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 393f2f4f600..529e77bf55a 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -32,14 +32,19 @@ var/list/announcement_systems = list() announcement_systems += src radio = new /obj/item/device/radio/headset/ai(src) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/announcement_system(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/announcement_system(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/announcement_system + name = "circuit board (Announcement System)" + build_path = /obj/machinery/announcement_system + origin_tech = "programming=3;bluespace=2" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/machinery/announcement_system/update_icon() if(is_operational()) icon_state = (panel_open ? "AAS_On_Open" : "AAS_On") @@ -178,4 +183,4 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/emag_act() if(!emagged) emagged = 1 - act_up() + act_up() \ No newline at end of file diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 5e03d4b9dc3..4014ad407ec 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -47,20 +47,23 @@ /obj/machinery/autolathe/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/autolathe(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1)) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/autolathe(null) + B.apply_default_parts(src) wires = new /datum/wires/autolathe(src) files = new /datum/research/autolathe(src) matching_designs = list() +/obj/item/weapon/circuitboard/machine/autolathe + name = "circuit board (Autolathe)" + build_path = /obj/machinery/autolathe + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 3, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/machinery/autolathe/Destroy() qdel(wires) wires = null diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 604fb26bed0..b6a576e12f5 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -25,16 +25,8 @@ /obj/machinery/clonepod/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonepod(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonepod(null) + B.apply_default_parts(src) /obj/machinery/clonepod/RefreshParts() speed_coeff = 0 @@ -47,6 +39,16 @@ if(heal_level > 100) heal_level = 100 +/obj/item/weapon/circuitboard/machine/clonepod + name = "circuit board (Clone Pod)" + build_path = /obj/machinery/clonepod + origin_tech = "programming=3;biotech=3" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/scanning_module = 2, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. /obj/item/weapon/disk/data diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index ea7a6a1c704..0989ee50a59 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -3,7 +3,7 @@ desc = "Used to monitor the vitals of a patient during surgery." icon_screen = "crew" icon_keyboard = "med_key" - circuit = /obj/item/weapon/circuitboard/operating + circuit = /obj/item/weapon/circuitboard/computer/operating var/mob/living/carbon/human/patient = null var/obj/structure/table/optable/table = null diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 69c53cf517b..962fb705408 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -4,7 +4,7 @@ req_access = list(access_captain, access_robotics, access_heads) var/mob/living/silicon/ai/occupier = null var/active = 0 - circuit = /obj/item/weapon/circuitboard/aifixer + circuit = /obj/item/weapon/circuitboard/computer/aifixer icon_keyboard = "tech_key" icon_screen = "ai-fixer" diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 9c036f6cbf0..1b50cab81af 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -44,7 +44,7 @@ // If it's a generic arcade machine, pick a random arcade // circuit board for it and make the new machine if(!circuit) - var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/arcade)) + var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade)) var/obj/item/weapon/circuitboard/CB = new choice() new CB.build_path(loc, CB) qdel(src) @@ -93,7 +93,7 @@ name = "arcade machine" desc = "Does not support Pinball." icon_state = "arcade" - circuit = /obj/item/weapon/circuitboard/arcade/battle + circuit = /obj/item/weapon/circuitboard/computer/arcade/battle var/enemy_name = "Space Villian" var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc var/player_hp = 30 //Player health/attack points @@ -327,7 +327,7 @@ name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" icon_state = "arcade" - circuit = /obj/item/weapon/circuitboard/arcade/orion_trail + circuit = /obj/item/weapon/circuitboard/computer/arcade/orion_trail var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game. var/engine = 0 var/hull = 0 diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index e6f306e03c8..6d3587d5507 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/atmos_alert name = "atmospheric alert console" desc = "Used to monitor the station's air alarms." - circuit = /obj/item/weapon/circuitboard/atmos_alert + circuit = /obj/item/weapon/circuitboard/computer/atmos_alert icon_screen = "alert:0" icon_keyboard = "atmos_key" var/list/priority_alarms = list() diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 32e3ae5c38e..3f40993ffad 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -68,7 +68,7 @@ desc = "Used to monitor the station's atmospherics sensors." icon_screen = "tank" icon_keyboard = "atmos_key" - circuit = /obj/item/weapon/circuitboard/atmos_control + circuit = /obj/item/weapon/circuitboard/computer/atmos_control var/frequency = 1441 var/list/sensors = list( @@ -146,7 +146,7 @@ var/input_tag var/output_tag frequency = 1441 - circuit = /obj/item/weapon/circuitboard/atmos_control/tank + circuit = /obj/item/weapon/circuitboard/computer/atmos_control/tank var/list/input_info var/list/output_info diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 620b7f37e6a..73717cf3f7c 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -1,292 +1,10 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/structure/computerframe - density = 1 - anchored = 0 - name = "computer-frame" - icon = 'icons/obj/stock_parts.dmi' +/obj/structure/frame/computer + name = "computer frame" icon_state = "0" - var/state = 0 - var/obj/item/weapon/circuitboard/circuit = null -// weight = 1.0E8 - -/obj/item/weapon/circuitboard - density = 0 anchored = 0 - w_class = 2 - name = "circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - origin_tech = "programming=2" - materials = list(MAT_GLASS=200) - var/frequency = null - var/build_path = null - var/board_type = "computer" - var/list/req_components = null - var/powernet = null - var/list/records = null - var/frame_desc = null + state = 0 -/obj/item/weapon/circuitboard/turbine_computer - name = "circuit board (Turbine Computer)" - build_path = /obj/machinery/computer/turbine_computer - origin_tech = "programming=4;engineering=4;powerstorage=4" -/obj/item/weapon/circuitboard/telesci_console - name = "circuit board (Telescience Console)" - build_path = /obj/machinery/computer/telescience - origin_tech = "programming=3;bluespace=2" -/obj/item/weapon/circuitboard/message_monitor - name = "circuit board (Message Monitor)" - build_path = /obj/machinery/computer/message_monitor - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/security - name = "circuit board (Security)" - build_path = /obj/machinery/computer/security -/obj/item/weapon/circuitboard/aicore - name = "circuit board (AI core)" - origin_tech = "programming=4;biotech=2" - board_type = "other" -/obj/item/weapon/circuitboard/aiupload - name = "circuit board (AI Upload)" - build_path = /obj/machinery/computer/upload/ai - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/borgupload - name = "circuit board (Cyborg Upload)" - build_path = /obj/machinery/computer/upload/borg - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/med_data - name = "circuit board (Medical Records Console)" - build_path = /obj/machinery/computer/med_data -/obj/item/weapon/circuitboard/pandemic - name = "circuit board (PanD.E.M.I.C. 2200)" - build_path = /obj/machinery/computer/pandemic - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/scan_consolenew - name = "circuit board (DNA Machine)" - build_path = /obj/machinery/computer/scan_consolenew - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/communications - name = "circuit board (Communications)" - build_path = /obj/machinery/computer/communications - origin_tech = "programming=2;magnets=2" - var/lastTimeUsed = 0 - -/obj/item/weapon/circuitboard/card - name = "circuit board (ID Console)" - build_path = /obj/machinery/computer/card -/obj/item/weapon/circuitboard/card/centcom - name = "circuit board (Centcom ID Console)" - build_path = /obj/machinery/computer/card/centcom -/obj/item/weapon/circuitboard/card/minor - name = "circuit board (Department Management Console)" - build_path = /obj/machinery/computer/card/minor - var/target_dept = 1 -//obj/item/weapon/circuitboard/shield -// name = "Circuit board (Shield Control)" -// build_path = /obj/machinery/computer/stationshield -/obj/item/weapon/circuitboard/teleporter - name = "circuit board (Teleporter)" - build_path = /obj/machinery/computer/teleporter - origin_tech = "programming=2;bluespace=2" -/obj/item/weapon/circuitboard/secure_data - name = "circuit board (Security Records Console)" - build_path = /obj/machinery/computer/secure_data -/obj/item/weapon/circuitboard/stationalert - name = "circuit board (Station Alerts)" - build_path = /obj/machinery/computer/station_alert -/*/obj/item/weapon/circuitboard/atmospheresiphonswitch - name = "circuit board (Atmosphere siphon control)" - build_path = /obj/machinery/computer/atmosphere/siphonswitch*/ -/obj/item/weapon/circuitboard/atmos_control - name = "circuit board (Atmospheric Monitor)" - build_path = /obj/machinery/computer/atmos_control -/obj/item/weapon/circuitboard/atmos_control/tank - name = "circuit board (Tank Control)" - build_path = /obj/machinery/computer/atmos_control/tank - origin_tech = "programming=2;engineering=3;materials=2" -/obj/item/weapon/circuitboard/atmos_alert - name = "circuit board (Atmospheric Alert)" - build_path = /obj/machinery/computer/atmos_alert -/obj/item/weapon/circuitboard/pod - name = "circuit board (Massdriver control)" - build_path = /obj/machinery/computer/pod -/obj/item/weapon/circuitboard/robotics - name = "circuit board (Robotics Control)" - build_path = /obj/machinery/computer/robotics - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/cloning - name = "circuit board (Cloning)" - build_path = /obj/machinery/computer/cloning - origin_tech = "programming=3;biotech=3" -/obj/item/weapon/circuitboard/arcade/battle - name = "circuit board (Arcade Battle)" - build_path = /obj/machinery/computer/arcade/battle - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/arcade/orion_trail - name = "circuit board (Orion Trail)" - build_path = /obj/machinery/computer/arcade/orion_trail -/obj/item/weapon/circuitboard/turbine_control - name = "circuit board (Turbine control)" - build_path = /obj/machinery/computer/turbine_computer -/obj/item/weapon/circuitboard/solar_control - name = "circuit board (Solar Control)" //name fixed 250810 - build_path = /obj/machinery/power/solar_control - origin_tech = "programming=2;powerstorage=2" -/obj/item/weapon/circuitboard/powermonitor - name = "circuit board (Power Monitor)" //name fixed 250810 - build_path = /obj/machinery/computer/monitor -/obj/item/weapon/circuitboard/olddoor - name = "circuit board (DoorMex)" - build_path = /obj/machinery/computer/pod/old -/obj/item/weapon/circuitboard/syndicatedoor - name = "circuit board (ProComp Executive)" - build_path = /obj/machinery/computer/pod/old/syndicate -/obj/item/weapon/circuitboard/swfdoor - name = "circuit board (Magix)" - build_path = /obj/machinery/computer/pod/old/swf -/obj/item/weapon/circuitboard/prisoner - name = "circuit board (Prisoner Management Console)" - build_path = /obj/machinery/computer/prisoner -/obj/item/weapon/circuitboard/rdconsole - name = "circuit board (RD Console)" - build_path = /obj/machinery/computer/rdconsole/core -/obj/item/weapon/circuitboard/mecha_control - name = "circuit board (Exosuit Control Console)" - build_path = /obj/machinery/computer/mecha -/obj/item/weapon/circuitboard/rdservercontrol - name = "circuit board (R&D Server Control)" - build_path = /obj/machinery/computer/rdservercontrol -/obj/item/weapon/circuitboard/crew - name = "circuit board (Crew Monitoring Console)" - build_path = /obj/machinery/computer/crew - origin_tech = "programming=3;biotech=2;magnets=2" -/obj/item/weapon/circuitboard/mech_bay_power_console - name = "circuit board (Mech Bay Power Control Console)" - build_path = /obj/machinery/computer/mech_bay_power_console - origin_tech = "programming=2;powerstorage=3" -/obj/item/weapon/circuitboard/cargo - name = "circuit board (Supply Console)" - build_path = /obj/machinery/computer/cargo - origin_tech = "programming=3" - var/contraband = 0 - var/emagged = 0 -/obj/item/weapon/circuitboard/cargo/request - name = "circuit board (Supply Request Console)" - build_path = /obj/machinery/computer/cargo/request -/obj/item/weapon/circuitboard/operating - name = "circuit board (Operating Computer)" - build_path = /obj/machinery/computer/operating - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/mining - name = "circuit board (Outpost Status Display)" - build_path = /obj/machinery/computer/security/mining -/obj/item/weapon/circuitboard/comm_monitor - name = "circuit board (Telecommunications Monitor)" - build_path = /obj/machinery/computer/telecomms/monitor - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/comm_server - name = "circuit board (Telecommunications Server Monitor)" - build_path = /obj/machinery/computer/telecomms/server - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/shuttle - name = "circuit board (Shuttle)" - build_path = /obj/machinery/computer/shuttle - var/shuttleId - var/possible_destinations = "" -/obj/item/weapon/circuitboard/labor_shuttle - name = "circuit board (Labor Shuttle)" - build_path = /obj/machinery/computer/shuttle/labor -/obj/item/weapon/circuitboard/labor_shuttle/one_way - name = "circuit board (Prisoner Shuttle Console)" - build_path = /obj/machinery/computer/shuttle/labor/one_way -/obj/item/weapon/circuitboard/ferry - name = "circuit board (Transport Ferry)" - build_path = /obj/machinery/computer/shuttle/ferry -/obj/item/weapon/circuitboard/ferry/request - name = "circuit board (Transport Ferry Console)" - build_path = /obj/machinery/computer/shuttle/ferry/request -/obj/item/weapon/circuitboard/mining_shuttle - name = "circuit board (Mining Shuttle)" - build_path = /obj/machinery/computer/shuttle/mining -/obj/item/weapon/circuitboard/white_ship - name = "circuit board (White Ship)" - build_path = /obj/machinery/computer/shuttle/white_ship -/obj/item/weapon/circuitboard/holodeck// Not going to let people get this, but it's just here for future - name = "circuit board (Holodeck Control)" - build_path = /obj/machinery/computer/holodeck - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/aifixer - name = "circuit board (AI Integrity Restorer)" - build_path = /obj/machinery/computer/aifixer - origin_tech = "programming=3;biotech=2" -/*/obj/item/weapon/circuitboard/prison_shuttle - name = "circuit board (Prison Shuttle)" - build_path = /obj/machinery/computer/prison_shuttle*/ -/obj/item/weapon/circuitboard/slot_machine - name = "circuit board (Slot Machine)" - build_path = /obj/machinery/computer/slot_machine - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/libraryconsole - name = "circuit board (Library Visitor Console)" - build_path = /obj/machinery/computer/libraryconsole - origin_tech = "programming=1" - -/obj/item/weapon/circuitboard/card/minor/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/device/multitool)) - var/list/dept_list = list("general","security","medical","science","engineering") - var/choice = input("Currently set to [dept_list[target_dept]] personnel database. Changing to:","Multitool-Circuitboard interface") as null|anything in dept_list - if(choice) - target_dept = dept_list.Find(choice) - return - -/obj/item/weapon/circuitboard/cargo/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/device/multitool)) - if(!emagged) - contraband = !contraband - user << "Receiver spectrum set to [contraband ? "Broad" : "Standard"]." - else - user << "The spectrum chip is unresponsive." - if(istype(I,/obj/item/weapon/card/emag)) - if(!emagged) - contraband = TRUE - emagged = TRUE - user << "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband." - -/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/computer/rdconsole/core) - name = "circuit board (RD Console - Robotics)" - build_path = /obj/machinery/computer/rdconsole/robotics - user << "Access protocols successfully updated." - else - name = "circuit board (RD Console)" - build_path = /obj/machinery/computer/rdconsole/core - user << "Defaulting access protocols." - return - -/obj/item/weapon/circuitboard/libraryconsole/attackby(obj/item/I, mob/user, params) - if(istype(I,/obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) - name = "circuit board (Library Visitor Console)" - build_path = /obj/machinery/computer/libraryconsole - user << "Defaulting access protocols." - else - name = "circuit board (Book Inventory Management Console)" - build_path = /obj/machinery/computer/libraryconsole/bookmanagement - user << "Access protocols successfully updated." - return - -/obj/item/weapon/circuitboard/shuttle/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) - if(chosen_id >= 0) - shuttleId = chosen_id - else - shuttleId = initial(shuttleId) - return - -/obj/structure/computerframe/attackby(obj/item/P, mob/user, params) +/obj/structure/frame/computer/attackby(obj/item/P, mob/user, params) add_fingerprint(user) switch(state) if(0) @@ -319,19 +37,19 @@ user << "You unfasten the frame." anchored = 0 state = 0 - if(istype(P, /obj/item/weapon/circuitboard) && !circuit) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "computer") - if(!user.drop_item()) - return - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You place the circuit board inside the frame." - icon_state = "1" - circuit = P - circuit.add_fingerprint(user) - P.loc = null - else - user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/circuitboard/computer) && !circuit) + if(!user.drop_item()) + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You place the circuit board inside the frame." + icon_state = "1" + circuit = P + circuit.add_fingerprint(user) + P.loc = null + + else if(istype(P, /obj/item/weapon/circuitboard) && !circuit) + user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You screw the circuit board into place." @@ -402,3 +120,291 @@ var/obj/B = new src.circuit.build_path (src.loc, circuit) transfer_fingerprints_to(B) qdel(src) + + + +/obj/item/weapon/circuitboard + name = "circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "id_mod" + item_state = "electronic" + origin_tech = "programming=2" + materials = list(MAT_GLASS=1000) + w_class = 2 + var/build_path = null + +/obj/item/weapon/circuitboard/computer/turbine_computer + name = "circuit board (Turbine Computer)" + build_path = /obj/machinery/computer/turbine_computer + origin_tech = "programming=4;engineering=4;powerstorage=4" +/obj/item/weapon/circuitboard/computer/telesci_console + name = "circuit board (Telescience Console)" + build_path = /obj/machinery/computer/telescience + origin_tech = "programming=3;bluespace=2" +/obj/item/weapon/circuitboard/computer/message_monitor + name = "circuit board (Message Monitor)" + build_path = /obj/machinery/computer/message_monitor + origin_tech = "programming=3" +/obj/item/weapon/circuitboard/computer/security + name = "circuit board (Security Cameras)" + build_path = /obj/machinery/computer/security + +/obj/item/weapon/circuitboard/computer/aiupload + name = "circuit board (AI Upload)" + build_path = /obj/machinery/computer/upload/ai + origin_tech = "programming=4" +/obj/item/weapon/circuitboard/computer/borgupload + name = "circuit board (Cyborg Upload)" + build_path = /obj/machinery/computer/upload/borg + origin_tech = "programming=4" +/obj/item/weapon/circuitboard/computer/med_data + name = "circuit board (Medical Records Console)" + build_path = /obj/machinery/computer/med_data +/obj/item/weapon/circuitboard/computer/pandemic + name = "circuit board (PanD.E.M.I.C. 2200)" + build_path = /obj/machinery/computer/pandemic + origin_tech = "programming=2;biotech=2" +/obj/item/weapon/circuitboard/computer/scan_consolenew + name = "circuit board (DNA Machine)" + build_path = /obj/machinery/computer/scan_consolenew + origin_tech = "programming=2;biotech=2" +/obj/item/weapon/circuitboard/computer/communications + name = "circuit board (Communications)" + build_path = /obj/machinery/computer/communications + origin_tech = "programming=2;magnets=2" + var/lastTimeUsed = 0 + +/obj/item/weapon/circuitboard/computer/card + name = "circuit board (ID Console)" + build_path = /obj/machinery/computer/card +/obj/item/weapon/circuitboard/computer/card/centcom + name = "circuit board (Centcom ID Console)" + build_path = /obj/machinery/computer/card/centcom + +/obj/item/weapon/circuitboard/computer/card/minor + name = "circuit board (Department Management Console)" + build_path = /obj/machinery/computer/card/minor + var/target_dept = 1 + var/list/dept_list = list("General","Security","Medical","Science","Engineering") + +/obj/item/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1) + user << "You set the board to \"[dept_list[target_dept]]\"." + else + return ..() + +/obj/item/weapon/circuitboard/computer/card/minor/examine(user) + ..() + user << "Currently set to \"[dept_list[target_dept]]\"." + +//obj/item/weapon/circuitboard/computer/shield +// name = "Circuit board (Shield Control)" +// build_path = /obj/machinery/computer/stationshield +/obj/item/weapon/circuitboard/computer/teleporter + name = "circuit board (Teleporter)" + build_path = /obj/machinery/computer/teleporter + origin_tech = "programming=2;bluespace=2" +/obj/item/weapon/circuitboard/computer/secure_data + name = "circuit board (Security Records Console)" + build_path = /obj/machinery/computer/secure_data +/obj/item/weapon/circuitboard/computer/stationalert + name = "circuit board (Station Alerts)" + build_path = /obj/machinery/computer/station_alert +/*/obj/item/weapon/circuitboard/computer/atmospheresiphonswitch + name = "circuit board (Atmosphere siphon control)" + build_path = /obj/machinery/computer/atmosphere/siphonswitch*/ +/obj/item/weapon/circuitboard/computer/atmos_control + name = "circuit board (Atmospheric Monitor)" + build_path = /obj/machinery/computer/atmos_control +/obj/item/weapon/circuitboard/computer/atmos_control/tank + name = "circuit board (Tank Control)" + build_path = /obj/machinery/computer/atmos_control/tank + origin_tech = "programming=2;engineering=3;materials=2" +/obj/item/weapon/circuitboard/computer/atmos_alert + name = "circuit board (Atmospheric Alert)" + build_path = /obj/machinery/computer/atmos_alert +/obj/item/weapon/circuitboard/computer/pod + name = "circuit board (Massdriver control)" + build_path = /obj/machinery/computer/pod +/obj/item/weapon/circuitboard/computer/robotics + name = "circuit board (Robotics Control)" + build_path = /obj/machinery/computer/robotics + origin_tech = "programming=3" +/obj/item/weapon/circuitboard/computer/cloning + name = "circuit board (Cloning)" + build_path = /obj/machinery/computer/cloning + origin_tech = "programming=3;biotech=3" +/obj/item/weapon/circuitboard/computer/arcade/battle + name = "circuit board (Arcade Battle)" + build_path = /obj/machinery/computer/arcade/battle + origin_tech = "programming=1" +/obj/item/weapon/circuitboard/computer/arcade/orion_trail + name = "circuit board (Orion Trail)" + build_path = /obj/machinery/computer/arcade/orion_trail +/obj/item/weapon/circuitboard/computer/turbine_control + name = "circuit board (Turbine control)" + build_path = /obj/machinery/computer/turbine_computer +/obj/item/weapon/circuitboard/computer/solar_control + name = "circuit board (Solar Control)" //name fixed 250810 + build_path = /obj/machinery/power/solar_control + origin_tech = "programming=2;powerstorage=2" +/obj/item/weapon/circuitboard/computer/powermonitor + name = "circuit board (Power Monitor)" //name fixed 250810 + build_path = /obj/machinery/computer/monitor +/obj/item/weapon/circuitboard/computer/olddoor + name = "circuit board (DoorMex)" + build_path = /obj/machinery/computer/pod/old +/obj/item/weapon/circuitboard/computer/syndicatedoor + name = "circuit board (ProComp Executive)" + build_path = /obj/machinery/computer/pod/old/syndicate +/obj/item/weapon/circuitboard/computer/swfdoor + name = "circuit board (Magix)" + build_path = /obj/machinery/computer/pod/old/swf +/obj/item/weapon/circuitboard/computer/prisoner + name = "circuit board (Prisoner Management Console)" + build_path = /obj/machinery/computer/prisoner + + +/obj/item/weapon/circuitboard/computer/rdconsole + name = "circuit board (RD Console)" + build_path = /obj/machinery/computer/rdconsole/core + +/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/computer/rdconsole/core) + name = "circuit board (RD Console - Robotics)" + build_path = /obj/machinery/computer/rdconsole/robotics + user << "Access protocols successfully updated." + else + name = "circuit board (RD Console)" + build_path = /obj/machinery/computer/rdconsole/core + user << "Defaulting access protocols." + else + return ..() + +/obj/item/weapon/circuitboard/computer/mecha_control + name = "circuit board (Exosuit Control Console)" + build_path = /obj/machinery/computer/mecha +/obj/item/weapon/circuitboard/computer/rdservercontrol + name = "circuit board (R&D Server Control)" + build_path = /obj/machinery/computer/rdservercontrol +/obj/item/weapon/circuitboard/computer/crew + name = "circuit board (Crew Monitoring Console)" + build_path = /obj/machinery/computer/crew + origin_tech = "programming=3;biotech=2;magnets=2" +/obj/item/weapon/circuitboard/computer/mech_bay_power_console + name = "circuit board (Mech Bay Power Control Console)" + build_path = /obj/machinery/computer/mech_bay_power_console + origin_tech = "programming=2;powerstorage=3" + +/obj/item/weapon/circuitboard/computer/cargo + name = "circuit board (Supply Console)" + build_path = /obj/machinery/computer/cargo + origin_tech = "programming=3" + var/contraband = 0 + var/emagged = 0 + +/obj/item/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/device/multitool)) + if(!emagged) + contraband = !contraband + user << "Receiver spectrum set to [contraband ? "Broad" : "Standard"]." + else + user << "The spectrum chip is unresponsive." + else if(istype(I,/obj/item/weapon/card/emag)) + if(!emagged) + contraband = TRUE + emagged = TRUE + user << "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband." + else + return ..() + + +/obj/item/weapon/circuitboard/computer/cargo/request + name = "circuit board (Supply Request Console)" + build_path = /obj/machinery/computer/cargo/request + +/obj/item/weapon/circuitboard/computer/operating + name = "circuit board (Operating Computer)" + build_path = /obj/machinery/computer/operating + origin_tech = "programming=2;biotech=2" +/obj/item/weapon/circuitboard/computer/mining + name = "circuit board (Outpost Status Display)" + build_path = /obj/machinery/computer/security/mining +/obj/item/weapon/circuitboard/computer/comm_monitor + name = "circuit board (Telecommunications Monitor)" + build_path = /obj/machinery/computer/telecomms/monitor + origin_tech = "programming=3" +/obj/item/weapon/circuitboard/computer/comm_server + name = "circuit board (Telecommunications Server Monitor)" + build_path = /obj/machinery/computer/telecomms/server + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/computer/shuttle + name = "circuit board (Shuttle)" + build_path = /obj/machinery/computer/shuttle + var/shuttleId + var/possible_destinations = "" + +/obj/item/weapon/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/multitool)) + var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) + if(chosen_id >= 0) + shuttleId = chosen_id + else + shuttleId = initial(shuttleId) + else + return ..() + +/obj/item/weapon/circuitboard/computer/labor_shuttle + name = "circuit board (Labor Shuttle)" + build_path = /obj/machinery/computer/shuttle/labor +/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way + name = "circuit board (Prisoner Shuttle Console)" + build_path = /obj/machinery/computer/shuttle/labor/one_way +/obj/item/weapon/circuitboard/computer/ferry + name = "circuit board (Transport Ferry)" + build_path = /obj/machinery/computer/shuttle/ferry +/obj/item/weapon/circuitboard/computer/ferry/request + name = "circuit board (Transport Ferry Console)" + build_path = /obj/machinery/computer/shuttle/ferry/request +/obj/item/weapon/circuitboard/computer/mining_shuttle + name = "circuit board (Mining Shuttle)" + build_path = /obj/machinery/computer/shuttle/mining +/obj/item/weapon/circuitboard/computer/white_ship + name = "circuit board (White Ship)" + build_path = /obj/machinery/computer/shuttle/white_ship +/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future + name = "circuit board (Holodeck Control)" + build_path = /obj/machinery/computer/holodeck + origin_tech = "programming=4" +/obj/item/weapon/circuitboard/computer/aifixer + name = "circuit board (AI Integrity Restorer)" + build_path = /obj/machinery/computer/aifixer + origin_tech = "programming=3;biotech=2" +/*/obj/item/weapon/circuitboard/computer/prison_shuttle + name = "circuit board (Prison Shuttle)" + build_path = /obj/machinery/computer/prison_shuttle*/ +/obj/item/weapon/circuitboard/computer/slot_machine + name = "circuit board (Slot Machine)" + build_path = /obj/machinery/computer/slot_machine + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/libraryconsole + name = "circuit board (Library Visitor Console)" + build_path = /obj/machinery/computer/libraryconsole + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params) + if(istype(I,/obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) + name = "circuit board (Library Visitor Console)" + build_path = /obj/machinery/computer/libraryconsole + user << "Defaulting access protocols." + else + name = "circuit board (Book Inventory Management Console)" + build_path = /obj/machinery/computer/libraryconsole/bookmanagement + user << "Access protocols successfully updated." + else + return ..() \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 0bdb44931a3..c13ba3af2c4 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -3,7 +3,7 @@ desc = "Used to access the various cameras on the station." icon_screen = "cameras" icon_keyboard = "security_key" - circuit = /obj/item/weapon/circuitboard/security + circuit = /obj/item/weapon/circuitboard/computer/security var/last_pic = 1 var/list/network = list("SS13") var/mapping = 0//For the overview file, interesting bit of code. @@ -177,4 +177,4 @@ icon_screen = "mining" icon_keyboard = "mining_key" network = list("MINE") - circuit = "/obj/item/weapon/circuitboard/mining" + circuit = /obj/item/weapon/circuitboard/computer/mining diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index df02f37b5cb..0bbbeda6165 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -10,7 +10,7 @@ var/time_last_changed_position = 0 icon_screen = "id" icon_keyboard = "id_key" req_one_access = list(access_heads, access_change_ids) - circuit = /obj/item/weapon/circuitboard/card + circuit = /obj/item/weapon/circuitboard/computer/card var/obj/item/weapon/card/id/scan = null var/obj/item/weapon/card/id/modify = null var/authenticated = 0 @@ -483,18 +483,18 @@ var/time_last_changed_position = 0 /obj/machinery/computer/card/centcom name = "\improper Centcom identification console" - circuit = /obj/item/weapon/circuitboard/card/centcom + circuit = /obj/item/weapon/circuitboard/computer/card/centcom req_access = list(access_cent_captain) /obj/machinery/computer/card/minor name = "department management console" desc = "You can use this to change ID's for specific departments." icon_screen = "idminor" - circuit = /obj/item/weapon/circuitboard/card/minor + circuit = /obj/item/weapon/circuitboard/computer/card/minor /obj/machinery/computer/card/minor/New() ..() - var/obj/item/weapon/circuitboard/card/minor/typed_circuit = circuit + var/obj/item/weapon/circuitboard/computer/card/minor/typed_circuit = circuit if(target_dept) typed_circuit.target_dept = target_dept else diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index fc252a50ab4..dc0b949a187 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -4,7 +4,7 @@ desc = "Used to clone people and manage DNA." icon_screen = "dna" icon_keyboard = "med_key" - circuit = /obj/item/weapon/circuitboard/cloning + circuit = /obj/item/weapon/circuitboard/computer/cloning req_access = list(access_heads) //Only used for record deletion right now. var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. var/obj/machinery/clonepod/pod1 = null //Linked cloning pod. diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index e2a77542cee..4416ed3e8e3 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -9,7 +9,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 icon_screen = "comm" icon_keyboard = "tech_key" req_access = list(access_heads) - circuit = /obj/item/weapon/circuitboard/communications + circuit = /obj/item/weapon/circuitboard/computer/communications var/authenticated = 0 var/auth_id = "Unknown" //Who is currently logged in? var/list/messagetitle = list() @@ -57,7 +57,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if(!href_list["operation"]) return - var/obj/item/weapon/circuitboard/communications/CM = circuit + var/obj/item/weapon/circuitboard/computer/communications/CM = circuit switch(href_list["operation"]) // main interface if("main") @@ -611,5 +611,5 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 return ..() /obj/machinery/computer/communications/proc/overrideCooldown() - var/obj/item/weapon/circuitboard/communications/CM = circuit + var/obj/item/weapon/circuitboard/computer/communications/CM = circuit CM.lastTimeUsed = 0 \ No newline at end of file diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 1ae36a3a43d..35ca17a8641 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 - var/obj/item/weapon/circuitboard/circuit = null // if circuit==null, computer can't disassembly + var/obj/item/weapon/circuitboard/computer/circuit = null // if circuit==null, computer can't disassembly var/processing = 0 var/brightness_on = 2 var/icon_keyboard = "generic_key" @@ -18,9 +18,8 @@ ..(location) if(C && istype(C)) circuit = C - else - if(circuit) - circuit = new circuit(null) + else if(circuit) + circuit = new circuit(null) power_change() update_icon() @@ -85,7 +84,7 @@ user << " You start to disconnect the monitor..." if(do_after(user, 20/I.toolspeed, target = src)) deconstruction() - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) A.circuit = circuit A.anchored = 1 circuit = null diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index ad992d3aba3..ab820645505 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -6,7 +6,7 @@ use_power = 1 idle_power_usage = 250 active_power_usage = 500 - circuit = "/obj/item/weapon/circuitboard/crew" + circuit = /obj/item/weapon/circuitboard/computer/crew /obj/machinery/computer/crew/attack_ai(mob/user) if(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index e2a29dfe536..597b90129a7 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -22,7 +22,7 @@ icon_screen = "dna" icon_keyboard = "med_key" density = 1 - circuit = /obj/item/weapon/circuitboard/scan_consolenew + circuit = /obj/item/weapon/circuitboard/computer/scan_consolenew var/radduration = 2 var/radstrength = 1 diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 292fc7163b6..3c066205601 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -33,7 +33,7 @@ /obj/machinery/computer/upload/ai name = "\improper AI upload console" desc = "Used to upload laws to the AI." - circuit = /obj/item/weapon/circuitboard/aiupload + circuit = /obj/item/weapon/circuitboard/computer/aiupload /obj/machinery/computer/upload/ai/attack_hand(mob/user) if(..()) @@ -57,7 +57,7 @@ /obj/machinery/computer/upload/borg name = "cyborg upload console" desc = "Used to upload laws to Cyborgs." - circuit = /obj/item/weapon/circuitboard/borgupload + circuit = /obj/item/weapon/circuitboard/computer/borgupload /obj/machinery/computer/upload/borg/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index b3e94a26be5..51c0c3e8264 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -6,7 +6,7 @@ icon_screen = "medcomp" icon_keyboard = "med_key" req_one_access = list(access_medical, access_forensics_lockers) - circuit = /obj/item/weapon/circuitboard/med_data + circuit = /obj/item/weapon/circuitboard/computer/med_data var/obj/item/weapon/card/id/scan = null var/authenticated = null var/rank = null diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index cab29214d2e..8a74f5f09ee 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -8,7 +8,7 @@ name = "message monitor console" desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." icon_screen = "comm_logs" - circuit = /obj/item/weapon/circuitboard/message_monitor + circuit = /obj/item/weapon/circuitboard/computer/message_monitor //Server linked to. var/obj/machinery/message_server/linkedServer = null //Sparks effect - For emag diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index ab5a89b97e9..8a837a5af5a 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -4,7 +4,6 @@ icon_screen = "explosive" icon_keyboard = "security_key" req_access = list(access_brig) - circuit = "/obj/item/weapon/circuitboard/prisoner" var/id = 0 var/temp = null var/status = 0 @@ -12,7 +11,7 @@ var/stop = 0 var/screen = 0 // 0 - No Access Denied, 1 - Access allowed var/obj/item/weapon/card/id/prisoner/inserted_id - circuit = /obj/item/weapon/circuitboard/prisoner + circuit = /obj/item/weapon/circuitboard/computer/prisoner /obj/machinery/computer/prisoner/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index a71bb8d789a..1348622a0ff 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -7,7 +7,7 @@ icon_screen = "robot" icon_keyboard = "rd_key" req_access = list(access_robotics) - circuit = /obj/item/weapon/circuitboard/robotics + circuit = /obj/item/weapon/circuitboard/computer/robotics var/temp = null /obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index a1bf31d718e..cd113558b7c 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -6,7 +6,7 @@ icon_screen = "security" icon_keyboard = "security_key" req_one_access = list(access_security, access_forensics_lockers) - circuit = /obj/item/weapon/circuitboard/secure_data + circuit = /obj/item/weapon/circuitboard/computer/secure_data var/obj/item/weapon/card/id/scan = null var/authenticated = null var/rank = null diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 70442f0dbbc..b6e5672e8f3 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -3,7 +3,7 @@ desc = "Used to access the station's automated alert system." icon_screen = "alert:0" icon_keyboard = "atmos_key" - circuit = /obj/item/weapon/circuitboard/stationalert + circuit = /obj/item/weapon/circuitboard/computer/stationalert var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) /obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 1732f1ea7fb..cc914875006 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,67 +1,78 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. - name = "machine frame" +/obj/structure/frame + name = "frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "box_0" density = 1 anchored = 1 - use_power = 0 var/obj/item/weapon/circuitboard/circuit = null + var/state = 1 + +/obj/structure/frame/examine(user) + ..() + if(circuit) + user << "It has \a [circuit] installed." + +/obj/structure/frame/machine + name = "machine frame" var/list/components = null var/list/req_components = null var/list/req_component_names = null // user-friendly names of components - var/state = 1 -// unfortunately, we have to instance the objects really quickly to get the names -// fortunately, this is only called once when the board is added and the items are immediately GC'd -// and none of the parts do much in their constructors -/obj/machinery/constructable_frame/proc/update_namelist() +/obj/structure/frame/machine/examine(user) + ..() + if(state == 3 && req_components && req_component_names) + var/hasContent = 0 + var/requires = "It requires" + + for(var/i = 1 to req_components.len) + var/tname = req_components[i] + var/amt = req_components[tname] + if(amt == 0) + continue + var/use_and = i == req_components.len + requires += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" + hasContent = 1 + + if(hasContent) + user << requires + "." + else + user << "It does not require any more components." + +/obj/structure/frame/machine/proc/update_namelist() if(!req_components) return req_component_names = new() for(var/tname in req_components) - var/path = tname - var/obj/O = new path() - req_component_names[tname] = O.name + if(ispath(tname, /obj/item/stack)) + var/obj/item/stack/S = tname + var/singular_name = initial(S.singular_name) + if(singular_name) + req_component_names[tname] = singular_name + else + req_component_names[tname] = initial(S.name) + else + var/obj/O = tname + req_component_names[tname] = initial(O.name) -/obj/machinery/constructable_frame/proc/get_req_components_amt() +/obj/structure/frame/machine/proc/get_req_components_amt() var/amt = 0 for(var/path in req_components) amt += req_components[path] return amt -// update description of required components remaining -/obj/machinery/constructable_frame/proc/update_req_desc() - if(!req_components || !req_component_names) - return - - var/hasContent = 0 - desc = "Requires" - for(var/i = 1 to req_components.len) - var/tname = req_components[i] - var/amt = req_components[tname] - if(amt == 0) - continue - var/use_and = i == req_components.len - desc += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" - hasContent = 1 - - if(!hasContent) - desc = "Does not require any more components." - else - desc += "." - -/obj/machinery/constructable_frame/machine_frame/attackby(obj/item/P, mob/user, params) +/obj/structure/frame/machine/attackby(obj/item/P, mob/user, params) if(P.crit_fail) user << "This part is faulty, you cannot add this to the machine!" return switch(state) if(1) - if(istype(P, /obj/item/weapon/circuitboard)) + if(istype(P, /obj/item/weapon/circuitboard/machine)) user << "The frame needs wiring first!" - return + + else if(istype(P, /obj/item/weapon/circuitboard)) + user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.get_amount() >= 5) @@ -102,26 +113,26 @@ user << "You [anchored ? "un" : ""]secure [name]." anchored = !anchored - if(istype(P, /obj/item/weapon/circuitboard)) + if(istype(P, /obj/item/weapon/circuitboard/machine)) if(!anchored) user << "The frame needs to be secured first!" return - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "machine") - if(!user.drop_item()) - return - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "You add the circuit board to the frame." - circuit = P - P.loc = src - icon_state = "box_2" - state = 3 - components = list() - req_components = circuit.req_components.Copy() - update_namelist() - update_req_desc() - else - user << "This frame does not accept circuit boards of this type!" + var/obj/item/weapon/circuitboard/machine/B = P + if(!user.drop_item()) + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You add the circuit board to the frame." + circuit = B + B.loc = src + icon_state = "box_2" + state = 3 + components = list() + req_components = B.req_components.Copy() + update_namelist() + + else if(istype(P, /obj/item/weapon/circuitboard)) + user << "This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) user << "You remove the cables." @@ -191,31 +202,35 @@ for(var/obj/item/weapon/stock_parts/part in added_components) components += part user << "[part.name] applied." - replacer.play_rped_sound() - - update_req_desc() + if(added_components.len) + replacer.play_rped_sound() return if(istype(P, /obj/item) && get_req_components_amt()) for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0)) - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CP = P - var/cable_color = CP.item_color - if(CP.use(1)) - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, cable_color) - components += CC - req_components[I]-- - update_req_desc() - else - user << "You need more cable!" + if(istype(P, /obj/item/stack)) + var/obj/item/stack/S = P + var/used_amt = min(round(S.get_amount()), req_components[I]) + + if(used_amt && S.use(used_amt)) + var/obj/item/stack/NS = locate(S.merge_type) in components + + if(!NS) + NS = new S.merge_type(src, used_amt) + components += NS + else + NS.add(used_amt) + + req_components[I] -= used_amt + user << "You add [P] to [src]." return if(!user.drop_item()) break + user << "You add [P] to [src]." P.loc = src components += P req_components[I]-- - update_req_desc() return 1 user << "You cannot add that to the machine!" return 0 @@ -224,318 +239,61 @@ //Machine Frame Circuit Boards /*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able -to destroy them and players will be able to make replacements. */ -/obj/item/weapon/circuitboard/vendor - name = "circuit board (Booze-O-Mat Vendor)" - build_path = /obj/machinery/vending/boozeomat - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/vending_refill/boozeomat = 3) +/obj/item/weapon/circuitboard/machine + var/list/req_components = null - var/list/names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", - /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/autodrobe = "AutoDrobe") +/obj/item/weapon/circuitboard/machine/proc/apply_default_parts(obj/machinery/M) + if(!req_components) + return -/obj/item/weapon/circuitboard/vendor/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - set_type(pick(names_paths), user) + M.component_parts = list(src) + loc = null + + for(var/comp_path in req_components) + var/comp_amt = req_components[comp_path] + if(!comp_amt) + continue + + if(ispath(comp_path, /obj/item/stack)) + M.component_parts += new comp_path(null, comp_amt) + else + for(var/i in 1 to comp_amt) + M.component_parts += new comp_path(null) + + M.RefreshParts() -/obj/item/weapon/circuitboard/vendor/proc/set_type(typepath, mob/user) - build_path = typepath - name = "circuit board ([names_paths[build_path]] Vendor)" - user << "You set the board to [names_paths[build_path]]." - req_components = list(text2path("/obj/item/weapon/vending_refill/[copytext("[build_path]", 24)]") = 3) //Never before has i used a method as horrible as this one, im so sorry - -/obj/item/weapon/circuitboard/announcement_system - name = "circuit board (Announcement System)" - build_path = /obj/machinery/announcement_system - board_type = "machine" - origin_tech = "programming=3;bluespace=2" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/smes +/obj/item/weapon/circuitboard/machine/smes name = "circuit board (SMES)" build_path = /obj/machinery/power/smes - board_type = "machine" origin_tech = "programming=4;powerstorage=5;engineering=5" req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/weapon/stock_parts/cell = 5, /obj/item/weapon/stock_parts/capacitor = 1) -/obj/item/weapon/circuitboard/emitter - name = "circuit board (Emitter)" - build_path = /obj/machinery/power/emitter - board_type = "machine" - origin_tech = "programming=4;powerstorage=5;engineering=5" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/power_compressor - name = "circuit board (Power Compressor)" - build_path = /obj/machinery/power/compressor - board_type = "machine" - origin_tech = "programming=4;powerstorage=5;engineering=4" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/manipulator = 6) - -/obj/item/weapon/circuitboard/power_turbine - name = "circuit board (Power Turbine)" - build_path = /obj/machinery/power/turbine - board_type = "machine" - origin_tech = "programming=4;powerstorage=4;engineering=5" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/capacitor = 6) - -/obj/item/weapon/circuitboard/mech_recharger - name = "circuit board (Mechbay Recharger)" - build_path = /obj/machinery/mech_bay_recharge_port - board_type = "machine" - origin_tech = "programming=3;powerstorage=4;engineering=4" - req_components = list( - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/capacitor = 5) - -/obj/item/weapon/circuitboard/teleporter_hub +/obj/item/weapon/circuitboard/machine/teleporter_hub name = "circuit board (Teleporter Hub)" build_path = /obj/machinery/teleport/hub - board_type = "machine" origin_tech = "programming=3;engineering=5;bluespace=5;materials=4" req_components = list( /obj/item/weapon/ore/bluespace_crystal = 3, /obj/item/weapon/stock_parts/matter_bin = 1) -/obj/item/weapon/circuitboard/teleporter_station +/obj/item/weapon/circuitboard/machine/teleporter_station name = "circuit board (Teleporter Station)" build_path = /obj/machinery/teleport/station - board_type = "machine" origin_tech = "programming=4;engineering=4;bluespace=4" req_components = list( /obj/item/weapon/ore/bluespace_crystal = 2, /obj/item/weapon/stock_parts/capacitor = 2, /obj/item/weapon/stock_parts/console_screen = 1) -/obj/item/weapon/circuitboard/telesci_pad - name = "circuit board (Telepad)" - build_path = /obj/machinery/telepad - board_type = "machine" - origin_tech = "programming=4;engineering=3;materials=3;bluespace=4" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 2, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/sleeper - name = "circuit board (Sleeper)" - build_path = /obj/machinery/sleeper - board_type = "machine" - origin_tech = "programming=3;biotech=2;engineering=3;materials=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 2) - -/obj/item/weapon/circuitboard/cryo_tube - name = "circuit board (Cryotube)" - build_path = /obj/machinery/atmospherics/components/unary/cryo_cell - board_type = "machine" - origin_tech = "programming=4;biotech=3;engineering=4" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 4) - -/obj/item/weapon/circuitboard/thermomachine - name = "circuit board (Thermomachine)" - desc = "You can use a screwdriver to switch between heater and freezer." - board_type = "machine" - origin_tech = "programming=3;plasmatech=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/micro_laser = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/thermomachine/attackby(obj/item/I, mob/user, params) - var/obj/item/weapon/circuitboard/freezer = /obj/item/weapon/circuitboard/thermomachine/freezer - var/obj/item/weapon/circuitboard/heater = /obj/item/weapon/circuitboard/thermomachine/heater - var/obj/item/weapon/circuitboard/newtype - - if(istype(I, /obj/item/weapon/screwdriver)) - var/new_setting = "Heater" - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(build_path == initial(heater.build_path)) - newtype = freezer - new_setting = "Freezer" - else - newtype = heater - name = initial(newtype.name) - build_path = initial(newtype.build_path) - user << "You change the circuitboard setting to \"[new_setting]\"." - -/obj/item/weapon/circuitboard/thermomachine/freezer - name = "circuit board (Freezer)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer - -/obj/item/weapon/circuitboard/thermomachine/heater - name = "circuit board (Heater)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater - -/obj/item/weapon/circuitboard/space_heater - name = "circuit board (Space Heater)" - build_path = /obj/machinery/space_heater - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/stack/cable_coil = 3) - -/obj/item/weapon/circuitboard/biogenerator - name = "circuit board (Biogenerator)" - build_path = /obj/machinery/biogenerator - board_type = "machine" - origin_tech = "programming=3;biotech=2;materials=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/hydroponics - name = "circuit board (Hydroponics Tray)" - build_path = /obj/machinery/hydroponics/constructable - board_type = "machine" - origin_tech = "programming=1;biotech=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/microwave - name = "circuit board (Microwave)" - build_path = /obj/machinery/microwave - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/gibber - name = "circuit board (Gibber)" - build_path = /obj/machinery/gibber - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/tesla_coil - name = "circuit board (Tesla Coil)" - build_path = /obj/machinery/power/tesla_coil - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/grounding_rod - name = "circuit board (Grounding Rod)" - build_path = /obj/machinery/power/grounding_rod - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/processor - name = "circuit board (Food processor)" - build_path = /obj/machinery/processor - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/recycler - name = "circuit board (Recycler)" - build_path = /obj/machinery/recycler - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/seed_extractor - name = "circuit board (Seed Extractor)" - build_path = /obj/machinery/seed_extractor - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/smartfridge - name = "circuit board (Smartfridge)" - build_path = /obj/machinery/smartfridge - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1) - -/obj/item/weapon/circuitboard/smartfridge/New(loc, new_type) - if(new_type) - build_path = new_type - -/obj/item/weapon/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - var/list/fridges = list(/obj/machinery/smartfridge = "default", - /obj/machinery/smartfridge/drinks = "drinks", - /obj/machinery/smartfridge/extract = "slimes", - /obj/machinery/smartfridge/chemistry = "chems", - /obj/machinery/smartfridge/chemistry/virology = "viruses") - - var/position = fridges.Find(build_path, fridges) - position = (position == fridges.len) ? 1 : (position + 1) - build_path = fridges[position] - user << "You set the board to [fridges[build_path]]." - -/obj/item/weapon/circuitboard/monkey_recycler - name = "circuit board (Monkey Recycler)" - build_path = /obj/machinery/monkey_recycler - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/holopad - name = "circuit board (AI Holopad)" - build_path = /obj/machinery/hologram/holopad - board_type = "machine" - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/chem_dispenser +/obj/item/weapon/circuitboard/machine/chem_dispenser name = "circuit board (Portable Chem Dispenser)" build_path = /obj/machinery/chem_dispenser/constructable - board_type = "machine" origin_tech = "materials=4;engineering=4;programming=4;plasmatech=3;biotech=3" req_components = list( /obj/item/weapon/stock_parts/matter_bin = 2, @@ -544,269 +302,12 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/stock_parts/console_screen = 1, /obj/item/weapon/stock_parts/cell = 1) -/obj/item/weapon/circuitboard/chem_master - name = "circuit board (Chem Master 2999)" - build_path = /obj/machinery/chem_master/constructable - board_type = "machine" - origin_tech = "materials=2;programming=2;biotech=1" +/obj/item/weapon/circuitboard/machine/telesci_pad + name = "circuit board (Telepad)" + build_path = /obj/machinery/telepad + origin_tech = "programming=4;engineering=3;materials=3;bluespace=4" req_components = list( - /obj/item/weapon/reagent_containers/glass/beaker = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/chem_heater - name = "circuit board (Chemical Heater)" - build_path = /obj/machinery/chem_heater - board_type = "machine" - origin_tech = "materials=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -//Almost the same recipe as destructive analyzer to give people choices. -/obj/item/weapon/circuitboard/experimentor - name = "circuit board (E.X.P.E.R.I-MENTOR)" - build_path = /obj/machinery/r_n_d/experimentor - board_type = "machine" - origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/micro_laser = 2) - - -/obj/item/weapon/circuitboard/destructive_analyzer - name = "circuit board (Destructive Analyzer)" - build_path = /obj/machinery/r_n_d/destructive_analyzer - board_type = "machine" - origin_tech = "magnets=2;engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1) - -/obj/item/weapon/circuitboard/autolathe - name = "circuit board (Autolathe)" - build_path = /obj/machinery/autolathe - board_type = "machine" - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 3, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/protolathe - name = "circuit board (Protolathe)" - build_path = /obj/machinery/r_n_d/protolathe - board_type = "machine" - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/reagent_containers/glass/beaker = 2) - - -/obj/item/weapon/circuitboard/circuit_imprinter - name = "circuit board (Circuit Imprinter)" - build_path = /obj/machinery/r_n_d/circuit_imprinter - board_type = "machine" - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/reagent_containers/glass/beaker = 2) - -/obj/item/weapon/circuitboard/pacman - name = "circuit board (PACMAN-type Generator)" - build_path = /obj/machinery/power/port_gen/pacman - board_type = "machine" - origin_tech = "programming=3;powerstorage=3;plasmatech=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/pacman/super - name = "circuit board (SUPERPACMAN-type Generator)" - build_path = /obj/machinery/power/port_gen/pacman/super - origin_tech = "programming=3;powerstorage=4;engineering=4" - -/obj/item/weapon/circuitboard/pacman/mrs - name = "circuit board (MRSPACMAN-type Generator)" - build_path = "/obj/machinery/power/port_gen/pacman/mrs" - origin_tech = "programming=3;powerstorage=5;engineering=5" - -obj/item/weapon/circuitboard/rdserver - name = "circuit board (R&D Server)" - build_path = /obj/machinery/r_n_d/server - board_type = "machine" - origin_tech = "programming=3" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/scanning_module = 1) - -/obj/item/weapon/circuitboard/mechfab - name = "circuit board (Exosuit Fabricator)" - build_path = /obj/machinery/mecha_part_fabricator - board_type = "machine" - origin_tech = "programming=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/clonepod - name = "circuit board (Clone Pod)" - build_path = /obj/machinery/clonepod - board_type = "machine" - origin_tech = "programming=3;biotech=3" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/scanning_module = 2, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/clonescanner - name = "circuit board (Cloning Scanner)" - build_path = /obj/machinery/dna_scannernew - board_type = "machine" - origin_tech = "programming=2;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/stack/cable_coil = 2,) - -/obj/item/weapon/circuitboard/cyborgrecharger - name = "circuit board (Cyborg Recharger)" - build_path = /obj/machinery/recharge_station - board_type = "machine" - origin_tech = "powerstorage=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 2, - /obj/item/weapon/stock_parts/cell = 1, - /obj/item/weapon/stock_parts/manipulator = 1,) - -/obj/item/weapon/circuitboard/recharger - name = "circuit board (Weapon Recharger)" - build_path = /obj/machinery/recharger - board_type = "machine" - origin_tech = "powerstorage=3;engineering=3;materials=4" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1,) - -// Telecomms circuit boards: - -/obj/item/weapon/circuitboard/telecomms/receiver - name = "circuit board (Subspace Receiver)" - build_path = /obj/machinery/telecomms/receiver - board_type = "machine" - origin_tech = "programming=2;engineering=2;bluespace=1" - req_components = list( - /obj/item/weapon/stock_parts/subspace/ansible = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/micro_laser = 1) - -/obj/item/weapon/circuitboard/telecomms/hub - name = "circuit board (Hub Mainframe)" - build_path = /obj/machinery/telecomms/hub - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) - -/obj/item/weapon/circuitboard/telecomms/relay - name = "circuit board (Relay Mainframe)" - build_path = /obj/machinery/telecomms/relay - board_type = "machine" - origin_tech = "programming=2;engineering=2;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) - -/obj/item/weapon/circuitboard/telecomms/bus - name = "circuit board (Bus Mainframe)" - build_path = /obj/machinery/telecomms/bus - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/ore/bluespace_crystal = 2, + /obj/item/weapon/stock_parts/capacitor = 1, /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) - -/obj/item/weapon/circuitboard/telecomms/processor - name = "circuit board (Processor Unit)" - build_path = /obj/machinery/telecomms/processor - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 3, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/subspace/treatment = 2, - /obj/item/weapon/stock_parts/subspace/analyzer = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/amplifier = 1) - -/obj/item/weapon/circuitboard/telecomms/server - name = "circuit board (Telecommunication Server)" - build_path = /obj/machinery/telecomms/server - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) - -/obj/item/weapon/circuitboard/telecomms/broadcaster - name = "circuit board (Subspace Broadcaster)" - build_path = /obj/machinery/telecomms/broadcaster - board_type = "machine" - origin_tech = "programming=2;engineering=2;bluespace=1" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/subspace/crystal = 1, - /obj/item/weapon/stock_parts/micro_laser/high = 2) -/obj/item/weapon/circuitboard/ore_redemption - name = "circuit board (Ore Redemption)" - build_path = /obj/machinery/mineral/ore_redemption - board_type = "machine" - origin_tech = "programming=1;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/device/assembly/igniter = 1) - -/obj/item/weapon/circuitboard/mining_equipment_vendor - name = "circuit board (Mining Equipment Vendor)" - build_path = /obj/machinery/mineral/equipment_vendor - board_type = "machine" - origin_tech = "programming=1;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/matter_bin = 3) - -/obj/item/weapon/circuitboard/mining_equipment_vendor/golem - name = "circuit board (Golem Ship Equipment Vendor)" - build_path = /obj/machinery/mineral/equipment_vendor/golem - -/obj/item/weapon/circuitboard/plantgenes - name = "circuit board (Plant DNA Manipulator)" - build_path = /obj/machinery/plantgenes - board_type = "machine" - origin_tech = "programming=2;biotech=3" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/scanning_module = 1,) \ No newline at end of file + /obj/item/weapon/stock_parts/console_screen = 1) \ No newline at end of file diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index ed656b1a1df..192ff9df7d1 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -15,16 +15,19 @@ /obj/machinery/dna_scannernew/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonescanner(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonescanner(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/clonescanner + name = "circuit board (Cloning Scanner)" + build_path = /obj/machinery/dna_scannernew + origin_tech = "programming=2;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/stack/cable_coil = 2) /obj/machinery/dna_scannernew/RefreshParts() scan_level = 0 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 5d03cc6f5f2..49bf6e7d916 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -45,10 +45,15 @@ var/const/HOLOPAD_MODE = RANGE_BASED /obj/machinery/hologram/holopad/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/holopad(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/holopad(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/holopad + name = "circuit board (AI Holopad)" + build_path = /obj/machinery/hologram/holopad + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + /obj/machinery/hologram/holopad/RefreshParts() var/holograph_range = 4 diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 7751dcb8bb6..77028a43d1a 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -347,7 +347,7 @@ Class Procs: if(.) deconstruction() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) + var/obj/structure/frame/machine/M = new /obj/structure/frame/machine(loc) transfer_fingerprints_to(M) M.state = 2 M.icon_state = "box_1" @@ -396,7 +396,7 @@ Class Procs: var/shouldplaysound = 0 if(istype(W) && component_parts) if(panel_open || W.works_from_distance) - var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts + var/obj/item/weapon/circuitboard/machine/CB = locate(/obj/item/weapon/circuitboard/machine) in component_parts var/P if(W.works_from_distance) display_parts(user) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 3ae2ded9223..fe5d9ac35a8 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -12,10 +12,14 @@ /obj/machinery/recharger/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recharger() - component_parts += new /obj/item/weapon/stock_parts/capacitor() - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recharger(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/recharger + name = "circuit board (Weapon Recharger)" + build_path = /obj/machinery/recharger + origin_tech = "powerstorage=3;engineering=3;materials=4" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) /obj/machinery/recharger/RefreshParts() for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index ae9a16c729d..d7397ebabf4 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -7,7 +7,6 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 1000 - var/circuitboard = "/obj/item/weapon/circuitboard/cyborgrecharger" req_access = list(access_robotics) var/recharge_speed var/repairs @@ -15,15 +14,19 @@ /obj/machinery/recharge_station/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/cyborgrecharger(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/cyborgrecharger(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/cyborgrecharger + name = "circuit board (Cyborg Recharger)" + build_path = /obj/machinery/recharge_station + origin_tech = "powerstorage=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 2, + /obj/item/weapon/stock_parts/cell = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + /obj/machinery/recharge_station/RefreshParts() recharge_speed = 0 repairs = 0 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 542975781f3..a37a0e4d14e 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -17,16 +17,20 @@ var/const/SAFETY_COOLDOWN = 100 var/datum/material_container/materials /obj/machinery/recycler/New() - // On us ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recycler(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) materials = new /datum/material_container(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_PLASMA=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_URANIUM=1, MAT_BANANIUM=1)) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/recycler + name = "circuit board (Recycler)" + build_path = /obj/machinery/recycler + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + /obj/machinery/recycler/RefreshParts() var/amt_made = 0 var/mat_mod = 0 diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 6322b95731d..a204918d41b 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -21,7 +21,7 @@ density = 1 use_power = 1 idle_power_usage = 50 - circuit = /obj/item/weapon/circuitboard/slot_machine + circuit = /obj/item/weapon/circuitboard/computer/slot_machine var/money = 3000 //How much money it has CONSUMED var/plays = 0 var/working = 0 diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index b164bc08c20..ed76ccd8768 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -24,14 +24,19 @@ /obj/machinery/space_heater/New() ..() cell = new(src) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/space_heater(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/stack/cable_coil(null, 3) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/space_heater(null) + B.apply_default_parts(src) update_icon() +/obj/item/weapon/circuitboard/machine/space_heater + name = "circuit board (Space Heater)" + build_path = /obj/machinery/space_heater + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/stack/cable_coil = 3) + /obj/machinery/space_heater/construction() qdel(cell) cell = null diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 0485e45950e..61598ca32bc 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -14,7 +14,7 @@ var/universal_translate = 0 // set to 1 if it can translate nonhuman speech req_access = list(access_tcomsat) - circuit = "/obj/item/weapon/circuitboard/comm_server" + circuit = /obj/item/weapon/circuitboard/computer/comm_server /obj/machinery/computer/telecomms/server/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index f7ed78a1315..0fd04b25361 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -16,7 +16,7 @@ var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages - circuit = "/obj/item/weapon/circuitboard/comm_monitor" + circuit = /obj/item/weapon/circuitboard/computer/comm_monitor /obj/machinery/computer/telecomms/monitor/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index 91106eae92e..c00bb1a412c 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -19,7 +19,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept machinetype = 5 /*heatgen = 0 delay = 7*/ - circuitboard = "/obj/item/weapon/circuitboard/telecomms/broadcaster" /obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) // Don't broadcast rejected signals @@ -95,16 +94,19 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /obj/machinery/telecomms/broadcaster/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/broadcaster(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/crystal(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser/high(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser/high(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/broadcaster(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster + name = "circuit board (Subspace Broadcaster)" + build_path = /obj/machinery/telecomms/broadcaster + origin_tech = "programming=2;engineering=2;bluespace=1" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/crystal = 1, + /obj/item/weapon/stock_parts/micro_laser = 2) /obj/machinery/telecomms/broadcaster/Destroy() // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index 7b747d4d332..6c98596c884 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -18,7 +18,6 @@ idle_power_usage = 50 machinetype = 2 //heatgen = 20 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/bus" netspeed = 40 var/change_frequency = 0 @@ -52,14 +51,17 @@ /obj/machinery/telecomms/bus/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/bus(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/bus(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/bus + name = "circuit board (Bus Mainframe)" + build_path = /obj/machinery/telecomms/bus + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1) diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm index b52adc8cb8d..d5aebbc45fc 100644 --- a/code/game/machinery/telecomms/machines/hub.dm +++ b/code/game/machinery/telecomms/machines/hub.dm @@ -19,7 +19,6 @@ idle_power_usage = 80 machinetype = 7 //heatgen = 40 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/hub" long_range_link = 1 netspeed = 40 @@ -36,16 +35,17 @@ /obj/machinery/telecomms/hub/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/hub(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/hub(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/hub + name = "circuit board (Hub Mainframe)" + build_path = /obj/machinery/telecomms/hub + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 2) diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm index 18f8ee4d3e0..71cfc2ec5a6 100644 --- a/code/game/machinery/telecomms/machines/processor.dm +++ b/code/game/machinery/telecomms/machines/processor.dm @@ -18,7 +18,6 @@ machinetype = 3 //heatgen = 100 //delay = 5 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/processor" var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals /obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) @@ -38,22 +37,20 @@ /obj/machinery/telecomms/processor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/processor(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/treatment(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/analyzer(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/amplifier(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() - - - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/processor(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/processor + name = "circuit board (Processor Unit)" + build_path = /obj/machinery/telecomms/processor + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 3, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/treatment = 2, + /obj/item/weapon/stock_parts/subspace/analyzer = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/amplifier = 1) //Preset Processors diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index b1dc2b53c92..095bb0cfca2 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -17,7 +17,6 @@ idle_power_usage = 30 machinetype = 1 //heatgen = 0 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/receiver" /obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) @@ -54,16 +53,18 @@ /obj/machinery/telecomms/receiver/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/receiver(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/ansible(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser/high(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/receiver(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/receiver + name = "circuit board (Subspace Receiver)" + build_path = /obj/machinery/telecomms/receiver + origin_tech = "programming=2;engineering=2;bluespace=1" + req_components = list( + /obj/item/weapon/stock_parts/subspace/ansible = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/micro_laser = 1) diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 51d76d47255..a11e521eea3 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -16,7 +16,6 @@ idle_power_usage = 30 machinetype = 8 //heatgen = 0 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/relay" netspeed = 5 long_range_link = 1 var/broadcasting = 1 @@ -48,16 +47,17 @@ /obj/machinery/telecomms/relay/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/relay(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() - + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/relay(null) + B.apply_default_parts(src) +/obj/item/weapon/circuitboard/machine/telecomms/relay + name = "circuit board (Relay Mainframe)" + build_path = /obj/machinery/telecomms/relay + origin_tech = "programming=2;engineering=2;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 2) diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index 9e54644b1f1..b68e618daf3 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -17,7 +17,6 @@ idle_power_usage = 15 machinetype = 4 //heatgen = 50 - circuitboard = "/obj/item/weapon/circuitboard/telecomms/server" var/list/log_entries = list() var/list/stored_names = list() var/list/TrafficActions = list() @@ -35,15 +34,19 @@ /obj/machinery/telecomms/server/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telecomms/server(null) - component_parts += new /obj/item/weapon/stock_parts/subspace/filter(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/server(null) + B.apply_default_parts(src) server_radio = new() +/obj/item/weapon/circuitboard/machine/telecomms/server + name = "circuit board (Telecommunication Server)" + build_path = /obj/machinery/telecomms/server + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1) + /obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(signal.data["message"]) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 161de617ea5..21aece34bb8 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -29,7 +29,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() var/toggled = 1 // Is it toggled on var/on = 1 var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) - var/circuitboard = null // string pointing to a circuitboard type var/hide = 0 // Is it a hidden machine? var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 38c914ecaf5..bb5479c82c9 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -3,7 +3,7 @@ desc = "Used to control a linked teleportation Hub and Station." icon_screen = "teleport" icon_keyboard = "teleport_key" - circuit = "/obj/item/weapon/circuitboard/teleporter" + circuit = /obj/item/weapon/circuitboard/computer/teleporter var/obj/item/device/gps/locked = null var/regime_set = "Teleporter" var/id = null @@ -256,7 +256,7 @@ ..() link_power_station() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/teleporter_hub(null) + component_parts += new /obj/item/weapon/circuitboard/machine/teleporter_hub(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) @@ -364,7 +364,7 @@ /obj/machinery/teleport/station/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/teleporter_station(null) + component_parts += new /obj/item/weapon/circuitboard/machine/teleporter_station(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/stock_parts/capacitor(null) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 30cce02c00d..55479c7e462 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -58,14 +58,8 @@ ..() wires = new /datum/wires/vending(src) if(refill_canister) //constructable vending machine - component_parts = list() - var/obj/item/weapon/circuitboard/vendor/V = new(null) - V.set_type(type) - component_parts += V - component_parts += new refill_canister - component_parts += new refill_canister - component_parts += new refill_canister - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/vendor(null) + B.apply_default_parts(src) else build_inventory(products) build_inventory(contraband, 1) @@ -78,6 +72,44 @@ last_slogan = world.time + rand(0, slogan_delay) power_change() +/obj/item/weapon/circuitboard/machine/vendor + name = "circuit board (Booze-O-Mat Vendor)" + build_path = /obj/machinery/vending/boozeomat + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/vending_refill/boozeomat = 3) + + var/list/names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", + /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", + /obj/machinery/vending/snack = "Getmore Chocolate Corp", + /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", + /obj/machinery/vending/autodrobe = "AutoDrobe") + +/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/position = names_paths.Find(build_path) + position = (position == names_paths.len) ? 1 : (position + 1) + var/typepath = names_paths[position] + + user << "You set the board to \"[names_paths[typepath]]\"." + set_type(typepath) + else + return ..() + +/obj/item/weapon/circuitboard/machine/vendor/proc/set_type(var/obj/machinery/vending/typepath) + build_path = typepath + name = "circuit board ([names_paths[build_path]] Vendor)" + req_components = list(initial(typepath.refill_canister) = 3) + +/obj/item/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) + for(var/typepath in names_paths) + if(istype(M, typepath)) + set_type(typepath) + break + ..() + + /obj/machinery/vending/Destroy() qdel(wires) wires = null diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index f3f730d4bc7..c3847474e60 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -26,17 +26,18 @@ /obj/machinery/mech_bay_recharge_port/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mech_recharger(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mech_recharger(null) + B.apply_default_parts(src) recharging_turf = get_step(loc, dir) +/obj/item/weapon/circuitboard/machine/mech_recharger + name = "circuit board (Mechbay Recharger)" + build_path = /obj/machinery/mech_bay_recharge_port + origin_tech = "programming=3;powerstorage=4;engineering=4" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/capacitor = 5) + /obj/machinery/mech_bay_recharge_port/RefreshParts() var/MC for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) @@ -82,7 +83,7 @@ desc = "Used to control mechbay power ports." icon_screen = "recharge_comp" icon_keyboard = "rd_key" - circuit = /obj/item/weapon/circuitboard/mech_bay_power_console + circuit = /obj/item/weapon/circuitboard/computer/mech_bay_power_console var/obj/machinery/mech_bay_recharge_port/recharge_port /obj/machinery/computer/mech_bay_power_console/attack_ai(mob/user) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 5748be75618..5de9c676059 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -46,16 +46,20 @@ /obj/machinery/mecha_part_fabricator/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mechfab(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null) + B.apply_default_parts(src) files = new /datum/research(src) //Setup the research data holder. +/obj/item/weapon/circuitboard/machine/mechfab + name = "circuit board (Exosuit Fabricator)" + build_path = /obj/machinery/mecha_part_fabricator + origin_tech = "programming=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/machinery/mecha_part_fabricator/RefreshParts() var/T = 0 diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index ab7641dd681..0fc08605bcf 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -4,7 +4,7 @@ icon_screen = "mecha" icon_keyboard = "tech_key" req_access = list(access_robotics) - circuit = "/obj/item/weapon/circuitboard/mecha_control" + circuit = /obj/item/weapon/circuitboard/computer/mecha_control var/list/located = list() var/screen = 0 var/stored_data diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index c14ddd5470c..40037689a9e 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -321,7 +321,6 @@ icon = 'icons/obj/module.dmi' icon_state = "std_mod" item_state = "electronic" - board_type = "other" flags = CONDUCT force = 5 w_class = 2 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 84f474abe0a..76cf1ff5a33 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -26,11 +26,12 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20), \ new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \ null, \ - new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 40, one_per_turf = 1, on_floor = 1), \ + null, \ + new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 25, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 25, one_per_turf = 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index b4e7b5dd5ef..7da9e29ce27 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -64,6 +64,7 @@ return if (!src || get_amount() <= 0) user << browse(null, "window=stack") + return user.set_machine(src) //for correct work of onclose var/t1 = text("Constructions from []Amount Left: []
", src, src.get_amount()) for(var/i=1;i<=recipes.len,i++) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 99b3a72e6ae..6538bba7f06 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -804,7 +804,7 @@ /obj/item/weapon/storage/box/rndboards/New() ..() - new /obj/item/weapon/circuitboard/protolathe(src) - new /obj/item/weapon/circuitboard/destructive_analyzer(src) - new /obj/item/weapon/circuitboard/circuit_imprinter(src) - new /obj/item/weapon/circuitboard/rdconsole(src) + new /obj/item/weapon/circuitboard/machine/protolathe(src) + new /obj/item/weapon/circuitboard/machine/destructive_analyzer(src) + new /obj/item/weapon/circuitboard/machine/circuit_imprinter(src) + new /obj/item/weapon/circuitboard/computer/rdconsole(src) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index ef533fe16a1..0e0ff304900 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -246,3 +246,8 @@ atom/proc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/ qdel(src) else //If for some reason you use an empty card on an empty AI terminal. user << "There is no AI loaded on this terminal!" + + +/obj/item/weapon/circuitboard/aicore + name = "circuit board (AI core)" + origin_tech = "programming=4;biotech=2" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index d896d93a9a3..cdd0e0fea57 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -22,14 +22,17 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/New() ..() initialize_directions = dir - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/cryo_tube(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/cryo_tube + name = "circuit board (Cryotube)" + build_path = /obj/machinery/atmospherics/components/unary/cryo_cell + origin_tech = "programming=4;biotech=3;engineering=4" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 4) /obj/machinery/atmospherics/components/unary/cryo_cell/construction() ..(dir, dir) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index ed142bbf4ed..fc06e542cba 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -17,14 +17,37 @@ /obj/machinery/atmospherics/components/unary/thermomachine/New() ..() initialize_directions = dir - component_parts = list() - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/thermomachine + name = "circuit board (Thermomachine)" + desc = "You can use a screwdriver to switch between heater and freezer." + origin_tech = "programming=3;plasmatech=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params) + var/obj/item/weapon/circuitboard/machine/freezer = /obj/item/weapon/circuitboard/machine/thermomachine/freezer + var/obj/item/weapon/circuitboard/machine/heater = /obj/item/weapon/circuitboard/machine/thermomachine/heater + var/obj/item/weapon/circuitboard/machine/newtype + + if(istype(I, /obj/item/weapon/screwdriver)) + var/new_setting = "Heater" + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(build_path == initial(heater.build_path)) + newtype = freezer + new_setting = "Freezer" + else + newtype = heater + name = initial(newtype.name) + build_path = initial(newtype.build_path) + user << "You change the circuitboard setting to \"[new_setting]\"." + else + return ..() /obj/machinery/atmospherics/components/unary/thermomachine/construction() ..(dir,dir) @@ -169,7 +192,12 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer/New() ..() - component_parts += new /obj/item/weapon/circuitboard/thermomachine/freezer(null) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine/freezer(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/thermomachine/freezer + name = "circuit board (Freezer)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer /obj/machinery/atmospherics/components/unary/thermomachine/freezer/RefreshParts() ..() @@ -189,7 +217,12 @@ /obj/machinery/atmospherics/components/unary/thermomachine/heater/New() ..() - component_parts += new /obj/item/weapon/circuitboard/thermomachine/heater(null) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine/heater(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/thermomachine/heater + name = "circuit board (Heater)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater /obj/machinery/atmospherics/components/unary/thermomachine/heater/RefreshParts() ..() diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 472d2442557..4a3e5bdfec0 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -2,7 +2,7 @@ name = "supply console" desc = "Used to order supplies, approve requests, and control the shuttle." icon_screen = "supply" - circuit = /obj/item/weapon/circuitboard/cargo + circuit = /obj/item/weapon/circuitboard/computer/cargo var/requestonly = FALSE var/contraband = FALSE @@ -10,12 +10,12 @@ name = "supply request console" desc = "Used to request supplies from cargo." icon_screen = "request" - circuit = /obj/item/weapon/circuitboard/cargo/request + circuit = /obj/item/weapon/circuitboard/computer/cargo/request requestonly = TRUE /obj/machinery/computer/cargo/New() ..() - var/obj/item/weapon/circuitboard/cargo/board = circuit + var/obj/item/weapon/circuitboard/computer/cargo/board = circuit contraband = board.contraband emagged = board.emagged @@ -28,7 +28,7 @@ contraband = TRUE // This also permamently sets this on the circuit board - var/obj/item/weapon/circuitboard/cargo/board = circuit + var/obj/item/weapon/circuitboard/computer/cargo/board = circuit board.contraband = TRUE board.emagged = TRUE diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm index b78bb3b2e37..51a563918fb 100644 --- a/code/modules/cargo/exports/parts.dm +++ b/code/modules/cargo/exports/parts.dm @@ -13,7 +13,7 @@ /datum/export/solar/control_board cost = 150 unit_name = "solar panel control board" - export_types = list(/obj/item/weapon/circuitboard/solar_control) + export_types = list(/obj/item/weapon/circuitboard/computer/solar_control) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index ef1c1ef85cd..ef657aedc10 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -530,7 +530,7 @@ /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, - /obj/item/weapon/circuitboard/solar_control, + /obj/item/weapon/circuitboard/computer/solar_control, /obj/item/weapon/electronics/tracker, /obj/item/weapon/paper/solar) crate_name = "solar panel crate" diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm index 84a92fbaca7..93e3d1799fd 100644 --- a/code/modules/food&drinks/kitchen machinery/gibber.dm +++ b/code/modules/food&drinks/kitchen machinery/gibber.dm @@ -48,11 +48,16 @@ /obj/machinery/gibber/New() ..() src.overlays += image('icons/obj/kitchen.dmi', "grjam") - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/gibber(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gibber(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/gibber + name = "circuit board (Gibber)" + build_path = /obj/machinery/gibber + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/gibber/RefreshParts() var/gib_time = 40 diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food&drinks/kitchen machinery/microwave.dm index 878d51853b1..5e8171bf0dd 100644 --- a/code/modules/food&drinks/kitchen machinery/microwave.dm +++ b/code/modules/food&drinks/kitchen machinery/microwave.dm @@ -24,13 +24,18 @@ /obj/machinery/microwave/New() create_reagents(100) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/microwave(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 2) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/microwave(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/microwave + name = "circuit board (Microwave)" + build_path = /obj/machinery/microwave + origin_tech = "programming=1;magnets=1" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/microwave/RefreshParts() var/E diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm index b1e7f5632fd..a446c16d444 100644 --- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm +++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm @@ -16,11 +16,16 @@ /obj/machinery/monkey_recycler/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/monkey_recycler(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/monkey_recycler(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/monkey_recycler + name = "circuit board (Monkey Recycler)" + build_path = /obj/machinery/monkey_recycler + origin_tech = "programming=1;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/monkey_recycler/RefreshParts() var/req_grind = 5 diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index ab460e14999..f0c41e5f082 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -16,12 +16,17 @@ var/rating_amount = 1 /obj/machinery/processor/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/processor(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() + ..() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/processor(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/processor + name = "circuit board (Food Processor)" + build_path = /obj/machinery/processor + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/processor/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) diff --git a/code/modules/food&drinks/kitchen machinery/smartfridge.dm b/code/modules/food&drinks/kitchen machinery/smartfridge.dm index 1eac74d44c7..ca7dfd00041 100644 --- a/code/modules/food&drinks/kitchen machinery/smartfridge.dm +++ b/code/modules/food&drinks/kitchen machinery/smartfridge.dm @@ -19,10 +19,33 @@ /obj/machinery/smartfridge/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/smartfridge(null, type) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/smartfridge(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/smartfridge + name = "circuit board (Smartfridge)" + build_path = /obj/machinery/smartfridge + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/matter_bin = 1) + +/obj/item/weapon/circuitboard/machine/smartfridge/New(loc, new_type) + if(new_type) + build_path = new_type + +/obj/item/weapon/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/list/fridges = list(/obj/machinery/smartfridge = "default", + /obj/machinery/smartfridge/drinks = "drinks", + /obj/machinery/smartfridge/extract = "slimes", + /obj/machinery/smartfridge/chemistry = "chems", + /obj/machinery/smartfridge/chemistry/virology = "viruses") + + var/position = fridges.Find(build_path, fridges) + position = (position == fridges.len) ? 1 : (position + 1) + build_path = fridges[position] + user << "You set the board to [fridges[build_path]]." + else + return ..() /obj/machinery/smartfridge/construction() for(var/datum/A in contents) diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 9ebde1d58ab..c951b922b8b 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -16,15 +16,20 @@ var/max_items = 40 /obj/machinery/biogenerator/New() - ..() - create_reagents(1000) - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/biogenerator(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() + ..() + create_reagents(1000) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/biogenerator(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/biogenerator + name = "circuit board (Biogenerator)" + build_path = /obj/machinery/biogenerator + origin_tech = "programming=3;biotech=2;materials=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/biogenerator/RefreshParts() var/E = 0 diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 1f062578259..2f0e44878b3 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -23,13 +23,18 @@ /obj/machinery/plantgenes/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) - component_parts += new /obj/item/weapon/stock_parts/console_screen(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/plantgenes(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/plantgenes + name = "circuit board (Plant DNA Manipulator)" + build_path = /obj/machinery/plantgenes + origin_tech = "programming=2;biotech=3" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/scanning_module = 1) /obj/machinery/plantgenes/RefreshParts() rating = 0 @@ -353,7 +358,7 @@ /obj/machinery/plantgenes/seedvault/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) + component_parts += new /obj/item/weapon/circuitboard/machine/plantgenes(src) component_parts += new /obj/item/weapon/stock_parts/console_screen(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module/triphasic(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser/quadultra(src) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 09d0f9b748f..ce238c7eaa1 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -34,13 +34,17 @@ /obj/machinery/hydroponics/constructable/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/hydroponics(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/hydroponics(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/hydroponics + name = "circuit board (Hydroponics Tray)" + build_path = /obj/machinery/hydroponics/constructable + origin_tech = "programming=1;biotech=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/hydroponics/constructable/RefreshParts() var/tmp_capacity = 0 diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index e7e63b26e23..1d146cdff00 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -50,11 +50,16 @@ /obj/machinery/seed_extractor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/seed_extractor(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/seed_extractor(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/seed_extractor + name = "circuit board (Seed Extractor)" + build_path = /obj/machinery/seed_extractor + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/seed_extractor/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 16862d3e8a5..bdad0908afe 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -19,7 +19,7 @@ icon_state = "oldcomp" icon_screen = "library" icon_keyboard = null - circuit = /obj/item/weapon/circuitboard/libraryconsole + circuit = /obj/item/weapon/circuitboard/computer/libraryconsole var/screenstate = 0 var/title var/category = "Any" diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 58a7559c55c..9503ed2808b 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -24,14 +24,19 @@ /obj/machinery/mineral/ore_redemption/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/ore_redemption(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/device/assembly/igniter(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/ore_redemption(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/ore_redemption + name = "circuit board (Ore Redemption)" + build_path = /obj/machinery/mineral/ore_redemption + origin_tech = "programming=1;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/device/assembly/igniter = 1) /obj/machinery/mineral/ore_redemption/RefreshParts() var/ore_pickup_rate_temp = 15 @@ -322,13 +327,16 @@ /obj/machinery/mineral/equipment_vendor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mining_equipment_vendor(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor + name = "circuit board (Mining Equipment Vendor)" + build_path = /obj/machinery/mineral/equipment_vendor + origin_tech = "programming=1;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 3) /obj/machinery/mineral/equipment_vendor/power_change() ..() @@ -1151,10 +1159,9 @@ /obj/machinery/mineral/equipment_vendor/golem/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mining_equipment_vendor/golem(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem + name = "circuit board (Golem Ship Equipment Vendor)" + build_path = /obj/machinery/mineral/equipment_vendor/golem diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index 079eaeab8dd..2e88d4e413c 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/shuttle/labor name = "labor shuttle console" desc = "Used to call and send the labor camp shuttle." - circuit = /obj/item/weapon/circuitboard/labor_shuttle + circuit = /obj/item/weapon/circuitboard/computer/labor_shuttle shuttleId = "laborcamp" possible_destinations = "laborcamp_home;laborcamp_away" req_access = list(access_brig) @@ -11,7 +11,7 @@ name = "prisoner shuttle console" desc = "A one-way shuttle console, used to summon the shuttle to the labor camp." possible_destinations = "laborcamp_away" - circuit = /obj/item/weapon/circuitboard/labor_shuttle/one_way + circuit = /obj/item/weapon/circuitboard/computer/labor_shuttle/one_way req_access = list( ) /obj/machinery/computer/shuttle/labor/one_way/Topic(href, href_list) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 0619d722f44..c577ca74bee 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -53,7 +53,7 @@ /obj/machinery/computer/shuttle/mining name = "Mining Shuttle Console" desc = "Used to call and send the mining shuttle." - circuit = /obj/item/weapon/circuitboard/mining_shuttle + circuit = /obj/item/weapon/circuitboard/computer/mining_shuttle shuttleId = "mining" possible_destinations = "mining_home;mining_away" no_destination_swap = 1 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index d6a58af95cf..5a1dffc3c42 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -85,7 +85,7 @@ //Parrots will generally sit on their perch unless something catches their eye. //These vars store their preffered perch and if they dont have one, what they can use as a perch var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/computerframe, /obj/structure/displaycase, \ + var/obj/desired_perches = list(/obj/structure/frame/computer, /obj/structure/displaycase, \ /obj/structure/filingcabinet, /obj/machinery/teleport, \ /obj/machinery/computer, /obj/machinery/clonepod, \ /obj/machinery/dna_scannernew, /obj/machinery/telecomms, \ diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f1b3d4ccbbc..6d29f794ee6 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -251,6 +251,7 @@ /obj/item/weapon/stock_parts/cell/bluespace name = "bluespace power cell" + desc = "A rechargable transdimensional power cell." origin_tech = "powerstorage=7" icon_state = "bscell" maxcharge = 40000 diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index b0f11026686..5f663a89c30 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -6,7 +6,7 @@ use_power = 2 idle_power_usage = 20 active_power_usage = 100 - circuit = /obj/item/weapon/circuitboard/powermonitor + circuit = /obj/item/weapon/circuitboard/computer/powermonitor var/obj/structure/cable/attached diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 09b33ebb881..a61bef51c4f 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -94,7 +94,7 @@ display round(lastgen) and plasmatank amount var/max_sheets = 100 var/sheet_name = "" var/sheet_path = /obj/item/stack/sheet/mineral/plasma - var/board_path = "/obj/item/weapon/circuitboard/pacman" + var/board_path = /obj/item/weapon/circuitboard/machine/pacman var/sheet_left = 0 // How much is left of the sheet var/time_per_sheet = 260 var/current_heat = 0 @@ -106,16 +106,31 @@ display round(lastgen) and plasmatank amount /obj/machinery/power/port_gen/pacman/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/stack/cable_coil(src, 1) - component_parts += new /obj/item/stack/cable_coil(src, 1) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new board_path(src) + var/obj/item/weapon/circuitboard/machine/B = new board_path(null) + B.apply_default_parts(src) + var/obj/sheet = new sheet_path(null) sheet_name = sheet.name - RefreshParts() + +/obj/item/weapon/circuitboard/machine/pacman + name = "circuit board (PACMAN-type Generator)" + build_path = /obj/machinery/power/port_gen/pacman + origin_tech = "programming=3;powerstorage=3;plasmatech=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/pacman/super + name = "circuit board (SUPERPACMAN-type Generator)" + build_path = /obj/machinery/power/port_gen/pacman/super + origin_tech = "programming=3;powerstorage=4;engineering=4" + +/obj/item/weapon/circuitboard/machine/pacman/mrs + name = "circuit board (MRSPACMAN-type Generator)" + build_path = "/obj/machinery/power/port_gen/pacman/mrs" + origin_tech = "programming=3;powerstorage=5;engineering=5" /obj/machinery/power/port_gen/pacman/Destroy() DropFuel() @@ -316,7 +331,7 @@ display round(lastgen) and plasmatank amount sheet_path = /obj/item/stack/sheet/mineral/uranium power_gen = 15000 time_per_sheet = 85 - board_path = "/obj/item/weapon/circuitboard/pacman/super" + board_path = /obj/item/weapon/circuitboard/machine/pacman/super overheat() explosion(src.loc, 3, 3, 3, -1) @@ -326,6 +341,6 @@ display round(lastgen) and plasmatank amount sheet_path = /obj/item/stack/sheet/mineral/diamond power_gen = 40000 time_per_sheet = 80 - board_path = "/obj/item/weapon/circuitboard/pacman/mrs" + board_path = /obj/item/weapon/circuitboard/machine/pacman/mrs overheat() explosion(src.loc, 4, 4, 4, -1) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 051ca76dc48..660e1b409c1 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -29,12 +29,18 @@ /obj/machinery/power/emitter/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/emitter(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null) + B.apply_default_parts(src) RefreshParts() +/obj/item/weapon/circuitboard/machine/emitter + name = "circuit board (Emitter)" + build_path = /obj/machinery/power/emitter + origin_tech = "programming=4;powerstorage=5;engineering=5" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + /obj/machinery/power/emitter/RefreshParts() var/max_firedelay = 120 var/firedelay = 120 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 6543360d433..4cc5fb43e77 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -44,7 +44,7 @@ /obj/machinery/power/smes/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/smes(null) + component_parts += new /obj/item/weapon/circuitboard/machine/smes(null) for(var/i in 1 to 5) component_parts += new /obj/item/weapon/stock_parts/cell/high/empty(null) component_parts += new /obj/item/stack/cable_coil(null, 5) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 48553748ed3..827da56ee9b 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -442,9 +442,9 @@ if(do_after(user, 20/I.toolspeed, target = src)) if (src.stat & BROKEN) user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) + var/obj/item/weapon/circuitboard/computer/solar_control/M = new /obj/item/weapon/circuitboard/computer/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M @@ -454,8 +454,8 @@ qdel(src) else user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) + var/obj/item/weapon/circuitboard/computer/solar_control/M = new /obj/item/weapon/circuitboard/computer/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 721fb142ee6..ddb453f9082 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -10,10 +10,14 @@ /obj/machinery/power/tesla_coil/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/tesla_coil(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/tesla_coil(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/tesla_coil + name = "circuit board (Tesla Coil)" + build_path = /obj/machinery/power/tesla_coil + origin_tech = "programming=1;engineering=2;powerstorage=3" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) /obj/machinery/power/tesla_coil/RefreshParts() var/power_multiplier = 0 @@ -62,10 +66,14 @@ /obj/machinery/power/grounding_rod/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/grounding_rod(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/grounding_rod(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/grounding_rod + name = "circuit board (Grounding Rod)" + build_path = /obj/machinery/power/grounding_rod + origin_tech = "programming=1;engineering=1;powerstorage=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) /obj/machinery/power/grounding_rod/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "grounding_rod", "grounding_rod", W)) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 1e5036354ad..a4a7f60b165 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -58,7 +58,7 @@ desc = "A computer to remotely control a gas turbine." icon_screen = "turbinecomp" icon_keyboard = "tech_key" - circuit = /obj/item/weapon/circuitboard/turbine_computer + circuit = /obj/item/weapon/circuitboard/computer/turbine_computer var/obj/machinery/power/compressor/compressor var/id = 0 @@ -66,21 +66,20 @@ /obj/machinery/power/compressor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/power_compressor(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/stack/cable_coil(null, 5) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/power_compressor(null) + B.apply_default_parts(src) // The inlet of the compressor is the direction it faces gas_contained = new inturf = get_step(src, dir) +/obj/item/weapon/circuitboard/machine/power_compressor + name = "circuit board (Power Compressor)" + build_path = /obj/machinery/power/compressor + origin_tech = "programming=4;powerstorage=5;engineering=4" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/manipulator = 6) /obj/machinery/power/compressor/initialize() ..() @@ -188,20 +187,18 @@ /obj/machinery/power/turbine/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/power_turbine(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/weapon/stock_parts/capacitor(src) - component_parts += new /obj/item/stack/cable_coil(src, 5) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/power_turbine(null) + B.apply_default_parts(src) // The outlet is pointed at the direction of the turbine component - outturf = get_step(src, dir) +/obj/item/weapon/circuitboard/machine/power_turbine + name = "circuit board (Power Turbine)" + build_path = /obj/machinery/power/turbine + origin_tech = "programming=4;powerstorage=4;engineering=5" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 6) /obj/machinery/power/turbine/initialize() ..() diff --git a/code/modules/procedural mapping/mapGenerators/syndicate.dm b/code/modules/procedural mapping/mapGenerators/syndicate.dm index fc3d9dc0387..98e87a8b91d 100644 --- a/code/modules/procedural mapping/mapGenerators/syndicate.dm +++ b/code/modules/procedural mapping/mapGenerators/syndicate.dm @@ -15,7 +15,7 @@ clusterCheckFlags = CLUSTER_CHECK_ALL spawnableTurfs = list() spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/chair = 15,/obj/structure/chair/stool = 10, \ - /obj/structure/computerframe = 15, /obj/item/weapon/storage/toolbox/syndicate = 15 ,\ + /obj/structure/frame/computer = 15, /obj/item/weapon/storage/toolbox/syndicate = 15 ,\ /obj/structure/closet/syndicate = 25, /obj/machinery/suit_storage_unit/syndicate = 15) /datum/mapGeneratorModule/splatterLayer/syndieMobs diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index c36bcf88bc9..38da68a18ad 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -225,7 +225,7 @@ /obj/machinery/chem_dispenser/constructable/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/circuitboard/machine/chem_dispenser(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/manipulator(null) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index edd2c9dd055..5a097bdc746 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -13,11 +13,16 @@ /obj/machinery/chem_heater/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_heater(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_heater(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/chem_heater + name = "circuit board (Chemical Heater)" + build_path = /obj/machinery/chem_heater + origin_tech = "materials=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1) /obj/machinery/chem_heater/RefreshParts() heater_coefficient = 0.10 diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 8aba55937ef..4730cd0f891 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -1,6 +1,6 @@ /obj/machinery/chem_master name = "ChemMaster 3000" - desc = "Used to bottle chemicals to create pills." + desc = "Used to seperate chemicals and distribute them in a variety of forms." density = 1 anchored = 1 icon = 'icons/obj/chemical.dmi' @@ -16,6 +16,37 @@ /obj/machinery/chem_master/New() create_reagents(100) overlays += "waitlight" + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_master(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/chem_master + name = "circuit board (ChemMaster 3000)" + build_path = /obj/machinery/chem_master + origin_tech = "materials=2;programming=2;biotech=1" + req_components = list( + /obj/item/weapon/reagent_containers/glass/beaker = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/new_name = "ChemMaster" + var/new_path = /obj/machinery/chem_master + + if(build_path == /obj/machinery/chem_master) + new_name = "CondiMaster" + new_path = /obj/machinery/chem_master/condimaster + + build_path = new_path + name = "circuit board ([new_name] 3000)" + user << "You change the circuit board setting to \"[new_name]\"." + else + return ..() + +/obj/machinery/chem_master/RefreshParts() + reagents.maximum_volume = 0 + for(var/obj/item/weapon/reagent_containers/glass/beaker/B in component_parts) + reagents.maximum_volume += B.reagents.maximum_volume /obj/machinery/chem_master/ex_act(severity, target) if(severity < 3) @@ -33,6 +64,21 @@ stat |= NOPOWER /obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I)) + if(beaker) + beaker.loc = src.loc + beaker = null + reagents.clear_reagents() + if(bottle) + bottle.loc = src.loc + bottle = null + return + + else if(exchange_parts(user, I)) + return + else if(default_deconstruction_crowbar(I)) + return + if(default_unfasten_wrench(user, I)) return @@ -329,33 +375,6 @@ desc = "Used to create condiments and other cooking supplies." condi = 1 -/obj/machinery/chem_master/constructable - name = "ChemMaster 2999" - desc = "Used to seperate chemicals and distribute them in a variety of forms." - -/obj/machinery/chem_master/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_master(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) - -/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) - if(beaker) - beaker.loc = src.loc - beaker = null - reagents.clear_reagents() - if(bottle) - bottle.loc = src.loc - bottle = null - return - - else if(exchange_parts(user, B)) - return - else if(default_deconstruction_crowbar(B)) - return - else - return ..() \ No newline at end of file +/obj/item/weapon/circuitboard/machine/chem_master/condi + name = "circuit board (CondiMaster 3000)" + build_path = /obj/machinery/chem_master/condimaster \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 7fe9064c014..0fc16281542 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -5,7 +5,7 @@ anchored = 1 icon = 'icons/obj/chemical.dmi' icon_state = "mixer0" - circuit = /obj/item/weapon/circuitboard/pandemic + circuit = /obj/item/weapon/circuitboard/computer/pandemic use_power = 1 idle_power_usage = 20 var/temp_html = "" diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index b113b49127d..2cdc11189e1 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -32,15 +32,19 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/r_n_d/circuit_imprinter/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/circuit_imprinter(null) + B.apply_default_parts(src) reagents.my_atom = src +/obj/item/weapon/circuitboard/machine/circuit_imprinter + name = "circuit board (Circuit Imprinter)" + build_path = /obj/machinery/r_n_d/circuit_imprinter + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/reagent_containers/glass/beaker = 2) + /obj/machinery/r_n_d/circuit_imprinter/RefreshParts() var/T = 0 for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index d945d5d79a4..c25d7ffbe13 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -2,6 +2,16 @@ //////////AI Module Disks////////// /////////////////////////////////// +/datum/design/aicore + name = "AI Design (AI Core)" + desc = "Allows for the construction of circuit boards used to build new AI cores." + id = "aicore" + req_tech = list("programming" = 4, "biotech" = 3) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/aicore + category = list("AI Modules") + /datum/design/safeguard_module name = "Module Design (Safeguard)" diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 9eeaebdd865..1da2314a25b 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -7,17 +7,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/security - category = list("Computer Boards") - -/datum/design/aicore - name = "AI Design (AI Core)" - desc = "Allows for the construction of circuit boards used to build new AI cores." - id = "aicore" - req_tech = list("programming" = 4, "biotech" = 3) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aicore + build_path = /obj/item/weapon/circuitboard/computer/security category = list("Computer Boards") /datum/design/aiupload @@ -27,7 +17,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aiupload + build_path = /obj/item/weapon/circuitboard/computer/aiupload category = list("Computer Boards") /datum/design/borgupload @@ -37,7 +27,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/borgupload + build_path = /obj/item/weapon/circuitboard/computer/borgupload category = list("Computer Boards") /datum/design/med_data @@ -47,7 +37,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/med_data + build_path = /obj/item/weapon/circuitboard/computer/med_data category = list("Computer Boards") /datum/design/operating @@ -57,7 +47,7 @@ req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/operating + build_path = /obj/item/weapon/circuitboard/computer/operating category = list("Computer Boards") /datum/design/pandemic @@ -67,7 +57,7 @@ req_tech = list("programming" = 2, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pandemic + build_path = /obj/item/weapon/circuitboard/computer/pandemic category = list("Computer Boards") /datum/design/scan_console @@ -77,7 +67,7 @@ req_tech = list("programming" = 2, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/scan_consolenew + build_path = /obj/item/weapon/circuitboard/computer/scan_consolenew category = list("Computer Boards") /datum/design/comconsole @@ -87,7 +77,7 @@ req_tech = list("programming" = 2, "magnets" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/communications + build_path = /obj/item/weapon/circuitboard/computer/communications category = list("Computer Boards") /datum/design/idcardconsole @@ -97,7 +87,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/card + build_path = /obj/item/weapon/circuitboard/computer/card category = list("Computer Boards") /datum/design/crewconsole @@ -107,7 +97,7 @@ req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/crew + build_path = /obj/item/weapon/circuitboard/computer/crew category = list("Computer Boards") @@ -118,7 +108,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/secure_data + build_path = /obj/item/weapon/circuitboard/computer/secure_data category = list("Computer Boards") /datum/design/atmosalerts @@ -128,7 +118,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/atmos_alert + build_path = /obj/item/weapon/circuitboard/computer/atmos_alert category = list("Computer Boards") /datum/design/atmos_control @@ -138,7 +128,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/atmos_control + build_path = /obj/item/weapon/circuitboard/computer/atmos_control category = list("Computer Boards") /datum/design/robocontrol @@ -148,7 +138,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/robotics + build_path = /obj/item/weapon/circuitboard/computer/robotics category = list("Computer Boards") /datum/design/arcadebattle @@ -158,7 +148,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/arcade/battle + build_path = /obj/item/weapon/circuitboard/computer/arcade/battle category = list("Computer Boards") /datum/design/orion_trail @@ -168,7 +158,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/arcade/orion_trail + build_path = /obj/item/weapon/circuitboard/computer/arcade/orion_trail category = list("Computer Boards") /datum/design/slot_machine @@ -178,7 +168,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/slot_machine + build_path = /obj/item/weapon/circuitboard/computer/slot_machine category = list("Computer Boards") /datum/design/powermonitor @@ -188,7 +178,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/powermonitor + build_path = /obj/item/weapon/circuitboard/computer/powermonitor category = list("Computer Boards") /datum/design/solarcontrol @@ -198,7 +188,7 @@ req_tech = list("programming" = 2, "powerstorage" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/solar_control + build_path = /obj/item/weapon/circuitboard/computer/solar_control category = list("Computer Boards") /datum/design/prisonmanage @@ -208,7 +198,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/prisoner + build_path = /obj/item/weapon/circuitboard/computer/prisoner category = list("Computer Boards") /datum/design/mechacontrol @@ -218,7 +208,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha_control + build_path = /obj/item/weapon/circuitboard/computer/mecha_control category = list("Computer Boards") /datum/design/mechapower @@ -228,7 +218,7 @@ req_tech = list("programming" = 2, "powerstorage" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mech_bay_power_console + build_path = /obj/item/weapon/circuitboard/computer/mech_bay_power_console category = list("Computer Boards") /datum/design/rdconsole @@ -238,7 +228,7 @@ req_tech = list("programming" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdconsole + build_path = /obj/item/weapon/circuitboard/computer/rdconsole category = list("Computer Boards") /datum/design/cargo @@ -248,7 +238,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cargo + build_path = /obj/item/weapon/circuitboard/computer/cargo category = list("Computer Boards") /datum/design/cargorequest @@ -258,7 +248,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cargo/request + build_path = /obj/item/weapon/circuitboard/computer/cargo/request category = list("Computer Boards") /datum/design/mining @@ -268,7 +258,7 @@ req_tech = list("programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mining + build_path = /obj/item/weapon/circuitboard/computer/mining category = list("Computer Boards") /datum/design/comm_monitor @@ -278,7 +268,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_monitor + build_path = /obj/item/weapon/circuitboard/computer/comm_monitor category = list("Computer Boards") /datum/design/comm_server @@ -288,7 +278,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/comm_server + build_path = /obj/item/weapon/circuitboard/computer/comm_server category = list("Computer Boards") /datum/design/message_monitor @@ -298,7 +288,7 @@ req_tech = list("programming" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/message_monitor + build_path = /obj/item/weapon/circuitboard/computer/message_monitor category = list("Computer Boards") /datum/design/aifixer @@ -308,7 +298,7 @@ req_tech = list("programming" = 3, "biotech" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/aifixer + build_path = /obj/item/weapon/circuitboard/computer/aifixer category = list("Computer Boards") /datum/design/libraryconsole @@ -318,5 +308,5 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/libraryconsole + build_path = /obj/item/weapon/circuitboard/computer/libraryconsole category = list("Computer Boards") diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 0a4b1da496b..fe53f327a7e 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -9,7 +9,7 @@ req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/smes + build_path = /obj/item/weapon/circuitboard/machine/smes category = list ("Engineering Machinery") /datum/design/announcement_system @@ -19,7 +19,7 @@ req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/announcement_system + build_path = /obj/item/weapon/circuitboard/machine/announcement_system category = list("Subspace Telecomms") /datum/design/turbine_computer @@ -29,7 +29,7 @@ req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/turbine_computer + build_path = /obj/item/weapon/circuitboard/computer/turbine_computer category = list ("Engineering Machinery") /datum/design/emitter @@ -39,7 +39,7 @@ req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/emitter + build_path = /obj/item/weapon/circuitboard/machine/emitter category = list ("Engineering Machinery") /datum/design/power_compressor @@ -49,7 +49,7 @@ req_tech = list("programming" = 4, "powerstorage" = 5, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/power_compressor + build_path = /obj/item/weapon/circuitboard/machine/power_compressor category = list ("Engineering Machinery") /datum/design/power_turbine @@ -59,7 +59,7 @@ req_tech = list("programming" = 4, "powerstorage" = 4, "engineering" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/power_turbine + build_path = /obj/item/weapon/circuitboard/machine/power_turbine category = list ("Engineering Machinery") /datum/design/thermomachine @@ -69,7 +69,7 @@ req_tech = list("programming" = 3, "plasmatech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/thermomachine + build_path = /obj/item/weapon/circuitboard/machine/thermomachine category = list ("Engineering Machinery") /datum/design/space_heater @@ -79,7 +79,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/space_heater + build_path = /obj/item/weapon/circuitboard/machine/space_heater category = list ("Engineering Machinery") /datum/design/teleport_station @@ -89,7 +89,7 @@ req_tech = list("programming" = 4, "bluespace" = 4, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter_station + build_path = /obj/item/weapon/circuitboard/machine/teleporter_station category = list ("Teleportation Machinery") /datum/design/teleport_hub @@ -99,7 +99,7 @@ req_tech = list("programming" = 3, "bluespace" = 5, "materials" = 4, "engineering" = 5) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter_hub + build_path = /obj/item/weapon/circuitboard/machine/teleporter_hub category = list ("Teleportation Machinery") /datum/design/telepad @@ -109,7 +109,7 @@ req_tech = list("programming" = 4, "bluespace" = 4, "materials" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telesci_pad + build_path = /obj/item/weapon/circuitboard/machine/telesci_pad category = list ("Teleportation Machinery") /datum/design/teleconsole @@ -119,7 +119,7 @@ req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/teleporter + build_path = /obj/item/weapon/circuitboard/computer/teleporter category = list("Teleportation Machinery") /datum/design/telesci_console @@ -129,7 +129,7 @@ req_tech = list("programming" = 3, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telesci_console + build_path = /obj/item/weapon/circuitboard/computer/telesci_console category = list("Teleportation Machinery") /datum/design/sleeper @@ -139,7 +139,7 @@ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/sleeper + build_path = /obj/item/weapon/circuitboard/machine/sleeper category = list ("Medical Machinery") /datum/design/cryotube @@ -149,7 +149,7 @@ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cryo_tube + build_path = /obj/item/weapon/circuitboard/machine/cryo_tube category = list ("Medical Machinery") /datum/design/chem_dispenser @@ -159,7 +159,7 @@ req_tech = list("programming" = 4, "biotech" = 3, "engineering" = 4, "materials" = 4, "plasmatech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_dispenser + build_path = /obj/item/weapon/circuitboard/machine/chem_dispenser category = list ("Medical Machinery") /datum/design/chem_master @@ -169,7 +169,7 @@ req_tech = list("biotech" = 1, "materials" = 2, "programming" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_master + build_path = /obj/item/weapon/circuitboard/machine/chem_master category = list ("Medical Machinery") /datum/design/chem_heater @@ -179,7 +179,7 @@ req_tech = list("engineering" = 2, "materials" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/chem_heater + build_path = /obj/item/weapon/circuitboard/machine/chem_heater category = list ("Medical Machinery") /datum/design/clonecontrol @@ -189,7 +189,7 @@ req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cloning + build_path = /obj/item/weapon/circuitboard/computer/cloning category = list("Medical Machinery") /datum/design/clonepod @@ -199,7 +199,7 @@ req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/clonepod + build_path = /obj/item/weapon/circuitboard/machine/clonepod category = list("Medical Machinery") /datum/design/clonescanner @@ -209,7 +209,7 @@ req_tech = list("programming" = 3, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/clonescanner + build_path = /obj/item/weapon/circuitboard/machine/clonescanner category = list("Medical Machinery") /datum/design/biogenerator @@ -219,7 +219,7 @@ req_tech = list("programming" = 3, "biotech" = 2, "materials" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/biogenerator + build_path = /obj/item/weapon/circuitboard/machine/biogenerator category = list ("Hydroponics Machinery") /datum/design/hydroponics @@ -229,7 +229,7 @@ req_tech = list("programming" = 1, "biotech" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/hydroponics + build_path = /obj/item/weapon/circuitboard/machine/hydroponics category = list ("Hydroponics Machinery") /datum/design/destructive_analyzer @@ -239,7 +239,7 @@ req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/destructive_analyzer + build_path = /obj/item/weapon/circuitboard/machine/destructive_analyzer category = list("Research Machinery") /datum/design/experimentor @@ -249,7 +249,7 @@ req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/experimentor + build_path = /obj/item/weapon/circuitboard/machine/experimentor category = list("Research Machinery") /datum/design/protolathe @@ -259,7 +259,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/protolathe + build_path = /obj/item/weapon/circuitboard/machine/protolathe category = list("Research Machinery") /datum/design/circuit_imprinter @@ -269,7 +269,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/circuit_imprinter + build_path = /obj/item/weapon/circuitboard/machine/circuit_imprinter category = list("Research Machinery") /datum/design/rdservercontrol @@ -279,7 +279,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdservercontrol + build_path = /obj/item/weapon/circuitboard/computer/rdservercontrol category = list("Research Machinery") /datum/design/rdserver @@ -289,7 +289,7 @@ req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/rdserver + build_path = /obj/item/weapon/circuitboard/machine/rdserver category = list("Research Machinery") /datum/design/mechfab @@ -299,7 +299,7 @@ req_tech = list("programming" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mechfab + build_path = /obj/item/weapon/circuitboard/machine/mechfab category = list("Research Machinery") /datum/design/cyborgrecharger @@ -309,7 +309,7 @@ req_tech = list("powerstorage" = 3, "engineering" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/cyborgrecharger + build_path = /obj/item/weapon/circuitboard/machine/cyborgrecharger category = list("Research Machinery") /datum/design/mech_recharger @@ -319,7 +319,7 @@ req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mech_recharger + build_path = /obj/item/weapon/circuitboard/machine/mech_recharger category = list("Research Machinery") /datum/design/microwave @@ -329,7 +329,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/microwave + build_path = /obj/item/weapon/circuitboard/machine/microwave category = list ("Misc. Machinery") /datum/design/gibber @@ -339,7 +339,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/gibber + build_path = /obj/item/weapon/circuitboard/machine/gibber category = list ("Misc. Machinery") /datum/design/smartfridge @@ -349,7 +349,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/smartfridge + build_path = /obj/item/weapon/circuitboard/machine/smartfridge category = list ("Misc. Machinery") /datum/design/monkey_recycler @@ -359,7 +359,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/monkey_recycler + build_path = /obj/item/weapon/circuitboard/machine/monkey_recycler category = list ("Misc. Machinery") /datum/design/seed_extractor @@ -369,7 +369,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/seed_extractor + build_path = /obj/item/weapon/circuitboard/machine/seed_extractor category = list ("Misc. Machinery") /datum/design/processor @@ -379,7 +379,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/processor + build_path = /obj/item/weapon/circuitboard/machine/processor category = list ("Misc. Machinery") /datum/design/recycler @@ -389,7 +389,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/recycler + build_path = /obj/item/weapon/circuitboard/machine/recycler category = list ("Misc. Machinery") /datum/design/holopad @@ -399,7 +399,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/holopad + build_path = /obj/item/weapon/circuitboard/machine/holopad category = list ("Misc. Machinery") /datum/design/autolathe @@ -409,7 +409,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/autolathe + build_path = /obj/item/weapon/circuitboard/machine/autolathe category = list ("Misc. Machinery") /datum/design/recharger @@ -419,7 +419,7 @@ req_tech = list("powerstorage" = 3, "engineering" = 3, "materials" = 4) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_GOLD = 100) - build_path = /obj/item/weapon/circuitboard/recharger + build_path = /obj/item/weapon/circuitboard/machine/recharger category = list("Misc. Machinery") /datum/design/vendor @@ -429,7 +429,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/vendor + build_path = /obj/item/weapon/circuitboard/machine/vendor category = list ("Misc. Machinery") /datum/design/ore_redemption @@ -439,7 +439,7 @@ req_tech = list("programming" = 1, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/ore_redemption + build_path = /obj/item/weapon/circuitboard/machine/ore_redemption category = list ("Misc. Machinery") @@ -450,7 +450,7 @@ req_tech = list("programming" = 1, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mining_equipment_vendor + build_path = /obj/item/weapon/circuitboard/machine/mining_equipment_vendor category = list ("Misc. Machinery") /datum/design/tesla_coil @@ -460,7 +460,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/tesla_coil + build_path = /obj/item/weapon/circuitboard/machine/tesla_coil category = list ("Misc. Machinery") /datum/design/grounding_rod @@ -470,7 +470,7 @@ req_tech = list("programming" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/grounding_rod + build_path = /obj/item/weapon/circuitboard/machine/grounding_rod category = list ("Misc. Machinery") /datum/design/plantgenes @@ -480,5 +480,5 @@ req_tech = list("programming" = 4, "biotech" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/plantgenes + build_path = /obj/item/weapon/circuitboard/machine/plantgenes category = list ("Misc. Machinery") diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 0719aafb9e8..11bb5c755be 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -79,7 +79,7 @@ build_type = IMPRINTER reliability = 79 materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman + build_path = /obj/item/weapon/circuitboard/machine/pacman category = list("Engineering Machinery") /datum/design/superpacman @@ -90,7 +90,7 @@ build_type = IMPRINTER reliability = 76 materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman/super + build_path = /obj/item/weapon/circuitboard/machine/pacman/super category = list("Engineering Machinery") /datum/design/mrspacman @@ -101,5 +101,5 @@ build_type = IMPRINTER reliability = 74 materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/pacman/mrs + build_path = /obj/item/weapon/circuitboard/machine/pacman/mrs category = list("Engineering Machinery") diff --git a/code/modules/research/designs/telecomms_designs.dm b/code/modules/research/designs/telecomms_designs.dm index 0a36d63e6fa..baa6bb689ba 100644 --- a/code/modules/research/designs/telecomms_designs.dm +++ b/code/modules/research/designs/telecomms_designs.dm @@ -9,7 +9,7 @@ req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/receiver + build_path = /obj/item/weapon/circuitboard/machine/telecomms/receiver category = list("Subspace Telecomms") /datum/design/telecomms_bus @@ -19,7 +19,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/bus + build_path = /obj/item/weapon/circuitboard/machine/telecomms/bus category = list("Subspace Telecomms") /datum/design/telecomms_hub @@ -29,7 +29,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/hub + build_path = /obj/item/weapon/circuitboard/machine/telecomms/hub category = list("Subspace Telecomms") /datum/design/telecomms_relay @@ -39,7 +39,7 @@ req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/relay + build_path = /obj/item/weapon/circuitboard/machine/telecomms/relay category = list("Subspace Telecomms") /datum/design/telecomms_processor @@ -49,7 +49,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/processor + build_path = /obj/item/weapon/circuitboard/machine/telecomms/processor category = list("Subspace Telecomms") /datum/design/telecomms_server @@ -59,7 +59,7 @@ req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/server + build_path = /obj/item/weapon/circuitboard/machine/telecomms/server category = list("Subspace Telecomms") /datum/design/subspace_broadcaster @@ -69,5 +69,5 @@ req_tech = list("programming" = 2, "engineering" = 2, "bluespace" = 1) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster + build_path = /obj/item/weapon/circuitboard/machine/telecomms/broadcaster category = list("Subspace Telecomms") \ No newline at end of file diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 85a492092c5..a3b856b5f0f 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -15,12 +15,17 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/destructive_analyzer(null) + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/destructive_analyzer + name = "circuit board (Destructive Analyzer)" + build_path = /obj/machinery/r_n_d/destructive_analyzer + origin_tech = "magnets=2;engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1) /obj/machinery/r_n_d/destructive_analyzer/RefreshParts() var/T = 0 diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 7ae08a0338b..62216b39872 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -81,17 +81,21 @@ /obj/machinery/r_n_d/experimentor/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/experimentor(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/experimentor(null) + B.apply_default_parts(src) + trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in mob_list trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in mob_list SetTypeReactions() - RefreshParts() + +/obj/item/weapon/circuitboard/machine/experimentor + name = "circuit board (E.X.P.E.R.I-MENTOR)" + build_path = /obj/machinery/r_n_d/experimentor + origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/micro_laser = 2) /obj/machinery/r_n_d/experimentor/RefreshParts() for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index e704dd823ae..70c6c1c0451 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -34,19 +34,21 @@ Note: Must be placed west/left of and R&D console to function. /obj/machinery/r_n_d/protolathe/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/protolathe(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1)) - RefreshParts() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/protolathe(null) + B.apply_default_parts(src) reagents.my_atom = src +/obj/item/weapon/circuitboard/machine/protolathe + name = "circuit board (Protolathe)" + build_path = /obj/machinery/r_n_d/protolathe + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/reagent_containers/glass/beaker = 2) + /obj/machinery/r_n_d/protolathe/Destroy() qdel(materials) return ..() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index f8f2ef29743..5da672ae25d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -33,7 +33,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, name = "R&D Console" icon_screen = "rdcomp" icon_keyboard = "rd_key" - circuit = /obj/item/weapon/circuitboard/rdconsole + circuit = /obj/item/weapon/circuitboard/computer/rdconsole var/datum/research/files //Stores all the collected research data. var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk. var/obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk. diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index dc2192aa25e..1e5e26d41ce 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -16,13 +16,17 @@ /obj/machinery/r_n_d/server/New() ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(null) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() - initialize(); //Agouri + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/rdserver(null) + B.apply_default_parts(src) + initialize() //Agouri + +/obj/item/weapon/circuitboard/machine/rdserver + name = "circuit board (R&D Server)" + build_path = /obj/machinery/r_n_d/server + origin_tech = "programming=3" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/scanning_module = 1) /obj/machinery/r_n_d/server/Destroy() griefProtection() @@ -177,7 +181,7 @@ var/list/servers = list() var/list/consoles = list() var/badmin = 0 - circuit = /obj/item/weapon/circuitboard/rdservercontrol + circuit = /obj/item/weapon/circuitboard/computer/rdservercontrol /obj/machinery/computer/rdservercontrol/Topic(href, href_list) if(..()) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 2b5968cc068..74e2343be67 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -3,13 +3,13 @@ icon_screen = "shuttle" icon_keyboard = "tech_key" req_access = list( ) - circuit = /obj/item/weapon/circuitboard/shuttle + circuit = /obj/item/weapon/circuitboard/computer/shuttle var/shuttleId var/possible_destinations = "" var/admin_controlled var/no_destination_swap = 0 -/obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/shuttle/C) +/obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/computer/shuttle/C) ..() if(istype(C)) possible_destinations = C.possible_destinations diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index 0921e074f06..f5b142dc4ed 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -1,13 +1,13 @@ /obj/machinery/computer/shuttle/ferry name = "transport ferry console" - circuit = /obj/item/weapon/circuitboard/ferry + circuit = /obj/item/weapon/circuitboard/computer/ferry shuttleId = "ferry" possible_destinations = "ferry_home;ferry_away" /obj/machinery/computer/shuttle/ferry/request name = "ferry console" - circuit = /obj/item/weapon/circuitboard/ferry/request + circuit = /obj/item/weapon/circuitboard/computer/ferry/request var/cooldown //prevents spamming admins possible_destinations = "ferry_home" admin_controlled = 1 diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm index 4749a5e8d17..924a210e22a 100644 --- a/code/modules/shuttle/white_ship.dm +++ b/code/modules/shuttle/white_ship.dm @@ -1,6 +1,6 @@ /obj/machinery/computer/shuttle/white_ship name = "White Ship Console" desc = "Used to control the White Ship." - circuit = /obj/item/weapon/circuitboard/white_ship + circuit = /obj/item/weapon/circuitboard/computer/white_ship shuttleId = "whiteship" possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland" \ No newline at end of file diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 8e640ed006d..2259bb961f1 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -13,7 +13,7 @@ /obj/machinery/telepad/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null) + component_parts += new /obj/item/weapon/circuitboard/machine/telesci_pad(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/ore/bluespace_crystal/artificial(null) component_parts += new /obj/item/weapon/stock_parts/capacitor(null) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index e0f333b8007..59237bfd1b0 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -3,7 +3,7 @@ desc = "Used to teleport objects to and from the telescience telepad." icon_screen = "teleport" icon_keyboard = "teleport_key" - circuit = /obj/item/weapon/circuitboard/telesci_console + circuit = /obj/item/weapon/circuitboard/computer/telesci_console var/sending = 1 var/obj/machinery/telepad/telepad = null var/temp_msg = "Telescience control console initialized.
Welcome." diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 8b5b5b812e4376f25ea40f1a710fa19f683623e9..6589aabb869e72eed234b3fd77b4d7cfed80d37e 100644 GIT binary patch literal 13401 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 bIzZ6lA<;FPg*y6`A>g(ATe)%>vycA`l;$|Q literal 13157 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 Date: Sun, 8 May 2016 06:44:33 -0500 Subject: [PATCH 07/13] Dual magazine shotgun (#17118) * Dual feed shotgun * Dual Shotgun Sprites --- code/modules/projectiles/guns/projectile.dm | 1 - .../projectiles/guns/projectile/automatic.dm | 46 ++++++++- .../projectiles/guns/projectile/shotgun.dm | 92 +++++++++--------- icons/obj/guns/projectile.dmi | Bin 27261 -> 27656 bytes 4 files changed, 92 insertions(+), 47 deletions(-) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index a0ec355c1e8..5ab0ce8264e 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -14,7 +14,6 @@ magazine = new mag_type(src) chamber_round() update_icon() - return /obj/item/weapon/gun/projectile/update_icon() ..() diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 54313c7f174..7b2439678d4 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -234,4 +234,48 @@ fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 3 - fire_delay = 1 \ No newline at end of file + fire_delay = 1 + + + +// Bulldog shotgun // + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog + name = "\improper 'Bulldog' Shotgun" + desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." + icon_state = "bulldog" + item_state = "bulldog" + w_class = 3 + origin_tech = "combat=5;materials=4;syndicate=6" + mag_type = /obj/item/ammo_box/magazine/m12g + fire_sound = 'sound/weapons/Gunshot.ogg' + can_suppress = 0 + burst_size = 1 + fire_delay = 0 + pin = /obj/item/device/firing_pin/implant/pindicate + actions_types = list() + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/unrestricted + pin = /obj/item/device/firing_pin + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New() + ..() + update_icon() + return + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine() + if(magazine) + src.overlays = 0 + overlays += "[magazine.icon_state]" + return + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/update_icon() + src.overlays = 0 + update_magazine() + icon_state = "bulldog[chambered ? "" : "-e"]" + return + +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack() + ..() + empty_alarm() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 0f20c8ff62b..3cdc0b2100a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -298,59 +298,61 @@ else sawn_state = SAWN_INTACT - -// Bulldog shotgun // - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog - name = "\improper 'Bulldog' Shotgun" - desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." - icon_state = "bulldog" - item_state = "bulldog" - w_class = 3 - origin_tech = "combat=5;materials=4;syndicate=6" - mag_type = /obj/item/ammo_box/magazine/m12g - fire_sound = 'sound/weapons/Gunshot.ogg' - can_suppress = 0 - burst_size = 1 - fire_delay = 0 - pin = /obj/item/device/firing_pin/implant/pindicate - actions_types = list() - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/unrestricted - pin = /obj/item/device/firing_pin - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New() - ..() - update_icon() - return - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine() - if(magazine) - src.overlays = 0 - overlays += "[magazine.icon_state]" - return - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/update_icon() - src.overlays = 0 - update_magazine() - icon_state = "bulldog[chambered ? "" : "-e"]" - return - -/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/afterattack() - ..() - empty_alarm() - return +// Automatic Shotguns// /obj/item/weapon/gun/projectile/shotgun/automatic/shoot_live_shot(mob/living/user as mob|obj) ..() src.pump(user) -// COMBAT SHOTGUN // - /obj/item/weapon/gun/projectile/shotgun/automatic/combat name = "combat shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com + mag_type = /obj/item/ammo_box/magazine/internal/shot/tube w_class = 5 + +//Dual Feed Shotgun + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube + name = "cycler shotgun" + desc = "An advanced shotgun with two separate magazine tubes, allowing you to quickly toggle between ammo types." + icon_state = "cycler" + origin_tech = "combat=4;materials=2" + mag_type = /obj/item/ammo_box/magazine/internal/shot/tube + w_class = 5 + var/toggled = 0 + var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/New() + ..() + if (!alternate_magazine) + alternate_magazine = new mag_type(src) + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/attack_self(mob/living/user) + if(!chambered && magazine.contents.len) + pump() + else + toggle_tube(user) + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/proc/toggle_tube(mob/living/user) + var/current_mag = magazine + var/alt_mag = alternate_magazine + magazine = alt_mag + alternate_magazine = current_mag + toggled = !toggled + if(toggled) + user << "You switch to tube B." + else + user << "You switch to tube A." + + +/obj/item/weapon/gun/projectile/shotgun/automatic/dual_tube/AltClick(mob/living/user) + if(user.incapacitated() || !Adjacent(user) || !istype(user)) + return + pump() + +/obj/item/ammo_box/magazine/internal/shot/tube + name = "dual feed shotgun internal tube" + ammo_type = /obj/item/ammo_casing/shotgun/rubbershot + max_ammo = 4 \ No newline at end of file diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 60228c44e70646f47f0e67c64c09d6cd47693a1a..ca4182ba24996b2236f00bc8f74e24bca693bfbd 100644 GIT binary patch delta 7255 zcma)AXH*mIww{0#>4;JU45$c*(h;PEDqW-r(t?11N|jzGB1O802vQ6k0UVNM_Aszwa}9@8{WjzxaOG>tWcN>oE2bE(&5+=HK({ zqsjBC>njNdxZ|U>FUOR#-;*`pKKO|#Qzq`x1S3kVb+WA0?s&gziL>W>|Aecguv;y; ziub)+Vyb(?n~NmI=NzTdj6&+4?`JSGJ`vc@7pTZsq~ll`zr`NHWmIDC@sd>0q|Jdr zxgxH;)Sjz?$KdKE9Z}x!w>;`SWla64(Pv7!SC86f4~Usnu57Hka>sQgU~wO%e%;HE zD8_;;B}PDF!TLlp4d)}mE`OD2yQAGA#vZ}RW&P}#ah}J}#l6{8-NS?aRry78X7)8l zzdH;{xY(vD_mzEr9Inudob$JA)>@i|QQ<={=-XqXTa0pQ}{bP8Dv zCgD~>cV3Owxf_KEJobJ9cK_7uizgWQ1vD3Uu=dw zU|H+~K_2=YC#3Qt?**(`cl)%@_BZ2xSei^w-j~V`3mGL1VrojB3^{mjDCE@U+mU>r zwY`{&4)6}p^|p@ye(X9drSFFpSGovyN#dt!PQ=8x%q zZ+B^Gan*r?tIqERy5?|OE33_O-0>Y1hcao<9&^-n&HLTb1dnKNsv%JwT>BBv=k1VLPykXkS_rPJ_$Yp|a--LaVpsaGGN;!OH13G2t4Zt~;Fd(1 zf@oeS0K8v*rs*B3GxllrS2tPsWP@$;;GKNnMrAN^Y28N-kgGr~$?l`7n4$sTR2Dm{ zpL%s@E{Z1OWVlsUByTEFT%&@P8Nb_y^~c96IAK%{{o+(bJC|;S__aP?Xj>R!H%_1@ z^7zWGH~HAge7U?rr)6@~7-#^e8=ffVAYCL=XG>J>Pt(FpLu;@k?t5Xf)9K0AK4B^? zdFvznsqZXu>gzes8yFaLFh;ZxDL3}^_Nu$P@2#7C^;ipRC-_buA4{HGw)YNwuv}SO zk|#8$h2IPdRpy8Xz+7m1O(^VTg$p+BS2?~t=ja)=*meS zN`WJWfhN8fnJ4xtPSduwwk4Gnj2f}P{;+Xx4(0O+bOa|HXn6J|{lVGqq%(c`Q-hPs zgPzlq_UB3tF92!vlN5kpXy4`V!bWrUM`L-T%g-o*;mfP9gKQs{jrDj}v13km-B0HY zyJoSI_12o$lQrDd4^SJ~=845iPZH*(NKVDMhR3Rgcy?Sek~)rnSsD&Z3_3YH77ROaY%8 zzKE$|ing$~Cld4Bw{R2nuFA^!680QE(NIsy>emOe0_%@lmZhiMfY^~oZk{rzl9KZ& zK8x}}HaO?ybTXmsrB6a6K<@Iz>Y7!z-JZLW^8s^x+6esisZ_k3XrM`@BTHA)!G*QO zz^7>;EOjgD+>2l1T&hR!T`DUpW66bbYIpY|{VU>xOCy9ViuTByFXw?pJEyjZ9vy2F zeuk1m@Ipw4(_FtI?d-A&e6GXxqiQmv!g4Zpyc^mjOTWsLf4rW(F_m>=-qb_r+^2j> z*{Nd=B3E%^(aS%tSYh3|S~@?OpLYlX&TI zyV}XCUy3wz4p_k9(yPbls6wG{LCHI$KPSKt6SUtm&6nfEjO3iwxgvKz*mV{@WXi^XNugi2T8RO^~-Y{>!gl{6fOQDTA%~&$iddtdHYvrs>fl zcy{H<3CkS%hI}?QHpMqDJnmU=WN_UH>+PJ80FrN4-}G5*Y&HUA$}dQz7%i+XF6Iz} zxo;?E)nO2Ekmf$VG72Xivw;R1+A>hY1y&La%8*B_(?2hm3lFV_+<)b z80~h2J}HL7j1!5t|?{+uElaSEP=Z3C?S@y6a#e*BElCop6#c zHZ`_FPmR<}VWT};|MZSR^+24!quWctGxe2nF-jK5EYRe>@Ig`Z@<=~Bh4pa(Btk@& zTJ6f$*ZI?*g%wpsbvNB`S66S_bY7|to}eYDtL#rXZ~{!5Fwp`nyXH z>Z3en9f?*3?5+#jf+^?``@{BqL)iCMu)s!+{DXex7!dodz}b zATWWkr5o}#ol$(1hi=eC}A0ob%;WR#a6^pe;j6gLE z{rd*Ay>~Iu|1FmPUMv4!_4PlQC^W*d^7+&Ai*DmzgG~!Fi#(gzsW!ylRA0w^P|EYh6`4ispo~-+YIAXLyQ&=jpDe zhfk&9cq;CI6O*jXg*^fPrD{w}%v|vhrK@VH^pQl7+1Iy1DV_SThMr6nA;In#VqO8s za(+`5X5pV7P>L&oR>gb{iZl-X|4FJrbv7^CT&;_%XCJNqi7WiZ5U5@XaKFNb>tdweyL`IZwyh%5-voQ4y72Grd!YZWd06?Xhd-+1L*L zlRM~uy99m57R%x*h%i;_)&VRqX}(?->;LzJR;Qh@6C;iYM=A@m9DOEz5Dsl zNxE`md1goJ2Drz*|L>Ywp_m_@^%(UJkXy-*9G*8V;tZY_+3dQp2Oxo?|&hx78)dtiOy#mW$=`7k{ihE|t4lV#d$3urPS$yzoL$?>NVDojCh1 zreOUD_T|-MN-AwGot>I6l+O8yI$tY|rXoEZj<=Y|wY9zJFcD<)*90(>`G^u?c!oHO}f+jQ{%*{A;}9r-V<{lA;E^PwbZ++Rm4vYQ-l ztruCDC7b_oCYXyRq~b6?Y-ctthZEs6p)&_Z@d}T+Mw9xAIM(Y#SxrUaQbKH-hQabP_~0oh@EsdGHx%oBs=Vbid#J~I zu*EchY}m5RG;KptfI0gD1L%mtLy<4w{H~MR=}~Dc^6As3^klSGlsM?*pjMrfl(c(v zG(0Tqe0fEMrM*2BFzxX*&coT!kzXr|hayN7Q~voO-}1@|Jw>oZiILz7-{#@4_fTxW zKM^v_z~&bf(WE~h2L#2$NB}j~sY)kgE49sqCzUH%R< zUpG<=fuNOvxm%VPjs6(9W6aah(V;emeDo;&?=&UCt6ic4RwwIN#l*ynjEn?-2t>35 z=I7tE3N?KAF!D(5D!n22@F879%L6^VvKhB0Pe@)ap>zVDt|dVOD6|W9`&12w0xTXs zhBbb$Xk|EEV_(ZCDWR9k(2Tg3=`5LA<*}DUbp8JRiGM(LU8WhZqL$wQ%ZjoPIgtN5 z^^kW7X3&~1HYV#d>m#9gQ}Ieno6Fj=*!=IjI3i$n3v7NJ+4D71{TAb^foH)3&y=AH zsDBWSGR^!Of-s&!=_*O#L%yrA?IBB^o73`E=Ys0{ptk?p^72g}t8hg>l}J^)PXEsg zc)Wy>1}_2q0|V(0%ve?HOuXi`v0q8^4+{o(ewN(Oum}i{ovU&LQ#F?= zV@*}yXNBnUAEbXCBk=J!4AC3Wo9T&4nLV}d{{dwCl&g-l;v=f`Z{L6?$0C!FZkg1V zMHPSFY}!31iu5YK^f!p9y8$HLlRD{;OBR_f6c!aN43H&m@KF6Da9wE6zlhipgnbRF z|CfRJrikOu+wSA((0D&a5qxG%uma-gD;F3A>JKx@>E5hy2hoX8r3t5t6U3b+l{`H? zM-=5M&~ysAkAe8uWO1i&D|?o9cH~x*CAX2Oe%Pb)oXu1lK@UjBlT6$^J*`0K8SrEB zuw$R0)M18O{wB#pi=gi?GET`4_P+6B(9TM5vvZ%hSI z>ZsLLX@0UlUs5c4log z&6_`Gz6~03a8yWu_mvUf3LUx0j@`vdFM}fix|hRyst&MI=poFr* zec|Z970JQ)-Fs95AyG#&&dm378R*2kH5jcpgPLZ(?Q4Qf^Wp8g;`$5o5zI=E(>keZ zkFIt_FbTY`g%Arc;jr%J0BUHZ#VG)vOdXTAF)ur_2m0(7?+1))^9~QG3x=$?Ce^`^>uYJa~|fB__ytss9N0CM#{)iQ&U@Ohs^zNW2~H{dgJhA z0nE&2Zgj|_J`6c_iZ-_|Od%Kh4YNH$t$QyYwc8MOFLQBe2?m(fx}67{*H<6S?X3)9 zG8-qsl*;SUtgT@T+zP0w3rcdm=3S{l< zA%GV#NUuu*cv+A;=}IQ>Yh*B;Lf+_w@d_ik;Yf{ym}}3 z{Qdo(OmNH4+23J3J~@G=owuStA+-a5^78VmpM1H`y`P@HcI_JQ=Asg7k4KhD)tIY* z?@AFI5d0eUbZq8Iq?I5B&p9vupM}!q_wjcCAP)r9l;rjQO*Nz9GkSOy78ZKNb9m^k z;x!^6QSkSdQAnq|#YlP2F~)vej+f5C!J&9;jhT&2^zyl#@&^k{OhOV8Re2Pu7zy1j zOd=mGz*QjoV}7WKn-zL-u?>e*nYo5*$g?^k0DjuW6hx3<@)tNb4|svw-?_{9U1z=p zM@IP|k?>z=1g%!z1J(JS9gA&orN zXT;+!OE3wTcaGeCU%0Y1UhS&v`9zU6?P&29bW{+=icwA|hGypdSGBVRJiV1uZit=L)uoc;UYlNcgrs?(7ox>s*w7 zM~xYZ*uiyiWBP_{MR${OX1-y~+q;rgNY25sKc58c(Fw<0R?VwDS^uimRr%t6P70yo znoLGDSBXObSG1=m2D{&kTjA{YXb6W=oE4KD5>uAfYKPU$6>%+~N^`iUOOi#_{ZYoZ zxV$`Q5F8xLpj1q!vn)y68sFG)x{KO=EOO~VPAd{D5+~fgeVa>aNubGzCS6lh+-Tan zn0Kpcj-_)Pk2I}GIV7^6;lLl+eB)*~u4ZDd(-F@U-y_7Y}~9?4rszA2;R zAJaIl&QlmsKQO8Iq3Cq_vUdWhRe?lc;-boI+0&@&TmIQ%w+5DoGwv9Fgq8b$N zSpX2mUu7ps0g2OdLkur4t)FVS3$B0ao$PTu_xi3M@S6tSKpq}_<8^Mdk@K}Q3n9if z_bKBypL+%eD<;3Z$K9c9G<~_qP0(XKbH)9dnQe&(c08`%B$oS%Bm2?8G+24-cq8Rn|u$Pr4_`#Er)YAR>$T4CRu6{qoYX>oD@3 z*=}6MSKWo&nt_K7HCPnZg*amaii?X;)0%?M0d{FGx&SP^$L`{m7hB_pv=`g`YJd8U z?7V8V#T7||++yQG-~!Gc6!!Qs&mo4gv1*v$xM(E}3KcQ@P^e%ai1 zWZNl~<0jk9YXozky-1$+1dM=?zE-+=w@C#K%k}J88~s9AP*4E8sVLHOr{L)D{>YXU zLW?RTrF$cN{5fSt@6*({vSBzL*rw(5ZwNfT*Fc`e7tx`-7T(vxci#V*EVsyuqbZkK z<>`BJycz%)Z;9@Nr5VBr-qXvP-bq>`0UR=ZD5YU&ly8OxmW+IU9o56E+s(k+AN;^4 z=zz`2%Bqo%%r;QnLNe_f^i#1}VqDld=O+{z^Xv0ucJc;EzH-B9$Uvy%3eFVO8=_rL zco9VVW-+`Ev*EqO?HPAvr2}#%$zBxDFMa`Ra>er%WRG)Y-Pugak?#{V4LBhJAZ(3W zj4uV)^7+RKEyKTP=M9i?2>4kaid)`xE7my#*%fH7;7eqEiq=6U zc{bs_o`f0-qCu6+rE8s%Nf(g!*{BC}^V2L>`|@mF>pf4HYR?a_K7P46pk2SRQkgrt zxzlL$R^8ma*@l?h2+o<{1Y|!%2t(?7m>eqAL5|iWyjWAYvD@(7ZRi!m0U{K=(yx3o zF6uN*H&J7{L|=As-eIQOvhh=sJ^Z_rYKDe} zt{#oBWH?FgK|(UGAxU{pYIet#iBu`R<=Z%QuA##GY9R63DHY*ga2rdhbv@;#Gg#hl zGuS2J*K)QZO&FLryc6ti#rB@I{5~N(nh(AI_01*OhJE|#$~js3tF(TnqafxX88Jgb{jL7R d(|2m~XE4sr!_8n9oqPcLs43r9DpIfr{2!e|Kmz~( delta 6857 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 From bae1aa915da81fc48a511b388a7b406e63c812fe Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Sun, 8 May 2016 22:34:50 +1000 Subject: [PATCH 08/13] meant to comment this before shuttles pr was merged and cbb to make a pr, mulebeep1.ogg is unused and not sure why it was added --- code/modules/admin/verbs/shuttles.dm | 8 +++----- sound/effects/mulebeep1.ogg | Bin 77575 -> 0 bytes 2 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 sound/effects/mulebeep1.ogg diff --git a/code/modules/admin/verbs/shuttles.dm b/code/modules/admin/verbs/shuttles.dm index 50f262dcb5f..2dc8e5820ee 100644 --- a/code/modules/admin/verbs/shuttles.dm +++ b/code/modules/admin/verbs/shuttles.dm @@ -51,7 +51,7 @@ src << "Something went wrong, the selected shuttle doesn't exist anymore." return - log_admin("[key_name_admin(usr)] - ShuttleDestroy: [M]") + log_admin("[key_name(usr)] - ShuttleDestroy: [M]") message_admins("[key_name_admin(usr)] has used ShuttleDestroy on [selected]
") feedback_add_details("admin_verb","SHTDEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -109,10 +109,8 @@ var/status = M.dockRoundstart() if(status) - log_admin("The imported shuttle [map]/[M] failed to travel to its roundstart \ - location (error code [status]). Please fix or delete the imported shuttle \ - before continuing any more shuttle import hijinks.") + message_admins("The imported shuttle [map]/[M] failed to travel to its roundstart location (error code [status]). Please fix or delete the imported shuttle before continuing any more shuttle import hijinks.") - log_admin("[key_name_admin(usr)] - ShuttleImport: [map] - [M]") + log_admin("[key_name(usr)] - ShuttleImport: [map] - [M]") message_admins("[key_name_admin(usr)] has used ShuttleImport: [map] - [M]
") feedback_add_details("admin_verb","SHTIMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/sound/effects/mulebeep1.ogg b/sound/effects/mulebeep1.ogg deleted file mode 100644 index a35e336f99e81f4daf198d982683f9139a15b1c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77575 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�_DR&KFSK>59B*_!h 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 From 035334589ddff393d4bc57811a4298d4af9b5b80 Mon Sep 17 00:00:00 2001 From: coiax Date: Sun, 8 May 2016 14:03:42 +0100 Subject: [PATCH 09/13] Ruin budget system (#17366) * Initial start of lavaland ruin budget system Weights are dumb, we're gonna use BUDGETS! To be clear, each round, there will be a budget for ruins. HERE IS A ROUGH APPROXIMATION OF THE AIMED PROCESS - Pick a ruin - Can we afford it? If not, start again. - Try a bunch of times to place it. - Did we place it? Good, then reduce our budget accordingly Does this look a little like syndicate surplus crates? That's the point. * Subclassery * Budget based ruin loader is GO * Cryostasis (with a s) * Adjusted costs, added no-duplication * No dupes on the major ruins * Deleted files, budget is config * Corrected description * Fixed ruins failing to load, duplication * The zoo goldgrub will no longer burrow away * Space descriptions and names * No more weird Xenonest loops, should be all good * Adjusted costs based on feedback --- _maps/RandomRuins/LavaRuins/_maplisting.txt | 34 ---- _maps/RandomRuins/SpaceRuins/_maplisting.txt | 26 --- _maps/RandomRuins/SpaceRuins/abandonedzoo.dmm | 2 +- code/_globalvars/lists/mapping.dm | 2 + code/controllers/configuration.dm | 6 +- code/controllers/master.dm | 3 +- code/datums/helper_datums/map_template.dm | 31 ++- code/datums/ruins.dm | 22 +++ code/datums/ruins/lavaland.dm | 176 ++++++++++++++++++ code/datums/ruins/space.dm | 157 ++++++++++++++++ code/modules/awaymissions/zlevel.dm | 82 +++----- .../simple_animal/hostile/mining_mobs.dm | 6 +- config/game_options.txt | 11 +- tgstation.dme | 3 + 14 files changed, 430 insertions(+), 131 deletions(-) delete mode 100644 _maps/RandomRuins/LavaRuins/_maplisting.txt delete mode 100644 _maps/RandomRuins/SpaceRuins/_maplisting.txt create mode 100644 code/datums/ruins.dm create mode 100644 code/datums/ruins/lavaland.dm create mode 100644 code/datums/ruins/space.dm diff --git a/_maps/RandomRuins/LavaRuins/_maplisting.txt b/_maps/RandomRuins/LavaRuins/_maplisting.txt deleted file mode 100644 index 175537f9008..00000000000 --- a/_maps/RandomRuins/LavaRuins/_maplisting.txt +++ /dev/null @@ -1,34 +0,0 @@ -#List ALL lava ruins here. This file is for small things that would appear in lavaland, like a downed ship or hidden room. -#Maps must be the full path to them. Any map you make but forget to list here may as well not exist as far as the game is concerned. -#Blacklisting ruins takes place at conflig/lavaRuinBlacklist.txt, don't remove anything here unless you're removing the map entirely - -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -##BIODOMES -_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm -_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm -_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm - -##RESPAWN -_maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm - -##SIN -_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm - -##MISC -_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm -_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm -_maps/RandomRuins/LavaRuins/lavaland_fountain_hall.dmm -_maps/RandomRuins/LavaRuins/lavaland_gym.dmm \ No newline at end of file diff --git a/_maps/RandomRuins/SpaceRuins/_maplisting.txt b/_maps/RandomRuins/SpaceRuins/_maplisting.txt deleted file mode 100644 index 72681d304a3..00000000000 --- a/_maps/RandomRuins/SpaceRuins/_maplisting.txt +++ /dev/null @@ -1,26 +0,0 @@ -#List ALL space ruins here. This file is for small things that would appear in space, like an asteroid or broken escape pod. -#Maps must be the full path to them. Any map you make but forget to list here may as well not exist as far as the game is concerned. -#Blacklisting ruins takes place in the config folder file spaceRuinBlacklist.txt, don't remove anything here unless you're removing the map entirely - -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -_maps/RandomRuins/SpaceRuins/way_home.dmm -_maps/RandomRuins/SpaceRuins/asteroid1.dmm -_maps/RandomRuins/SpaceRuins/asteroid2.dmm -_maps/RandomRuins/SpaceRuins/asteroid3.dmm -_maps/RandomRuins/SpaceRuins/asteroid4.dmm -_maps/RandomRuins/SpaceRuins/asteroid5.dmm -_maps/RandomRuins/SpaceRuins/derelict1.dmm -_maps/RandomRuins/SpaceRuins/derelict2.dmm -_maps/RandomRuins/SpaceRuins/derelict3.dmm -_maps/RandomRuins/SpaceRuins/derelict4.dmm -_maps/RandomRuins/SpaceRuins/derelict5.dmm -_maps/RandomRuins/SpaceRuins/spacebar.dmm -_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm -_maps/RandomRuins/SpaceRuins/deepstorage.dmm -_maps/RandomRuins/SpaceRuins/emptyshell.dmm -_maps/RandomRuins/SpaceRuins/gasthelizards.dmm -_maps/RandomRuins/SpaceRuins/intactemptyship.dmm -_maps/RandomRuins/SpaceRuins/mechtransport.dmm -_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm -_maps/RandomRuins/SpaceRuins/onehalf.dmm \ No newline at end of file diff --git a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm index 8991d416385..57039bae9d3 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -13,7 +13,7 @@ "am" = (/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/mob/living/simple_animal/hostile/poison/bees,/turf/open/floor/grass,/area/ruin/unpowered) "an" = (/mob/living/simple_animal/hostile/poison/bees,/turf/open/floor/grass,/area/ruin/unpowered) "ao" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/open/floor/grass,/area/ruin/unpowered) -"ap" = (/mob/living/simple_animal/hostile/asteroid/goldgrub,/turf/open/floor/plating/asteroid,/area/ruin/unpowered) +"ap" = (/mob/living/simple_animal/hostile/asteroid/goldgrub{will_burrow = 0},/turf/open/floor/plating/asteroid,/area/ruin/unpowered) "aq" = (/obj/structure/flora/ausbushes/grassybush,/turf/open/floor/grass,/area/ruin/unpowered) "ar" = (/obj/structure/flora/rock/pile,/turf/open/floor/plating/asteroid,/area/ruin/unpowered) "as" = (/mob/living/simple_animal/hostile/asteroid/basilisk,/turf/open/floor/plating/asteroid,/area/ruin/unpowered) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 0d8be652a22..b88a9362eb4 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -56,6 +56,8 @@ var/list/sortedAreas = list() //List of preloaded templates var/list/datum/map_template/map_templates = list() + +var/list/datum/map_template/ruins_templates = list() var/list/datum/map_template/space_ruins_templates = list() var/list/datum/map_template/lava_ruins_templates = list() diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 067730d32bf..93dd4a0555a 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -173,6 +173,8 @@ var/generate_minimaps = 0 var/grey_assistants = 0 + var/lavaland_budget = 60 + var/aggressive_changelog = 0 var/reactionary_explosions = 0 //If we use reactionary explosions, explosions that react to walls and doors @@ -584,6 +586,8 @@ config.starlight = 1 if("grey_assistants") config.grey_assistants = 1 + if("lavaland_budget") + config.lavaland_budget = text2num(value) if("no_summon_guns") config.no_summon_guns = 1 if("no_summon_magic") @@ -751,4 +755,4 @@ if(!statclick) statclick = new/obj/effect/statclick/debug("Edit", src) - stat("[name]:", statclick) \ No newline at end of file + stat("[name]:", statclick) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index d48be2c82c4..a01c867c134 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -85,7 +85,8 @@ var/global/datum/controller/master/Master = new() var/mining_type = MINETYPE if(mining_type == "lavaland") - seedRuins(5, 5, /area/lavaland/surface/outdoors, lava_ruins_templates) + seedRuins(5, config.lavaland_budget, \ + /area/lavaland/surface/outdoors, lava_ruins_templates) spawn_rivers() else make_mining_asteroid_secrets() diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index bedb903a1b4..a545622036a 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -89,17 +89,28 @@ preloadShuttleTemplates() /proc/preloadRuinTemplates() - var/list/potentialSpaceRuins = generateMapList(filename = "_maps/RandomRuins/SpaceRuins/_maplisting.txt", blacklist = "config/spaceRuinBlacklist.txt") - for(var/ruin in potentialSpaceRuins) - var/datum/map_template/T = new(path = "[ruin]", rename = "[ruin]") - space_ruins_templates[T.name] = T - map_templates[T.name] = T + // Still supporting bans by filename + var/list/banned = generateMapList("config/lavaRuinBlacklist.txt") + banned += generateMapList("config/spaceRuinBlacklist.txt") + + for(var/item in subtypesof(/datum/map_template/ruin)) + var/datum/map_template/ruin/ruin_type = item + // screen out the abstract subtypes + if(!initial(ruin_type.id)) + continue + var/datum/map_template/ruin/R = new ruin_type() + + if(banned.Find(R.mappath)) + continue + + map_templates[R.name] = R + ruins_templates[R.name] = R + + if(istype(R, /datum/map_template/ruin/lavaland)) + lava_ruins_templates[R.name] = R + else if(istype(R, /datum/map_template/ruin/space)) + space_ruins_templates[R.name] = R - var/list/potentialLavaRuins = generateMapList(filename = "_maps/RandomRuins/LavaRuins/_maplisting.txt", blacklist = "config/lavaRuinBlacklist.txt") - for(var/ruin in potentialLavaRuins) - var/datum/map_template/T = new(path = "[ruin]", rename = "[ruin]") - lava_ruins_templates[T.name] = T - map_templates[T.name] = T /proc/preloadShuttleTemplates() for(var/item in subtypesof(/datum/map_template/shuttle)) diff --git a/code/datums/ruins.dm b/code/datums/ruins.dm new file mode 100644 index 00000000000..d9c2ca348d5 --- /dev/null +++ b/code/datums/ruins.dm @@ -0,0 +1,22 @@ +/datum/map_template/ruin + //name = "A Chest of Doubloons" + name = null + var/id = null // For blacklisting purposes, all ruins need an id + var/description = "In the middle of a clearing in the rockface, there's a \ + chest filled with gold coins with Spanish engravings. How is there a \ + wooden container filled with 18th century coinage in the middle of a \ + lavawracked hellscape? It is clearly a mystery." + + var/cost = null + var/allow_duplicates = TRUE + + var/prefix = null + var/suffix = null + +/datum/map_template/ruin/New() + if(!name && id) + name = id + + mappath = prefix + suffix + ..(path = mappath) + diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm new file mode 100644 index 00000000000..9409e9b3b6f --- /dev/null +++ b/code/datums/ruins/lavaland.dm @@ -0,0 +1,176 @@ +/datum/map_template/ruin/lavaland + prefix = "_maps/RandomRuins/LavaRuins/" + +/datum/map_template/ruin/lavaland/biodome + cost = 5 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/biodome/beach + name = "Biodome Beach" + id = "biodome-beach" + description = "Seemingly plucked from a tropical destination, this beach \ + is calm and cool, with the salty waves roaring softly in the \ + background. Comes with a rustic wooden bar and suicidal bartender." + suffix = "lavaland_biodome_beach.dmm" + +/datum/map_template/ruin/lavaland/biodome/winter + name = "Biodome Winter" + id = "biodome-winter" + description = "For those getaways where you want to get back to nature, \ + but you don't want to leave the fortified military compound where you \ + spend your days. Includes a unique(*) laser pistol display case, \ + and the recently introduced I.C.E(tm)." + suffix = "lavaland_surface_biodome_winter.dmm" + +/datum/map_template/ruin/lavaland/biodome/clown + name = "Biodome Clown Planet" + id = "biodome-clown" + description = "WELCOME TO CLOWN PLANET! HONK HONK HONK etc.!" + suffix = "lavaland_biodome_clown_planet.dmm" + +/datum/map_template/ruin/lavaland/cube + name = "The Wishgranter Cube" + id = "wishgranter-cube" + description = "Nothing good can come from this. Learn from their mistakes \ + and turn around." + suffix = "lavaland_surface_cube.dmm" + cost = 10 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/prisoners + name = "Prisoner Crash" + id = "prisoner-crash" + description = "This incredibly high security shuttle clearly didn't have \ + 'avoiding lavafilled hellscapes' as a design priority. As such, it \ + has crashed, waking the prisoners from their cryostasis, and setting \ + them loose on the wastes. If they live long enough, that is." + suffix = "lavaland_surface_prisoner_crash.dmm" + cost = 15 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/seed_vault + name = "Seed Vault" + id = "seed-vault" + description = "The creators of these vaults were a highly advanced and \ + benevolent race, and launched many into the stars, hoping to aid \ + fledgling civilizations. However, all the inhabitants seem to do is \ + grow drugs and guns." + suffix = "lavaland_surface_seed_vault.dmm" + cost = 10 + +/datum/map_template/ruin/lavaland/ash_walker + name = "Ash Walker Nest" + id = "ash-walker" + description = "A race of unbreathing lizards live here, that run faster \ + than a human can, worship a broken dead city, and are capable of \ + reproducing by something involving tentacles? Probably best to \ + stay clear." + suffix = "lavaland_surface_ash_walker1.dmm" + cost = 20 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/free_golem + name = "Free Golem Ship" + id = "golem-ship" + description = "Lumbering humanoids, made out of precious metals, move \ + inside this ship. They frequently leave to mine more minerals, \ + which they somehow turn into more of them. Seem very intent on \ + research and individual liberty, and also geology based naming?" + cost = 20 + suffix = "lavaland_surface_golem_ship.dmm" + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/animal_hospital + name = "Animal Hospital" + id = "animal-hospital" + description = "Rats with cancer do not live very long. And the ones that \ + wake up from cryostasis seem to commit suicide out of boredom." + cost = 5 + suffix = "lavaland_surface_animal_hospital.dmm" + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/sin + cost = 10 + +/datum/map_template/ruin/lavaland/sin/envy + name = "Ruin of Envy" + id = "envy" + description = "When you get what they have, then you'll finally be happy." + suffix = "lavaland_surface_envy.dmm" + +/datum/map_template/ruin/lavaland/sin/gluttony + name = "Ruin of Gluttony" + id = "gluttony" + description = "If you eat enough, then eating will be all that you do." + suffix = "lavaland_surface_gluttony.dmm" + +/datum/map_template/ruin/lavaland/sin/greed + name = "Ruin of Greed" + id = "greed" + description = "Sure you don't need magical powers, but you WANT them, and \ + that's what's important." + suffix = "lavaland_surface_greed.dmm" + +/datum/map_template/ruin/lavaland/sin/pride + name = "Ruin of Pride" + id = "pride" + description = "Wormhole lifebelts are for LOSERS, who you are better than." + suffix = "lavaland_surface_pride.dmm" + +/datum/map_template/ruin/lavaland/sin/sloth + name = "Ruin of Sloth" + id = "sloth" + description = "..." + suffix = "lavaland_surface_sloth.dmm" + // Generates nothing but atmos runtimes and salt + cost = 0 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/ato + name = "Automated Trade Outpost" + id = "ato" + description = "A sign at the front says 'Stealing is bad.'" + suffix = "lavaland_surface_automated_trade_outpost.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/ufo_crash + name = "UFO Crash" + id = "ufo-crash" + description = "Turns out that keeping your abductees unconcious is really \ + important. Who knew?" + suffix = "lavaland_surface_ufo_crash.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/ww_vault + name = "Wishgranter Vault" + id = "ww-vault" + description = "Scrawled on the large double doors is both a message and a \ + warning: 'meat grinder requires sacri...'. You're not so sure about \ + this anymore." + suffix = "lavaland_surface_ww_vault.dmm" + cost = 20 + +/datum/map_template/ruin/lavaland/xeno_nest + name = "Xenomorph Nest" + id = "xeno-nest" + description = "These xenomorphs got bored of horrifically slaughtering \ + people on space stations, and have settled down on a nice lava filled \ + hellscape to focus on what's really important in life. Quality memes." + suffix = "lavaland_surface_xeno_nest.dmm" + cost = 20 + +/datum/map_template/ruin/lavaland/fountain + name = "Fountain Hall" + id = "fountain" + description = "The fountain has a warning on the side. DANGER: May have \ + undeclared side effects that only become obvious when implemented." + suffix = "lavaland_fountain_hall.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/zombie_gym + name = "Zombie Gym" + id = "zombie-gym" + description = "The patrons at this gym are serious about health, and \ + making sure people work on their cardio." + suffix = "lavaland_gym.dmm" + cost = 10 diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm new file mode 100644 index 00000000000..de83a4bedb4 --- /dev/null +++ b/code/datums/ruins/space.dm @@ -0,0 +1,157 @@ +/datum/map_template/ruin/space + prefix = "_maps/RandomRuins/SpaceRuins/" + cost = 1 + +/datum/map_template/ruin/space/zoo + id = "zoo" + suffix = "abandonedzoo.dmm" + name = "Biological Storage Facility" + description = "In case society crumbles, we will be able to restore our \ + zoos to working order with the breeding stock kept in these 100% \ + secure and unbreachable storage facilities. At no point has anything \ + escaped. That's our story, and we're sticking to it." + +/datum/map_template/ruin/space/asteroid1 + id = "asteroid1" + suffix = "asteroid1.dmm" + name = "Asteroid 1" + description = "I-spy with my little eye, something beginning with R." + +/datum/map_template/ruin/space/asteroid2 + id = "asteroid2" + suffix = "asteroid2.dmm" + name = "Asteroid 2" + description = "Oh my god, a giant rock!" + +/datum/map_template/ruin/space/asteroid3 + id = "asteroid3" + suffix = "asteroid3.dmm" + name = "Asteroid 3" + description = "This asteroid floating in space has no official \ + designation, because the scientist that discovered it deemed it \ + 'super dull'." + +/datum/map_template/ruin/space/asteroid4 + id = "asteroid4" + suffix = "asteroid4.dmm" + name = "Asteroid 4" + description = "Nanotrasen Escape Pods have a 100%* success rate, and a \ + 99%* customer satisfaction rate. *Please note that these statistics, \ + are taken from pods that have successfully docked with a recovery \ + vessel." + +/datum/map_template/ruin/space/asteroid5 + id = "asteroid5" + suffix = "asteroid5.dmm" + name = "Asteroid 5" + description = "Oh my god, another giant rock!" + +/datum/map_template/ruin/space/deep_storage + id = "deep-storage" + suffix = "deepstorage.dmm" + name = "Survivalist Bunker" + description = "Assume the best, prepare for the worst. Generally, you \ + should do so by digging a three man heavily fortified bunker into \ + a giant unused asteroid. Then make it self sufficient, mask any \ + evidence of construction, hook it covertly into the \ + telecommunications network and hope for the best." + +/datum/map_template/ruin/space/derelict1 + id = "derelict1" + suffix = "derelict1.dmm" + name = "Derelict 1" + description = "Nothing to see here citizen, move along, certainly no \ + xeno outbreaks on this piece of station debris. That purple stuff? \ + It's uh... station nectar. It's a top secret research installation." + +/datum/map_template/ruin/space/derelict2 + id = "derelict2" + suffix = "derelict2.dmm" + name = "Dinner for Two" + description = "Oh this is the night\n\ + It's a beautiful night\n\ + And we call it bella notte" + +/datum/map_template/ruin/space/derelict3 + id = "derelict3" + suffix = "derelict3.dmm" + name = "Derelict 3" + description = "These hulks were once part of a larger structure, where \ + the three great \[REDACTED\] were forged." + +/datum/map_template/ruin/space/derelict4 + id = "derelict4" + suffix = "derelict4.dmm" + name = "Derelict 4" + description = "Centcom ferries have never crashed, will never crash, \ + there is no current investigation into a crashed ferry, and we \ + will not let Internal Affairs trample over high security information \ + in the name of this baseless witchhunt." + +/datum/map_template/ruin/space/derelict5 + id = "derelict5" + suffix = "derelict5.dmm" + name = "Derelict 5" + description = "The plan is, we put a whole bunch of crates full of \ + treasure in this disused warehouse, launch it into space, and then \ + ignore it. Forever." + +/datum/map_template/ruin/space/empty_shell + id = "empty-shell" + suffix = "emptyshell.dmm" + name = "Empty Shell" + description = "Cosy, rural property availible for young professional \ + couple. Only twelve parsecs from the nearest hyperspace lane!" + +/datum/map_template/ruin/space/gas_the_lizards + id = "gas-the-lizards" + suffix = "gasthelizards.dmm" + name = "Disposal Facility 17" + description = "Gas efficiency at 95.6%, fluid elimination at 96.2%. \ + Will require renewed supplies of 'carpet' before the end of the \ + quarter." + +/datum/map_template/ruin/space/intact_empty_ship + id = "intact-empty-ship" + suffix = "intactemptyship.dmm" + name = "Authorship" + description = "Just somewhere quiet, where I can focus on my work with \ + no interruptions." + +/datum/map_template/ruin/space/mech_transport + id = "mech-transport" + suffix = "mechtransport.dmm" + name = "CF Corsair" + description = "Well, when is it getting here? I have bills to pay; very \ + well-armed clients who want their shipments as soon as possible! I \ + don't care, just find it!" + +/datum/map_template/ruin/space/onehalf + id = "onehalf" + suffix = "onehalf.dmm" + name = "DK Excavator 453" + description = "Based on the trace elements we've detected on the \ + gutted asteroids, we suspect that a mining ship using a restricted \ + engine is somewhere in the area. We'd like to request a patrol vessel \ + to investigate." + +/datum/map_template/ruin/space/spacebar + id = "spacebar" + suffix = "spacebar.dmm" + name = "The Rampant Golem and Yellow Hound" + description = "No questions asked. No shoes/foot protection, no service. \ + No tabs. No violence in the inside areas. That's it. Welcome to the \ + Rampant Golem and Yellow Hound. Can I take your order?" + +/datum/map_template/ruin/space/turreted_outpost + id = "turreted-outpost" + suffix = "turretedoutpost.dmm" + name = "Unnamed Turreted Outpost" + description = "We'd ask them to stop blaring that ruskiepop music, but \ + none of us are brave enough to go near those death turrets they have." + +/datum/map_template/ruin/space/way_home + id = "way-home" + suffix = "way_home.dmm" + name = "Salvation" + description = "In the darkest times, we will find our way home." diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 17d563703d5..bbb573909b2 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -29,40 +29,12 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away return -/proc/generateMapList(filename, blacklist) +/proc/generateMapList(filename) var/list/potentialMaps = list() - var/list/blacklistedMaps = list() var/list/Lines = file2list(filename) if(!Lines.len) return - - if(blacklist) - var/list/Blines = file2list(blacklist) - for (var/t in Blines) - if (!t) - continue - - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - - if (pos) - name = lowertext(copytext(t, 1, pos)) - - else - name = lowertext(t) - - if (!name) - continue - - blacklistedMaps.Add(t) - for (var/t in Lines) if (!t) continue @@ -87,40 +59,44 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away potentialMaps.Add(t) + return potentialMaps - return (potentialMaps - blacklistedMaps) +/proc/seedRuins(z_level = 1, budget = 0, whitelist = /area/space, list/potentialRuins = space_ruins_templates) + var/overall_sanity = 100 + var/ruins = potentialRuins.Copy() -/proc/seedRuins(z_level = 1, ruin_number = 0, whitelist = /area/space, list/potentialRuins = space_ruins_templates) - ruin_number = min(ruin_number, potentialRuins.len) - - while(ruin_number) - var/sanity = 0 - var/valid = FALSE - var/datum/map_template/template = potentialRuins[pick(potentialRuins)] - while(!valid) - valid = TRUE - sanity++ - if(sanity > 100) - ruin_number-- - break + while(budget > 0 && overall_sanity > 0) + // Pick a ruin + var/datum/map_template/ruin/ruin = ruins[pick(ruins)] + // Can we afford it + if(ruin.cost > budget) + overall_sanity-- + continue + // If so, try to place it + var/sanity = 100 + // And if we can't fit it anywhere, give up, try again + while(sanity > 0) + sanity-- var/turf/T = locate(rand(25, world.maxx - 25), rand(25, world.maxy - 25), z_level) - for(var/turf/check in template.get_affected_turfs(T,1)) + for(var/turf/check in ruin.get_affected_turfs(T,1)) var/area/new_area = get_area(check) if(!(istype(new_area, whitelist))) - valid = FALSE - break + continue - if(valid) - world.log << "Ruin \"[template.mappath]\" placed at ([T.x], [T.y], [T.z])" - var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) - R.Load(potentialRuins,template) - potentialRuins -= template - ruin_number -- + world.log << "Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])" - return + var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) + R.Load(ruins,ruin) + budget -= ruin.cost + if(!ruin.allow_duplicates) + ruins -= ruin.name + break + + if(!overall_sanity) + world.log << "Ruin loader gave up with [budget] left to spend." /obj/effect/ruin_loader name = "random ruin" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index d66f5fe2aae..6ea3114ffed 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -132,6 +132,7 @@ /obj/item/weapon/ore/uranium) var/chase_time = 100 + var/will_burrow = TRUE /mob/living/simple_animal/hostile/asteroid/goldgrub/New() ..() @@ -151,8 +152,9 @@ visible_message("The [src.name] tries to flee from [target.name]!") retreat_distance = 10 minimum_distance = 10 - spawn(chase_time) - Burrow() + if(will_burrow) + spawn(chase_time) + Burrow() /mob/living/simple_animal/hostile/asteroid/goldgrub/AttackingTarget() if(istype(target, /obj/item/weapon/ore)) diff --git a/config/game_options.txt b/config/game_options.txt index 767aff019fc..914a64e3bcf 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -40,7 +40,7 @@ EMOJIS ## These values get directly added to values and totals ingame. ## To speed things up make the number negative, to slow things down, make the number positive. -## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. +## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. RUN_DELAY 1 WALK_DELAY 4 @@ -186,7 +186,7 @@ ALLOW_RANDOM_EVENTS ## Set to 0 to make dangerous events avaliable from round start. EVENTS_MIN_TIME_MUL 1 -## Multiplier for minimal player count (players = alive non-AFK humans) for dangerous events to start. +## Multiplier for minimal player count (players = alive non-AFK humans) for dangerous events to start. ## Set to 0 to make dangerous events avaliable for all populations. EVENTS_MIN_PLAYERS_MUL 1 @@ -347,4 +347,9 @@ BOMBCAP 20 #BOMBCAP 28 - +## Lavaland "Budget" +# Lavaland ruin spawning has an imaginary budget to spend on ruins, where +# a less lootfilled or smaller or less round effecting ruin costs less to +# spawn, while the converse is true. Alter this number to affect the amount +# of ruins. +LAVALAND_BUDGET 60 diff --git a/tgstation.dme b/tgstation.dme index 50fa5be7eb0..9473432efad 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -162,6 +162,7 @@ #include "code\datums\outfit.dm" #include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" +#include "code\datums\ruins.dm" #include "code\datums\shuttles.dm" #include "code\datums\votablemap.dm" #include "code\datums\diseases\_disease.dm" @@ -225,6 +226,8 @@ #include "code\datums\helper_datums\topic_input.dm" #include "code\datums\martial\krav_maga.dm" #include "code\datums\martial\wrestling.dm" +#include "code\datums\ruins\lavaland.dm" +#include "code\datums\ruins\space.dm" #include "code\datums\wires\airalarm.dm" #include "code\datums\wires\airlock.dm" #include "code\datums\wires\apc.dm" From 5e95c7f78a2a50e0e1a4eee4ce528525bdb37001 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 8 May 2016 14:11:06 +0100 Subject: [PATCH 10/13] Fixes bug where ruin area check always passed --- code/modules/awaymissions/zlevel.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index bbb573909b2..7b655fbdeb8 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -80,11 +80,16 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away while(sanity > 0) sanity-- var/turf/T = locate(rand(25, world.maxx - 25), rand(25, world.maxy - 25), z_level) + var/valid = TRUE for(var/turf/check in ruin.get_affected_turfs(T,1)) var/area/new_area = get_area(check) if(!(istype(new_area, whitelist))) - continue + valid = FALSE + break + + if(!valid) + continue world.log << "Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])" From 236e7f6baa2817db0969406925cb7c0bdec8e9c7 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 8 May 2016 13:21:30 +0000 Subject: [PATCH 11/13] Automatic changelog generation for PR #17478 --- html/changelogs/AutoChangeLog-pr-17478.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17478.yml diff --git a/html/changelogs/AutoChangeLog-pr-17478.yml b/html/changelogs/AutoChangeLog-pr-17478.yml new file mode 100644 index 00000000000..f726ae25df5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17478.yml @@ -0,0 +1,4 @@ +author: coiax +delete-after: True +changes: + - tweak: "Lavaland ruins spawning chances have been modified. Expect to see more smaller and less round affecting ruins, and no duplicates of major ruins, like ash walkers or golems." From 24f47b0223bc8656fff6fb3a5fd21d85342dbeed Mon Sep 17 00:00:00 2001 From: lordpidey Date: Sun, 8 May 2016 13:44:27 -0400 Subject: [PATCH 12/13] Devil Antag Round 2. (#15794) * Re-making the branch and PR of demon. See #15118 for the old PR * Adds toy demonologist to arcade machine reward list. * Implemented two suggestions: Pitchfork now has a demonic subtype, to potentially give botanists a normal pitchfork. Suiciding with signed contract now uses forcesay instead of say. * Fixes compile errors. Re factors contracts to be subtypes rather than datums. <--- incomplete, still need to summon them appropriately. * buffed infernal power contract to give passive healing Nerfed magic power contract to not give robeless MM * Fixes compile errors * Corrects orientation of true demon sprite * Begins work on the sNPC for the true demon/ arch-demon * Added funeral garment sprites. These will be used in banishment rituals (hopefully) * Stashing my work so I can move to another computer. Re-working the true-demon, it will be a carbon rather than a simple mob. * Revert "Stashing my work so I can move to another computer." This reverts commit e8b1e032997b7e17af4ad8630bf21d3620195c4e. * Git exploded for me, so I have to make a new branch with EVERYTHING. sorry. * Fixes compile error * Ghosts can now click on an arch demon to become a slaughter demon * Begins to convert demons into a carbon rather than simple mob. * Demons now resurrect if not banished. * Beepsky now properly tells security chat about the level 666 threat. * Contracts now work again. * old spells now get removed properly. * adding pitchfork sprites * Adds hud for the true-demon. Not functional. * Fixes another error in the demon hud. Still broken. * Demons are no longer immortal, demon huds work properly now. (it's barebones, but it works.) * Fixes the "Have mortals sign at least # contracts of TYPE" objective * Fixed typo in banishlore() and updated wrath/envy sintouch objectives. * Adds huds for demons/sintouched/soulless, however they are currently unused. * Updates the demon's hud to work with the recent hud changes. * Cleaned up infernal jaunt, it works a lot better now and is less buggy. * Revival contracts now actually take your soul. * Fixes #16513 * Replaces the infinite slaughter demons with infinite imps. Sprites for imps are still needed. * Adds sprite for imps. It's a redder, smaller slaughter demon. * Fixes lack of icon for pitchforks * Gives summon wealth a more appropriate icon. * Fixes small part I forgot to merge. * Fixes a few bugs with demonic resurrection. It's still very buggy. * Derp, my bad, I didn't mean to admin myself on the main server. * Fixes edge case of demonic resurrection failing. Debraining the demon is NOT supposed to be an alternative for the banishment ritual. * Also did not mean to change this config file. * Fixes another error in type 1 demonic resurrection. It works properly now. * Updates employment contract text. * Fixes type 2 resurrections. Demonic contracts are once again permanently on fire. * Replaces toy demonologist with toy demonomicon. It still works the same, just different icon/name. * Adds demonomicon and employment cabinet to box/meta/dream/efficiency. I could not add it to mini/bird due to conflicts. * Edits ministation and BirdStation to have demonomicons and employment cabinets. * Fixes spelling error * Adds burial garments to maps. * Update photocopier.dm Fixes the span when inserting items into photocopier * Fixes disrupt_spells proc * Makes a lot of changes as reccomended by Remie. * Fixes a compile error. * Updates the lawify/loreify to be lists. Does not compile. * Fixes compile errors. * Arch demons no longer regress upon death. Speaking a demon's truename gives the demon the opportunity to teleport to you. Makes demonomicon not care about capitalization. * Fixes startup error. Demonic summoning now works. It's very simple, just say their true name. * Demons now have a tongue. True demon bodies are deleted upon regression. * Demons can now be punched. Demons can no longer resist a fire out, since it does nothing to them. * true demons show up in player panel. Hellfire works again. * Prepares for commit 16940 * Demons are now known as devils. Still needs testing. * Oops, didn't commit everything last commit. * Finishes converting demons to devils. * Fixes speech for lizards/flymen when they speak a demon's name. * Update tips.txt * Changes variable from static to global as per Remie's suggestion. I disagree with Remie's assessment, as a list that will never change, even between games, seems like it should be static. * Removes devil summoning. Hopefully, I'll be able to eventually find a way to implement it satisfactorily, but for now, I'll leave it out. * Removes carriage returns * Combined modified icon files * Fixes #17184 * Imps no longer show up in the end round report. This is because there can EASILY be 100+ imps if the crew is well armed. Non-employment filing cabinets no longer take 30 sec to wrench/unwrench. * The lawyer can actually buy souls back now. Oops. * Fixes true/arch devil spritesheet to have correct sprite names. * Relocates Box's employment cabinet to Law office. * De-devil-ing someone now removes the devilinfo. De-devil-ing now returns an error when used on true and arch devils * Re-factors whiteness code for jumpsuits. * Merges icons, reverts failed merge of map * Merges map with CAS decks * Fixes copying employment contracts * Derp, fixes compile error. * Replaces antaghud with customizable vision range for knowledge boon. * Prevents a runtime if devil is gibbed while ascending. * Neatens contract code, and removes excess variable from humans. * Fixes compile errors * Organizes weakness code slightly. Adds ability for a species override on weakness. (Make flypeople take 2x damage from flyswatters for example) * Removes sixteen erroneous characters from the codebase. * Removes trailing return * Makes typeless for loops, removes a runtime, and removes unhelpful comments. --- _maps/map_files/BirdStation/BirdStation.dmm | 7 +- .../map_files/DreamStation/dreamstation04.dmm | 10 +- .../EfficiencyStation/EfficiencyStation.dmm | 14 +- .../MetaStation/MetaStation.v41I.dmm | 30 +- _maps/map_files/MiniStation/MiniStation.dmm | 15 +- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 3 +- code/__DEFINES/contracts.dm | 42 + code/__DEFINES/hud.dm | 25 +- code/__DEFINES/role_preferences.dm | 2 + code/__HELPERS/unsorted.dm | 2 + code/_onclick/hud/demon.dm | 75 + code/datums/datacore.dm | 1 + code/datums/hud.dm | 3 + code/datums/mind.dm | 83 +- code/game/area/Space Station 13 areas.dm | 19 + code/game/gamemodes/demon/demon.dm | 40 + code/game/gamemodes/demon/demon_game_mode.dm | 108 + code/game/gamemodes/demon/demoninfo.dm | 413 +++ code/game/gamemodes/demon/imp/imp.dm | 56 + code/game/gamemodes/demon/objectives.dm | 62 + .../gamemodes/demon/true_demon/_true_demon.dm | 195 ++ .../gamemodes/demon/true_demon/inventory.dm | 61 + .../miniantags/sintouched/objectives.dm | 35 + code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/arcade.dm | 2229 +++++++++-------- code/game/machinery/computer/cloning.dm | 2 +- code/game/machinery/dna_scanner.dm | 2 +- code/game/objects/items/toys.dm | 24 + code/game/objects/items/weapons/defib.dm | 4 +- code/game/objects/items/weapons/twohanded.dm | 61 + code/modules/admin/admin.dm | 8 + code/modules/admin/player_panel.dm | 31 +- code/modules/admin/topic.dm | 3 + code/modules/clothing/clothing.dm | 1 - code/modules/clothing/under/jobs/medsci.dm | 2 +- code/modules/clothing/under/miscellaneous.dm | 7 + code/modules/food&drinks/food/snacks.dm | 2 + code/modules/hydroponics/grown/replicapod.dm | 6 + code/modules/library/lib_demonomicon.dm | 56 + code/modules/mob/living/carbon/carbon.dm | 6 + code/modules/mob/living/carbon/human/death.dm | 5 +- .../mob/living/carbon/human/examine.dm | 2 + code/modules/mob/living/carbon/human/human.dm | 38 + .../mob/living/carbon/human/species.dm | 6 +- code/modules/mob/living/carbon/life.dm | 2 +- code/modules/mob/living/living.dm | 30 +- code/modules/mob/living/living_defines.dm | 2 + .../mob/living/simple_animal/bot/secbot.dm | 1 + code/modules/mob/mob.dm | 6 +- code/modules/mob/new_player/new_player.dm | 10 + code/modules/mob/transform_procs.dm | 4 + code/modules/paperwork/contract.dm | 265 ++ code/modules/paperwork/filingcabinet.dm | 58 + code/modules/paperwork/photocopier.dm | 57 +- code/modules/projectiles/projectile/magic.dm | 2 + .../chemistry/reagents/food_reagents.dm | 6 + .../chemistry/reagents/medicine_reagents.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 16 + code/modules/reagents/reagent_containers.dm | 3 +- code/modules/spells/spell_types/demon.dm | 167 ++ .../modules/spells/spell_types/demon_boons.dm | 44 + code/modules/spells/spell_types/dumbfire.dm | 4 +- config/admins.txt | 1 + config/tips.txt | 3 + icons/mob/32x64.dmi | Bin 0 -> 3779 bytes icons/mob/actions.dmi | Bin 82493 -> 83321 bytes icons/mob/hud.dmi | Bin 11141 -> 11279 bytes icons/mob/inhands/items_lefthand.dmi | Bin 115221 -> 115936 bytes icons/mob/inhands/items_righthand.dmi | Bin 111362 -> 112084 bytes icons/mob/mob.dmi | Bin 251087 -> 253167 bytes icons/mob/uniform.dmi | Bin 218200 -> 219140 bytes icons/obj/bureaucracy.dmi | Bin 20768 -> 21256 bytes icons/obj/clothing/uniforms.dmi | Bin 49371 -> 49725 bytes icons/obj/library.dmi | Bin 22451 -> 23476 bytes icons/obj/weapons.dmi | Bin 44868 -> 45166 bytes tgstation.dme | 17 +- 76 files changed, 3307 insertions(+), 1191 deletions(-) create mode 100644 code/__DEFINES/contracts.dm create mode 100644 code/_onclick/hud/demon.dm create mode 100644 code/game/gamemodes/demon/demon.dm create mode 100644 code/game/gamemodes/demon/demon_game_mode.dm create mode 100644 code/game/gamemodes/demon/demoninfo.dm create mode 100644 code/game/gamemodes/demon/imp/imp.dm create mode 100644 code/game/gamemodes/demon/objectives.dm create mode 100644 code/game/gamemodes/demon/true_demon/_true_demon.dm create mode 100644 code/game/gamemodes/demon/true_demon/inventory.dm create mode 100644 code/game/gamemodes/miniantags/sintouched/objectives.dm create mode 100644 code/modules/library/lib_demonomicon.dm create mode 100644 code/modules/paperwork/contract.dm create mode 100644 code/modules/spells/spell_types/demon.dm create mode 100644 code/modules/spells/spell_types/demon_boons.dm create mode 100644 icons/mob/32x64.dmi diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 2ce75a3cb31..b08b7ff7e43 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -897,7 +897,7 @@ "arm" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/hallway/primary/port{name = "\improper Northwest Hallway"}) "arn" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "hop shutter"; name = "HoP Office shutter"},/turf/open/floor/plating,/area/crew_quarters/heads) "aro" = (/obj/structure/table/wood,/obj/item/weapon/storage/box/silver_ids{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/ids,/turf/open/floor/wood,/area/crew_quarters/heads) -"arp" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_x = 0; pixel_y = 7},/turf/open/floor/wood,/area/crew_quarters/heads) +"arp" = (/obj/structure/filingcabinet/employment,/turf/open/floor/wood,/area/crew_quarters/heads) "arq" = (/obj/machinery/vending/cart,/turf/open/floor/wood,/area/crew_quarters/heads) "arr" = (/obj/machinery/photocopier,/obj/machinery/light{dir = 1},/turf/open/floor/wood,/area/crew_quarters/heads) "ars" = (/obj/structure/closet/secure_closet/hop,/obj/item/clothing/suit/armor/reactive,/turf/open/floor/wood,/area/crew_quarters/heads) @@ -1276,7 +1276,7 @@ "ayB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel/black,/area/engine/gravity_generator) "ayC" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/open/floor/plasteel/black,/area/engine/gravity_generator) "ayD" = (/obj/effect/landmark{name = "lightsout"},/turf/open/floor/wood,/area/library) -"ayE" = (/obj/structure/table/wood,/obj/item/weapon/storage/pill_bottle/dice,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/open/floor/wood,/area/library) +"ayE" = (/obj/structure/table/wood,/obj/item/weapon/book/codex_gigas,/obj/item/weapon/storage/pill_bottle/dice,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/open/floor/wood,/area/library) "ayF" = (/obj/effect/landmark/start{name = "Clown"},/turf/open/floor/wood,/area/crew_quarters/theatre) "ayG" = (/turf/open/floor/wood,/area/crew_quarters/theatre) "ayH" = (/obj/machinery/camera/autoname{dir = 8},/turf/open/floor/wood,/area/crew_quarters/theatre) @@ -2951,6 +2951,7 @@ "beO" = (/obj/structure/window/reinforced,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/obj/machinery/flasher/portable,/turf/open/floor/plasteel/black,/area/security/warden) "beP" = (/obj/structure/table,/obj/item/clothing/glasses/science,/turf/open/floor/plasteel,/area/toxins/misc_lab) "beQ" = (/obj/effect/decal/cleanable/blood/old,/obj/item/clothing/glasses/sunglasses,/turf/open/floor/wood{icon_state = "wood-broken"},/area/maintenance/fore{name = "Security Maintenance"}) +"ZAx" = (/obj/structure/table, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /obj/item/clothing/under/burial, /turf/open/floor/plating,/area/maintenance/asmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -3126,7 +3127,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaaaaJaaJaaJaaaaaaaaaaaaaaJaaJaaJaaJaPHaPHaPHaPHaPHaPHaRkaRkaPHaaaaaaaVmbbHaVmaaaaayaaaaaaaaaaaaaaBaaaaaaaayaaaaaaaZrbcqbcraZraZraZraZraZrbagazLaAxaAZaNEaAxbcsaAxaAxaAxaAxazLaFsaBRaRZaRZaBRazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLazLaZxazLazLaaJaaJaaJaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaaaayaaaaaaaaaaPHbctbctaPHaaaaaaaaaaaTaaaaaaaayaaaaaaaaaaaaaaBaaaaaaaayaaaaaaaZrbaSbcubcvbchbchbcwbcxbaSbcyaAxbbyaHGaAxbczaAxbcAaAxaBbaFCaBbaBbbcBbcBaAxbczbcjbcjbcjazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJbcCaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaayaayaayaayaayaPHaQqaQqaPHaayaayaaybcDamzaaBaaBaaBaaBaaBaaBaaBaayaguaguaguaayaZrbaSbcEbcFbcFbcGbcGbcGbcGbcHaDiaDibcIaDibcIaDiaDiaDiaDjbcJaDjaDjaDjaDjaDibcIbcKbcKbcLaTTbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcMbcNaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcObcPbcPbcQbcPbcPbcPbcRbcPbcPbcSaayaaaaPHbcTaQqaVmaaaaayaaaaaaaaaaaaaayaaaaaaaaaaaaaaBaaaaaaaaaaaaaaaaZraZraZrbcUbcUaZrbcVbcWbcXazLaAxaBTaAxaAxaAxbcjbcjbcYbcZazLazLazLazLazLazLazLazLazLazLazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcObcPbcPbcQbcPbcPbcPbcRbcPbcPbcSaayaaaaPHbcTaQqaVmaaaaayaaaaaaaaaaaaaayaaaaaaaaaaaaaaBaaaaaaaaaaaaaaaaZraZraZrbcUbcUaZrbcVbcWbcXazLaAxaBTaAxaAxZAxbcjbcjbcYbcZazLazLazLazLazLazLazLazLazLazLazLaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcObdabdbbdcbddbddbddbddbddbddbddbcQaVmaVmaVmaQqaQqaVmaaaaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaaaaaaaaaaaaaaaaaJaaJaZrbdebdeaZraZraZraZrazLazLazLaBRaBRaBRazLazLazLazLazLaaaaayaaaaaaaaaaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdfbdgbdgbdgbdgbdgbdgbdgbdgbdgbdgbdhbdibdjbdkaQqaQqaVmaaaaayaaaaaaaaaaaaaaaaaaaaaaaaaayaaBaayaaaaaaaaaaaaaaaaaJaZrbdebdebdlbdlbdmaZraaJaaJbdnaaaaaaaaaaayaaaaaaaaaaayaaaaayaayaayaayaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdobdpbdqbdqbdrbdrbdrbdrbdrbdrbdrbcQaVmaVmaVmaQqaQqaPHaaaaayaaaaaaaaaaaaaaaaaaaaaaaaaayaaBaayaaaaaaaaaaaaaaaaaJaZrbdsbdebdebdebdtaZraaJaaJaayaayaayaayaayaayaayaayaayaayaayaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaaaaaaaaaaJaaJaaJaaaaaaaaaaaaaaaaaJaaJaaJaaJaaJaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index d9b8f0cce5b..9f1dde54049 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -23727,7 +23727,7 @@ pixel_x = -30; pixel_y = 0 }, -/obj/structure/filingcabinet, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "aVu" = ( @@ -45512,6 +45512,7 @@ "bIQ" = ( /obj/structure/cult/tome, /obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel/cult, /area/library) "bIR" = ( @@ -62399,6 +62400,13 @@ dir = 2; pixel_y = 24 }, +/obj/structure/table/wood, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, /turf/open/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index b15f8f1c392..8e7fc5e4d84 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -39741,6 +39741,7 @@ /area/storage/art) "buT" = ( /obj/structure/cult/tome, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult" }, @@ -48367,8 +48368,7 @@ name = "Chapel Maintenance" }) "bKq" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/cobweb, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "bKr" = ( @@ -57033,9 +57033,13 @@ }) "cay" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/robot_debris{ - icon_state = "gib6" - }, +/obj/structure/table, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, /turf/open/floor/plating, /area/maintenance/port{ name = "Chapel Maintenance" diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index 43d40cb3424..afe423895f5 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -24449,12 +24449,12 @@ /turf/open/floor/wood, /area/lawoffice) "aNP" = ( -/obj/structure/filingcabinet/chestdrawer, /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; pixel_x = 24 }, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "aNQ" = ( @@ -59349,6 +59349,7 @@ pixel_y = 0 }, /obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult"; dir = 2 @@ -100508,12 +100509,18 @@ }, /area/medical/morgue) "dfx" = ( -/obj/machinery/plantgenes, -/turf/open/floor/plasteel{ - dir = 9; - icon_state = "warning" +/obj/structure/window/reinforced{ + dir = 4 }, -/area/hydroponics) +/obj/structure/table/wood, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/turf/open/floor/plating, +/area/chapel/main) "dfy" = ( /turf/open/floor/engine/vacuum, /area/atmos) @@ -100615,6 +100622,13 @@ }, /turf/open/space, /area/space) +"dfI" = ( +/obj/machinery/plantgenes, +/turf/open/floor/plasteel{ + dir = 9; + icon_state = "warning" + }, +/area/hydroponics) (1,1,1) = {" aaa @@ -120851,7 +120865,7 @@ cOU cRS cRS cSP -cRS +dfx cOU cUb cOU @@ -136228,7 +136242,7 @@ bZc caw bZc ccX -dfx +dfI bVf cuS ciC diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index 4220fed6d56..94f22215cc9 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -3510,6 +3510,7 @@ /obj/item/weapon/folder/red, /obj/item/weapon/hand_labeler, /obj/item/clothing/glasses/sunglasses, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/carpet, /area/security/brig) "hn" = ( @@ -10216,7 +10217,7 @@ /area/crew_quarters/bar) "uW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/filingcabinet/chestdrawer, +/obj/structure/filingcabinet/employment, /turf/open/floor/plasteel, /area/crew_quarters/heads{ name = "\improper Job Assignment" @@ -16130,6 +16131,16 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"IL" = ( +/obj/structure/table, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/obj/item/clothing/under/burial, +/turf/open/floor/plating, +/area/hallway/primary/central) (1,1,1) = {" aa @@ -46085,7 +46096,7 @@ nC jo bx bN -bN +IL bx ps rE diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index ee5c7cfc719..355c2d64f14 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -9082,10 +9082,10 @@ /turf/open/floor/carpet, /area/security/detectives_office) "arV" = ( -/obj/structure/filingcabinet/chestdrawer, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/lawoffice) "arW" = ( @@ -20527,6 +20527,7 @@ "aQs" = ( /obj/structure/cult/tome, /obj/item/clothing/under/suit_jacket/red, +/obj/item/weapon/book/codex_gigas, /turf/open/floor/plasteel{ icon_state = "cult"; dir = 2 diff --git a/code/__DEFINES/contracts.dm b/code/__DEFINES/contracts.dm new file mode 100644 index 00000000000..cba98a29b24 --- /dev/null +++ b/code/__DEFINES/contracts.dm @@ -0,0 +1,42 @@ +#define CONTRACT_POWER "power" +#define CONTRACT_WEALTH "wealth" +#define CONTRACT_PRESTIGE "prestige" +#define CONTRACT_MAGIC "magic" +#define CONTRACT_REVIVE "revive" +#define CONTRACT_KNOWLEDGE "knowledge" +#define CONTRACT_UNWILLING "unwilling" + +#define BANE_SALT "salt" +#define BANE_LIGHT "light" +#define BANE_IRON "iron" +#define BANE_WHITECLOTHES "whiteclothes" +#define BANE_SILVER "silver" +#define BANE_HARVEST "harvest" +#define BANE_TOOLBOX "toolbox" + +#define OBLIGATION_FOOD "food" +#define OBLIGATION_DRINK "drink" +#define OBLIGATION_GREET "greet" +#define OBLIGATION_PRESENCEKNOWN "presenceknown" +#define OBLIGATION_SAYNAME "sayname" +#define OBLIGATION_ANNOUNCEKILL "announcekill" +#define OBLIGATION_ANSWERTONAME "answername" + +#define BAN_HURTWOMAN "hurtwoman" +#define BAN_CHAPEL "chapel" +#define BAN_HURTPRIEST "hurtpriest" +#define BAN_AVOIDWATER "avoidwater" +#define BAN_STRIKEUNCONCIOUS "strikeunconcious" +#define BAN_HURTLIZARD "hurtlizard" +#define BAN_HURTANIMAL "hurtanimal" + +#define BANISH_WATER "water" +#define BANISH_COFFIN "coffin" +#define BANISH_FORMALDYHIDE "embalm" +#define BANISH_RUNES "runes" +#define BANISH_CANDLES "candles" +#define BANISH_DESTRUCTION "destruction" +#define BANISH_FUNERAL_GARB "funeral" + +#define LORE 1 +#define LAW 2 \ No newline at end of file diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 9ca921c0cda..27252048b47 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -25,14 +25,17 @@ #define DATA_HUD_MEDICAL_ADVANCED 4 #define DATA_HUD_DIAGNOSTIC 5 //antag HUD defines -#define ANTAG_HUD_CULT 6 -#define ANTAG_HUD_REV 7 -#define ANTAG_HUD_OPS 8 -#define ANTAG_HUD_WIZ 9 -#define ANTAG_HUD_SHADOW 10 -#define ANTAG_HUD_HOG_BLUE 11 -#define ANTAG_HUD_HOG_RED 12 -#define ANTAG_HUD_TRAITOR 13 -#define ANTAG_HUD_NINJA 14 -#define ANTAG_HUD_CHANGELING 15 -#define ANTAG_HUD_ABDUCTOR 16 +#define ANTAG_HUD_CULT 6 +#define ANTAG_HUD_REV 7 +#define ANTAG_HUD_OPS 8 +#define ANTAG_HUD_WIZ 9 +#define ANTAG_HUD_SHADOW 10 +#define ANTAG_HUD_HOG_BLUE 11 +#define ANTAG_HUD_HOG_RED 12 +#define ANTAG_HUD_TRAITOR 13 +#define ANTAG_HUD_NINJA 14 +#define ANTAG_HUD_CHANGELING 15 +#define ANTAG_HUD_ABDUCTOR 16 +#define ANTAG_HUD_DEVIL 17 +#define ANTAG_HUD_SINTOUCHED 18 +#define ANTAG_HUD_SOULLESS 19 diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 916ff182f3c..980436018c6 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -24,6 +24,7 @@ #define ROLE_REVENANT "revenant" #define ROLE_HOG_GOD "hand of god: god" #define ROLE_HOG_CULTIST "hand of god: cultist" +#define ROLE_DEVIL "devil" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. @@ -48,4 +49,5 @@ var/global/list/special_roles = list( ROLE_ABDUCTOR = /datum/game_mode/abduction, ROLE_HOG_GOD = /datum/game_mode/hand_of_god, ROLE_HOG_CULTIST = /datum/game_mode/hand_of_god, + ROLE_DEVIL = /datum/game_mode/devil ) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index ce70339a466..5058f8ace1f 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -355,6 +355,8 @@ Turf and target are seperate in case you want to teleport some distance from a t // mob_list.Add(M) // for(var/mob/living/silicon/hive_mainframe/M in world) // mob_list.Add(M) + for(var/mob/living/carbon/true_devil/M in sortmob) + moblist.Add(M) return moblist //E = MC^2 diff --git a/code/_onclick/hud/demon.dm b/code/_onclick/hud/demon.dm new file mode 100644 index 00000000000..fc0d923e080 --- /dev/null +++ b/code/_onclick/hud/demon.dm @@ -0,0 +1,75 @@ +/datum/hud/devil/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') + ..() + var/obj/screen/using + var/obj/screen/inventory/inv_box + + using = new /obj/screen/drop() + using.icon = ui_style + using.screen_loc = ui_drone_drop + static_inventory += using + + pull_icon = new /obj/screen/pull() + pull_icon.icon = ui_style + pull_icon.update_icon(mymob) + pull_icon.screen_loc = ui_drone_pull + static_inventory += pull_icon + + inv_box = new /obj/screen/inventory/hand() + inv_box.name = "right hand" + inv_box.icon = ui_style + inv_box.icon_state = "hand_r" + inv_box.screen_loc = ui_rhand + inv_box.slot_id = slot_r_hand + static_inventory += inv_box + + inv_box = new /obj/screen/inventory/hand() + inv_box.name = "left hand" + inv_box.icon = ui_style + inv_box.icon_state = "hand_l" + inv_box.screen_loc = ui_lhand + inv_box.slot_id = slot_l_hand + static_inventory += inv_box + + using = new /obj/screen/inventory() + using.name = "hand" + using.icon = ui_style + using.icon_state = "swap_1_m" + using.screen_loc = ui_swaphand1 + using.layer = 19 + static_inventory += using + + using = new /obj/screen/inventory() + using.name = "hand" + using.icon = ui_style + using.icon_state = "swap_2" + using.screen_loc = ui_swaphand2 + using.layer = 19 + static_inventory += using + + zone_select = new /obj/screen/zone_sel() + zone_select.icon = ui_style + zone_select.update_icon(mymob) + + lingchemdisplay = new /obj/screen/ling/chems() + +/datum/hud/devil/persistant_inventory_update() + if(!mymob) + return + var/mob/living/carbon/true_devil/D = mymob + + if(hud_version != HUD_STYLE_NOHUD) + if(D.r_hand) + D.r_hand.screen_loc = ui_rhand + D.client.screen += D.r_hand + if(D.l_hand) + D.l_hand.screen_loc = ui_lhand + D.client.screen += D.l_hand + else + if(D.r_hand) + D.r_hand.screen_loc = null + if(D.l_hand) + D.l_hand.screen_loc = null + +/mob/living/carbon/true_devil/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/devil(src, ui_style2icon(client.prefs.UI_style)) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 89d3e04808f..742c700ebb9 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -262,6 +262,7 @@ var/record_id_num = 1001 L.fields["species"] = H.dna.species.type L.fields["features"] = H.dna.features L.fields["image"] = image + L.fields["reference"] = H locked += L return diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 8698e29a382..2b7eee8a730 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -18,6 +18,9 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),\ + ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),\ ) /datum/atom_hud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1587bc4b8d2..60d4d992d88 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -57,9 +57,13 @@ var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD var/datum/gang/gang_datum //Which gang this mind belongs to, if any + var/datum/devilinfo/devilinfo //Information about the devil, if any. + var/damnation_type = 0 + var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src /datum/mind/New(var/key) src.key = key + soulOwner = src /datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) @@ -539,6 +543,24 @@ sections["monkey"] = text + /** devil ***/ + text = "devil" + if(ticker.mode.config_tag == "devil") + text = uppertext(text) + text = "[text]: " + if(src in ticker.mode.devils) + text += "DEVIL|sintouched|human" + else if(src in ticker.mode.sintouched) + text += "devil|SINTOUCHED|human" + else + text += "devil|sintouched|HUMAN" + + if(current && current.client && (ROLE_DEVIL in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["devil"] = text + /** SILICON ***/ @@ -1163,6 +1185,45 @@ message_admins("[key_name_admin(usr)] has thrall'ed [current].") log_admin("[key_name(usr)] has thrall'ed [current].") + else if(href_list["devil"]) + switch(href_list["devil"]) + if("clear") + if(src in ticker.mode.devils) + if(istype(current,/mob/living/carbon/true_devil/)) + usr << "This cannot be used on true or arch-devils." + else + ticker.mode.devils -= src + special_role = null + current << "Your infernal link has been severed! You are no longer a devil!" + RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt) + RemoveSpell(/obj/effect/proc_holder/spell/dumbfire/fireball/hellish) + RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_contract) + RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_pitchfork) + message_admins("[key_name_admin(usr)] has de-devil'ed [current].") + devilinfo = null + log_admin("[key_name(usr)] has de-devil'ed [current].") + else if(src in ticker.mode.sintouched) + ticker.mode.sintouched -= src + message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") + log_admin("[key_name(usr)] has de-sintouch'ed [current].") + if("devil") + if(!ishuman(current)) + usr << "This only works on humans!" + return + ticker.mode.devils += src + special_role = "devil" + ticker.mode.finalize_devil(src) + announceDevilLaws() + if("sintouched") + if(ishuman(current)) + ticker.mode.sintouched += src + var/mob/living/carbon/human/H = current + H.influenceSin() + message_admins("[key_name_admin(usr)] has sintouch'ed [current].") + else + usr << "This only works on humans!" + return + else if(href_list["abductor"]) switch(href_list["abductor"]) if("clear") @@ -1569,7 +1630,6 @@ ticker.mode.greet_hog_follower(src,colour) ticker.mode.update_hog_icons_added(src, colour) - /datum/mind/proc/make_Handofgod_god(colour) switch(colour) if("red") @@ -1611,6 +1671,25 @@ var/obj/effect/proc_holder/spell/S = X S.action.Grant(new_character) +/datum/mind/proc/disrupt_spells(delay, list/exceptions = New()) + for(var/X in spell_list) + var/obj/effect/proc_holder/spell/S = X + for(var/type in exceptions) + if(istype(S, type)) + continue + S.charge_counter = delay + spawn(0) + S.start_recharge() + +/datum/mind/proc/get_ghost(even_if_they_cant_reenter) + for(var/mob/dead/observer/G in dead_mob_list) + if(G.mind == src) + if(G.can_reenter_corpse || even_if_they_cant_reenter) + return G + break + + + /mob/proc/sync_mind() mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) mind.active = 1 //indicates that the mind is currently synced with a client @@ -1721,4 +1800,4 @@ /mob/living/simple_animal/hostile/construct/mind_initialize() ..() mind.assigned_role = "[initial(name)]" - mind.special_role = "Cultist" \ No newline at end of file + mind.special_role = "Cultist" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 920d71870a2..bb4f8d28ffa 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1328,6 +1328,25 @@ var/list/teleportlocs = list() icon_state = "tcomsatlounge" +// Hell +/area/hell + name = "Hell Lobby" + //icon = "ICON FILENAME" + //icon_state = "NAME OF ICON" + requires_power = 0 + music = "music/music.ogg" + +/area/hell/trial1 + name = "Hell Trial1" + //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) + +/area/hell/trial1 + name = "Hell Trial2" + //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) + +/area/hell/trial1 + name = "Hell Trial3" + //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) // Away Missions /area/awaymission diff --git a/code/game/gamemodes/demon/demon.dm b/code/game/gamemodes/demon/demon.dm new file mode 100644 index 00000000000..743e95ad910 --- /dev/null +++ b/code/game/gamemodes/demon/demon.dm @@ -0,0 +1,40 @@ +var/global/list/whiteness = list ( + /obj/item/clothing/under/color/white = 2, + /obj/item/clothing/under/rank/bartender = 1, + /obj/item/clothing/under/rank/chef = 1, + /obj/item/clothing/under/rank/chief_engineer = 1, + /obj/item/clothing/under/rank/scientist = 1, + /obj/item/clothing/under/rank/chemist = 1, + /obj/item/clothing/under/rank/chief_medical_officer = 1, + /obj/item/clothing/under/rank/geneticist = 1, + /obj/item/clothing/under/rank/virologist = 1, + /obj/item/clothing/under/rank/nursesuit = 1, + /obj/item/clothing/under/rank/medical = 1, + /obj/item/clothing/under/rank/det = 1, + /obj/item/clothing/under/suit_jacket/white = 0.5, + /obj/item/clothing/under/burial = 1 +) + + + +/mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker) + switch(mind.devilinfo.bane) + if(BANE_WHITECLOTHES) + if(istype(attacker, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = attacker + if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + if(whiteness[U.type]) + src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") + return whiteness[U.type] + 1 + if(BANE_TOOLBOX) + if(istype(weapon,/obj/item/weapon/storage/toolbox)) + src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!") + return 2.5 // Will take four hits with a normal toolbox. + if(BANE_HARVEST) + if(istype(weapon,/obj/item/weapon/reagent_containers/food/snacks/grown/)) + src.visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.") + src.Weaken(2) + qdel(weapon) + return 2 + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/demon/demon_game_mode.dm b/code/game/gamemodes/demon/demon_game_mode.dm new file mode 100644 index 00000000000..06856715515 --- /dev/null +++ b/code/game/gamemodes/demon/demon_game_mode.dm @@ -0,0 +1,108 @@ +/datum/game_mode + var/list/datum/mind/sintouched = list() + var/list/datum/mind/devils = list() + var/devil_ascended = 0 // Number of arch devils on station + +/datum/game_mode/proc/auto_declare_completion_sintouched() + var/text = "" + if(sintouched.len) + text += "
The sintouched were:" + var/list/sintouchedUnique = uniqueList(sintouched) + for(var/S in sintouchedUnique) + var/datum/mind/sintouched_mind = S + text += printplayer(sintouched_mind) + text += printobjectives(sintouched_mind) + text += "
" + text += "
" + world << text + +/datum/game_mode/proc/auto_declare_completion_devils() + /var/text = "" + if(devils.len) + text += "
The devils were:" + for(var/D in devils) + var/datum/mind/devil = D + text += printplayer(devil) + text += printdevilinfo(devil) + text += printobjectives(devil) + text += "
" + world << text + +/datum/game_mode/devil + + +/datum/game_mode/proc/finalize_devil(datum/mind/devil_mind) + var/mob/living/carbon/human/S = devil_mind.current + var/trueName= randomDevilName() + var/datum/objective/devil/soulquantity/soulquant = new + soulquant.owner = devil_mind + var/datum/objective/devil/soulquality/soulqual = new + soulqual.owner = devil_mind + devil_mind.objectives += soulqual + devil_mind.objectives += soulquant + devil_mind.devilinfo = devilInfo(trueName, 1) + devil_mind.store_memory("Your devilic true name is [devil_mind.devilinfo.truename]
[lawlorify[LAW][devil_mind.devilinfo.ban]]
[lawlorify[LAW][devil_mind.devilinfo.bane]]
[lawlorify[LAW][devil_mind.devilinfo.obligation]]
[lawlorify[LAW][devil_mind.devilinfo.banish]]
") + devil_mind.devilinfo.owner = devil_mind + devil_mind.devilinfo.give_base_spells(1) + spawn(10) + if(devil_mind.assigned_role == "Clown") + S << "Your infernal nature has allowed you to overcome your clownishness." + S.dna.remove_mutation(CLOWNMUT) + +/datum/mind/proc/announceDevilLaws() + if(!devilinfo) + return + current << "You remember your link to the infernal. You are [src.devilinfo.truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp." + current << "However, your infernal form is not without weaknesses." + current << lawlorify[LAW][src.devilinfo.bane] + current << lawlorify[LAW][src.devilinfo.ban] + current << lawlorify[LAW][src.devilinfo.obligation] + current << lawlorify[LAW][src.devilinfo.banish] + current << "

Remember, the crew can research your weaknesses if they find out your devil name.
" + var/obj_count = 1 + current << "Your current objectives:" + for(var/O in objectives) + var/datum/objective/objective = O + current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + +/datum/game_mode/proc/printdevilinfo(datum/mind/ply) + if(!ply.devilinfo) + return "" + var/text = "
The devil's true name is: [ply.devilinfo.truename]
" + text += "The devil's bans were:
" + text += " [lawlorify[LORE][ply.devilinfo.ban]]
" + text += " [lawlorify[LORE][ply.devilinfo.bane]]
" + text += " [lawlorify[LORE][ply.devilinfo.obligation]]
" + text += " [lawlorify[LORE][ply.devilinfo.banish]]
" + return text + +/datum/game_mode/proc/update_devil_icons_added(datum/mind/devil_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_DEVIL] + hud.join_hud(devil_mind.current) + set_antag_hud(devil_mind.current, "devil") + +/datum/game_mode/proc/update_devil_icons_removed(datum/mind/devil_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_DEVIL] + hud.leave_hud(devil_mind.current) + set_antag_hud(devil_mind.current, null) + +/datum/game_mode/proc/update_sintouch_icons_added(datum/mind/sin_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SINTOUCHED] + hud.join_hud(sin_mind.current) + set_antag_hud(sin_mind.current, "sintouched") + +/datum/game_mode/proc/update_sintouch_icons_removed(datum/mind/sin_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SINTOUCHED] + hud.leave_hud(sin_mind.current) + set_antag_hud(sin_mind.current, null) + +/datum/game_mode/proc/update_soulless_icons_added(datum/mind/soulless_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SOULLESS] + hud.join_hud(soulless_mind.current) + set_antag_hud(soulless_mind.current, "soulless") + +/datum/game_mode/proc/update_soulless_icons_removed(datum/mind/soulless_mind) + var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_SOULLESS] + hud.leave_hud(soulless_mind.current) + set_antag_hud(soulless_mind.current, null) diff --git a/code/game/gamemodes/demon/demoninfo.dm b/code/game/gamemodes/demon/demoninfo.dm new file mode 100644 index 00000000000..5c013496cac --- /dev/null +++ b/code/game/gamemodes/demon/demoninfo.dm @@ -0,0 +1,413 @@ +#define POWERUPTHRESHOLD 3 //How many souls are needed per stage. + +#define BASIC_DEVIL 0 +#define BLOOD_LIZARD 1 +#define TRUE_DEVIL 2 +#define ARCH_DEVIL 3 + +#define SOULVALUE soulsOwned.len-reviveNumber + +#define DEVILRESURRECTTIME 600 + +var/global/list/allDevils = list() +var/global/list/lawlorify = list ( + LORE = list( + OBLIGATION_FOOD = "This devil seems to always offer it's victims food before slaughtering them.", + OBLIGATION_DRINK = "This devil seems to always offer it's victims a drink before slaughtering them.", + OBLIGATION_GREET = "This devil seems to only be able to converse with people it knows the name of.", + OBLIGATION_PRESENCEKNOWN = "This devil seems to be unable to attack from stealth.", + OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.", + OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.", + OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.", + BANE_SILVER = "Silver seems to gravely injure this devil.", + BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.", + BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.", + BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.", + BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.", + BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.", + BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.", + BAN_HURTWOMAN = "This devil seems to prefer hunting men.", + BAN_CHAPEL = "This devil avoids holy ground.", + BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.", + BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.", + BAN_STRIKEUNCONCIOUS = "This devil only shows interest in those who are awake.", + BAN_HURTLIZARD = "This devil will not strike a lizardman first.", + BAN_HURTANIMAL = "This devil avoids hurting animals.", + BANISH_WATER = "To banish the devil, you must sprinkle holy water upon it's body.", + BANISH_COFFIN = "This devil will return to life if it's remains are not placed within a coffin.", + BANISH_FORMALDYHIDE = "To banish the devil, you must inject it's lifeless body with embalming fluid.", + BANISH_RUNES = "This devil will resurrect after death, unless it's remains are within a rune.", + BANISH_CANDLES = "A large number of candles will prevent it from resurrecting.", + BANISH_DESTRUCTION = "It's corpse must be utterly destroyed to prevent resurrection.", + BANISH_FUNERAL_GARB = "Funeral garments will prevent the devil from resurrecting." + ), + LAW = list( + OBLIGATION_FOOD = "When not acting in self defense, you must always offer your victim food before harming them.", + OBLIGATION_DRINK = "When not acting in self defense, you must always offer your victim drink before harming them.", + OBLIGATION_GREET = "You must always greet other people by their last name before talking with them.", + OBLIGATION_PRESENCEKNOWN = "You must always make your presence known before attacking.", + OBLIGATION_SAYNAME = "You must always say your true name after you kill someone.", + OBLIGATION_ANNOUNCEKILL = "Upon killing someone, you must make your deed known to all within earshot, over comms if reasonably possible.", + OBLIGATION_ANSWERTONAME = "If you are not under attack, you must always respond to your true name.", + BAN_HURTWOMAN = "You must never harm a female outside of self defense.", + BAN_CHAPEL = "You must never attempt to enter the chapel.", + BAN_HURTPRIEST = "You must never attack a priest.", + BAN_AVOIDWATER = "You must never willingly touch a wet surface.", + BAN_STRIKEUNCONCIOUS = "You must never strike an unconcious person.", + BAN_HURTLIZARD = "You must never harm a lizardman outside of self defense.", + BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.", + BANE_SILVER = "Silver, in all of it's forms shall be your downfall.", + BANE_SALT = "Salt will disrupt your magical abilities.", + BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.", + BANE_IRON = "Cold wrought iron shall act as poison to you.", + BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.", + BANE_HARVEST = "The fruits of the harvest shall be your downfall.", + BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.", + BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.", + BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.", + BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.", + BANISH_RUNES = "If your corpse is placed within a rune, you will be unable to resurrect.", + BANISH_CANDLES = "If your corpse is near lit candles, you will be unable to resurrect.", + BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.", + BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect." + ) + ) + +/datum/devilinfo/ + var/datum/mind/owner = null + var/obligation + var/ban + var/bane + var/banish + var/truename + var/list/datum/mind/soulsOwned = new + var/reviveNumber = 0 + var/form = BASIC_DEVIL + var/exists = 0 + +/proc/randomDevilInfo(name = randomDevilName()) + var/datum/devilinfo/devil = new + devil.truename = name + devil.bane = randomdevilbane() + devil.obligation = randomdevilobligation() + devil.ban = randomdevilban() + devil.banish = randomdevilbanish() + return devil + +/proc/devilInfo(name, saveDetails = 0) + if(allDevils[lowertext(name)]) + return allDevils[lowertext(name)] + else + var/datum/devilinfo/devil = randomDevilInfo(name) + allDevils[lowertext(name)] = devil + devil.exists = saveDetails + return devil + + + +/proc/randomDevilName() + var/preTitle = "" + var/title = "" + var/mainName = "" + var/suffix = "" + if(prob(65)) + if(prob(35)) + preTitle = pick("Dark ", "Hellish ", "Fiery ", "Sinful ", "Blood ") + title = pick("Lord ", "Fallen Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ") + var/probability = 100 + mainName = pick("Hal", "Ve", "Odr", "Neit", "Ci", "Quon", "Mya", "Folth", "Wren", "Gyer", "Geyr", "Hil", "Niet", "Twou", "Hu", "Don") + while(prob(probability)) + mainName += pick("hal", "ve", "odr", "neit", "ca", "quon", "mya", "folth", "wren", "gyer", "geyr", "hil", "niet", "twoe", "phi", "coa") + probability -= 20 + if(prob(40)) + suffix = pick(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.") + return preTitle + title + mainName + suffix + +/proc/randomdevilobligation() + return pick(OBLIGATION_FOOD, OBLIGATION_DRINK, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME) + +/proc/randomdevilban() + return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) + +/proc/randomdevilbane() + return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX) + +/proc/randomdevilbanish() + return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB) + +/datum/devilinfo/proc/add_soul(datum/mind/soul) + if(soulsOwned.Find(soul)) + return + soulsOwned += soul + switch(SOULVALUE) + if(0) + owner.current << "Your hellish powers have been restored." + give_base_spells() + if(POWERUPTHRESHOLD) + increase_blood_lizard() + if(POWERUPTHRESHOLD*2) + increase_true_devil() + if(POWERUPTHRESHOLD*3) + increase_arch_devil() + +/datum/devilinfo/proc/remove_soul(datum/mind/soul) + if(soulsOwned.Remove(soul)) + check_regression() + +/datum/devilinfo/proc/check_regression() + if (form == ARCH_DEVIL) + return //arch devil can't regress + switch(SOULVALUE) + if(-1) + remove_spells() + owner.current << "As punishment for your failures, all of your powers except contract creation have been revoked." + if(POWERUPTHRESHOLD-1) + regress_humanoid() + if(POWERUPTHRESHOLD*2-1) + regress_blood_lizard() + +/datum/devilinfo/proc/increase_form() + switch(form) + if(BASIC_DEVIL) + increase_blood_lizard() + if(BLOOD_LIZARD) + increase_true_devil() + if(TRUE_DEVIL) + increase_arch_devil() + +/datum/devilinfo/proc/regress_humanoid() + owner.current << "Your powers weaken, have more contracts be signed to regain power." + if(istype(owner.current, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + H.set_species(/datum/species/human, 1) + H.regenerate_icons() + give_base_spells() + form = BASIC_DEVIL + +/datum/devilinfo/proc/regress_blood_lizard() + var/mob/living/carbon/true_devil/D = owner.current + D << "Your powers weaken, have more contracts be signed to regain power." + D.oldform.loc = D.loc + owner.transfer_to(D.oldform) + give_lizard_spells() + qdel(D) + form = BLOOD_LIZARD + + +/datum/devilinfo/proc/increase_blood_lizard() + owner.current << "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard." + sleep(50) + if(istype(owner.current, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + H.set_species(/datum/species/lizard, 1) + H.underwear = "Nude" + H.undershirt = "Nude" + H.socks = "Nude" + H.dna.features["mcolor"] = "511" //A deep red + H.regenerate_icons() + else //Did the devil get hit by a staff of transmutation? + owner.current.color = "#501010" + give_lizard_spells() + form = BLOOD_LIZARD + + + +/datum/devilinfo/proc/increase_true_devil() + owner.current << "You feel as though your current form is about to shed. You will soon turn into a true devil." + sleep(50) + var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc) + A.faction |= "hell" + owner.current.loc = A + A.oldform = owner.current + owner.transfer_to(A) + A.set_name() + give_true_spells() + form = TRUE_DEVIL + + +/datum/devilinfo/proc/increase_arch_devil() + var/mob/living/carbon/true_devil/D = owner.current + D << "You feel as though your form is about to ascend." + sleep(50) + if(!D) + return + D.visible_message("[D]'s skin begins to erupt with spikes.", \ + "Your flesh begins creating a shield around yourself.") + sleep(100) + if(!D) + return + D.visible_message("The horns on [D]'s head slowly grow and elongate.", \ + "Your body continues to mutate. Your telepathic abilities grow.") + sleep(90) + if(!D) + return + D.visible_message("[D]'s body begins to violently stretch and contort.", \ + "You begin to rend apart the final barriers to ultimate power.") + sleep(40) + if(!D) + return + D << "Yes!" + sleep(10) + if(!D) + return + D << "YES!!" + sleep(10) + if(!D) + return + D << "YE--" + sleep(1) + if(!D) + return + world << "\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"" + world << 'sound/hallucinations/veryfar_noise.ogg' + give_arch_spells() + D.convert_to_archdevil() + var/area/A = get_area(owner.current) + if(A) + notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, attack_not_jump = 1) + sleep(50) + if(!ticker.mode.devil_ascended) + SSshuttle.emergency.request(null, 0.3) + ticker.mode.devil_ascended++ + form = ARCH_DEVIL + +/datum/devilinfo/proc/remove_spells() + for(var/X in owner.spell_list) + var/obj/effect/proc_holder/spell/S = X + if(!istype(S, /obj/effect/proc_holder/spell/targeted/summon_contract)) + owner.RemoveSpell(S) + +/datum/devilinfo/proc/give_summon_contract() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_contract(null)) + + +/datum/devilinfo/proc/give_base_spells(give_summon_contract = 0) + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork(null)) + if(give_summon_contract) + give_summon_contract() + +/datum/devilinfo/proc/give_lizard_spells() + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) + +/datum/devilinfo/proc/give_true_spells() + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork/greater(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) + //owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) TODO LORDPIDEY add this spell + +/datum/devilinfo/proc/give_arch_spells() + remove_spells() + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork/ascended(null)) + //owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) TODO LORDPIDEY + +/datum/devilinfo/proc/beginResurrectionCheck(mob/living/body) + if(SOULVALUE>0) + owner.current<< "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon. Remain in your body." + sleep(DEVILRESURRECTTIME) + if (!body || body.stat == DEAD) + if(SOULVALUE>0) + if(check_banishment(body)) + owner.current<< "Unfortunately, the mortals have finished a ritual that prevents your resurrection." + return -1 + else + owner.current<< "WE LIVE AGAIN!" + return hellish_resurrection(body) + else + owner.current<< "Unfortunately, the power that stemmed from your contracts has been extinguished. You no longer have enough power to resurrect." + return -1 + else + owner.current << " You seem to have resurrected without your hellish powers." + else + owner.current << "Your hellish powers are too weak to resurrect yourself." + +/datum/devilinfo/proc/check_banishment(mob/living/body) + switch(banish) + if(BANISH_WATER) + if(istype(body, /mob/living/carbon)) + var/mob/living/carbon/H = body + return H.reagents.has_reagent("holy water") + return 0 + if(BANISH_COFFIN) + return (body && istype(body.loc, /obj/structure/closet/coffin)) + if(BANISH_FORMALDYHIDE) + if(istype(body, /mob/living/carbon)) + var/mob/living/carbon/H = body + return H.reagents.has_reagent("formaldehyde") + return 0 + if(BANISH_RUNES) + if(body) + for(var/obj/effect/decal/cleanable/crayon/R in range(0,body)) + if (R.name == "rune") + return 1 + return 0 + if(BANISH_CANDLES) + if(body) + var/count = 0 + for(var/obj/item/candle/C in range(1,body)) + count += C.lit + if(count>=4) + return 1 + return 0 + if(BANISH_DESTRUCTION) + if(body) + return 0 + return 1 + if(BANISH_FUNERAL_GARB) + if(istype(body, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = body + if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/burial)) + return 1 + return 0 + +/datum/devilinfo/proc/hellish_resurrection(mob/living/body) + message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.") + if(SOULVALUE < POWERUPTHRESHOLD * 3) // once ascended, arch devils do not go down in power by any means. + reviveNumber++ + if(body) + body.revive(1,0) + body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. + if(istype(body, /mob/living/carbon/true_devil)) + var/mob/living/carbon/true_devil/D = body + if(D.oldform) + D.oldform.revive(1,0) // Heal the old body too, so the devil doesn't resurrect, then immediately regress into a dead body. + else + if(blobstart.len > 0) + var/turf/targetturf = get_turf(pick(blobstart)) + var/mob/currentMob = owner.current + if(!currentMob) + currentMob = owner.get_ghost() + if(!currentMob) + message_admins("[owner.name]'s devil resurrection failed due to client logoff. Aborting.") + return -1 // + if(currentMob.mind != owner) + message_admins("[owner.name]'s devil resurrection failed due to becoming a new mob. Aborting.") + return -1 + currentMob.change_mob_type( /mob/living/carbon/human , targetturf, null, 1) + var/mob/living/carbon/human/H = owner.current + give_summon_contract() + if(SOULVALUE >= POWERUPTHRESHOLD) + H.set_species(/datum/species/lizard, 1) + H.underwear = "Nude" + H.undershirt = "Nude" + H.socks = "Nude" + H.dna.features["mcolor"] = "511" + H.regenerate_icons() + if(SOULVALUE >= POWERUPTHRESHOLD * 2) //Yes, BOTH this and the above if statement are to run if soulpower is high enough. + var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(targetturf) + A.faction |= "hell" + H.forceMove(A) + A.oldform = H + A.set_name() + owner.transfer_to(A) + if(SOULVALUE >= POWERUPTHRESHOLD * 3) + A.convert_to_archdevil() + + else + throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection") + check_regression() \ No newline at end of file diff --git a/code/game/gamemodes/demon/imp/imp.dm b/code/game/gamemodes/demon/imp/imp.dm new file mode 100644 index 00000000000..76696ced406 --- /dev/null +++ b/code/game/gamemodes/demon/imp/imp.dm @@ -0,0 +1,56 @@ +//////////////////The Monster + +/mob/living/simple_animal/imp + name = "imp" + real_name = "imp" + desc = "A large, menacing creature covered in armored black scales." + speak_emote = list("cackles") + emote_hear = list("cackles","screeches") + response_help = "thinks better of touching" + response_disarm = "flails at" + response_harm = "punches" + icon = 'icons/mob/mob.dmi' + icon_state = "imp" + icon_living = "imp" + speed = 1 + a_intent = "harm" + stop_automated_movement = 1 + status_flags = CANPUSH + attack_sound = 'sound/magic/demon_attack1.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 250 //Weak to cold + maxbodytemp = INFINITY + faction = list("hell") + attacktext = "wildly tears into" + maxHealth = 200 + health = 200 + healable = 0 + environment_smash = 1 + melee_damage_lower = 10 + melee_damage_upper = 15 + see_in_dark = 8 + var/boost = 0 + bloodcrawl = BLOODCRAWL_EAT + see_invisible = SEE_INVISIBLE_MINIMUM + var/list/consumed_mobs = list() + var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ + Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ + of intentionally harming a fellow devil." + +/mob/living/simple_animal/imp/New() + ..() + boost = world.time + 30 + +/mob/living/simple_animal/imp/Life() + ..() + if(boost[src] screams in agony as it sublimates into a sulfurous smoke.") + ghostize() + qdel(src) diff --git a/code/game/gamemodes/demon/objectives.dm b/code/game/gamemodes/demon/objectives.dm new file mode 100644 index 00000000000..bdcac75b8e2 --- /dev/null +++ b/code/game/gamemodes/demon/objectives.dm @@ -0,0 +1,62 @@ +/datum/objective/devil + dangerrating = 5 + +/datum/objective/devil/soulquantity + explanation_text = "You shouldn't see this text. Error:DEVIL1" + var/quantity = 4 + +/datum/objective/devil/soulquantity/New() + quantity = pick(4,5) + explanation_text = "Purchase, and retain control over at least [quantity] souls." + +/datum/objective/devil/soulquantity/check_completion() + var/count = 0 + for(var/S in owner.devilinfo.soulsOwned) + var/datum/mind/L = S + if(L.soulOwner != L) + count++ + return count >= quantity + +/datum/objective/devil/soulquality + explanation_text = "You shouldn't see this text. Error:DEVIL2" + var/contractType + var/quantity + +/datum/objective/devil/soulquality/New() + contractType = pick(CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_REVIVE, CONTRACT_KNOWLEDGE/*, CONTRACT_UNWILLING*/) + var/contractName + quantity = pick(1,2) + switch(contractType) + if(CONTRACT_POWER) + contractName = "for power" + if(CONTRACT_WEALTH) + contractName = "for wealth" + if(CONTRACT_PRESTIGE) + contractName = "for prestige" + if(CONTRACT_MAGIC) + contractName = "for magic" + if(CONTRACT_REVIVE) + contractName = "of revival" + if(CONTRACT_KNOWLEDGE) + contractName = "for knowledge" + //if(CONTRACT_UNWILLING) //Makes round unfun. + // contractName = "against their will" + explanation_text = "Have mortals sign at least [quantity] contracts [contractName]" + +/datum/objective/devil/soulquality/check_completion() + var/count = 0 + for(var/S in owner.devilinfo.soulsOwned) + var/datum/mind/L = S + if(L.soulOwner != L && L.damnation_type == contractType) + count++ + return count>=quantity + +/datum/objective/devil/sintouch + var/quantity + +/datum/objective/devil/sintouch/New() + quantity = pick(4,5) + explanation_text = "Ensure at least [quantity] mortals are sintouched." + +/datum/objective/devil/sintouch/check_completion() + return quantity>=ticker.mode.sintouched.len \ No newline at end of file diff --git a/code/game/gamemodes/demon/true_demon/_true_demon.dm b/code/game/gamemodes/demon/true_demon/_true_demon.dm new file mode 100644 index 00000000000..36d491df5f9 --- /dev/null +++ b/code/game/gamemodes/demon/true_demon/_true_demon.dm @@ -0,0 +1,195 @@ +#define DEVIL_HANDS_LAYER 1 +#define DEVIL_HEAD_LAYER 2 +#define DEVIL_TOTAL_LAYERS 2 + + +/mob/living/carbon/true_devil + name = "True Devil" + desc = "A pile of infernal energy, taking a vaguely humanoid form." + icon = 'icons/mob/32x64.dmi' + icon_state = "true_devil" + gender = NEUTER + health = 350 + maxHealth = 350 + ventcrawler = 0 + density = 0 + pass_flags = 0 + var/ascended = 0 + sight = (SEE_TURFS | SEE_OBJS) + status_flags = CANPUSH + languages = ALL //The devil speaks all languages meme + mob_size = MOB_SIZE_LARGE + var/mob/living/oldform + var/list/devil_overlays[DEVIL_TOTAL_LAYERS] + +/mob/living/carbon/true_devil/New() + internal_organs += new /obj/item/organ/brain/ + internal_organs += new /obj/item/organ/tongue + for(var/X in internal_organs) + var/obj/item/organ/I = X + I.Insert(src) + ..() + + +/mob/living/carbon/true_devil/proc/convert_to_archdevil() + maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible. + ascended = 1 + health = maxHealth + icon_state = "arch_devil" + +/mob/living/carbon/true_devil/proc/set_name() + name = mind.devilinfo.truename + real_name = name + +/mob/living/carbon/true_devil/Login() + ..() + mind.announceDevilLaws() + + +/mob/living/carbon/true_devil/death(gibbed) + stat = DEAD + ..(gibbed) + drop_l_hand() + drop_r_hand() + spawn (0) + mind.devilinfo.beginResurrectionCheck(src) + + +/mob/living/carbon/true_devil/examine(mob/user) + var/msg = "*---------*\nThis is \icon[src] [src]!\n" + + //Left hand items + if(l_hand && !(l_hand.flags&ABSTRACT)) + if(l_hand.blood_DNA) + msg += "It is holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] blood-stained [l_hand.name] in its left hand!\n" + else + msg += "It is holding \icon[l_hand] \a [l_hand] in its left hand.\n" + + //Right hand items + if(r_hand && !(r_hand.flags&ABSTRACT)) + if(r_hand.blood_DNA) + msg += "It is holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] blood-stained [r_hand.name] in its right hand!\n" + else + msg += "It is holding \icon[r_hand] \a [r_hand] in its right hand.\n" + + //Braindead + if(!client && stat != DEAD) + msg += "The devil seems to be in deep contemplation.\n" + + //Damaged + if(stat == DEAD) + msg += "The hellfire seems to have been extinguished, for now at least.\n" + else if(health < (maxHealth/10)) + msg += "You can see hellfire inside of it's gaping wounds.\n" + else if(health < (maxHealth/2)) + msg += "You can see hellfire inside of it's wounds.\n" + msg += "*---------*" + user << msg + + +/mob/living/carbon/true_devil/IsAdvancedToolUser() + return 1 + + +/mob/living/carbon/true_devil/canUseTopic() + if(stat) + return + return 1 + + +/mob/living/carbon/true_devil/assess_threat() + return 666 + +/mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) + if(mind && mind.devilinfo.bane == BANE_LIGHT) + if(has_bane(BANE_LIGHT)) + mind.disrupt_spells(-500) + return ..() //flashes don't stop devils UNLESS it's their bane. + + +/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) + var/weakness = check_weakness(I, user) + apply_damage(I.force * weakness, I.damtype, def_zone) + var/message_verb = "" + if(I.attack_verb && I.attack_verb.len) + message_verb = "[pick(I.attack_verb)]" + else if(I.force) + message_verb = "attacked" + + var/attack_message = "[src] has been [message_verb] with [I]." + if(user) + user.do_attack_animation(src) + if(user in viewers(src, null)) + attack_message = "[user] has [message_verb] [src] with [I]!" + if(message_verb) + visible_message("[attack_message]", + "[attack_message]") + +/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity) + A.attack_hand(src) + +/mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0) + return 1 + +/mob/living/carbon/true_devil/ex_act(severity) + if(ascended) + return 0 + return ..() + +/mob/living/carbon/true_devil/singularity_act() + if(ascended) + return 0 + return ..() + +/mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob) + if(ascended || user.mind.soulOwner == src.mind) + var/mob/living/simple_animal/imp/S = new(get_turf(loc)) + S.key = user.key + S.mind.assigned_role = "Imp" + S.mind.special_role = "Imp" + var/datum/objective/newobjective = new + newobjective.explanation_text = "Try to get a promotion to a higher devilic rank." + S.mind.objectives += newobjective + S << S.playstyle_string + S << "Objective #[1]: [newobjective.explanation_text]" + return + else + return ..() + +/mob/living/carbon/true_devil/can_be_revived() + return 1 + +/mob/living/carbon/true_devil/resist_fire() + //They're immune to fire. + +/mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M) + if(..()) + switch(M.a_intent) + if ("harm") + var/damage = rand(1, 5) + playsound(loc, "punch", 25, 1, -1) + visible_message("[M] has punched [src]!", \ + "[M] has punched [src]!") + adjustBruteLoss(damage) + add_logs(M, src, "attacked") + updatehealth() + if ("disarm") + if (!lying && !ascended) //No stealing the arch devil's pitchfork. + if (prob(5)) + Paralyse(2) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + add_logs(M, src, "pushed") + visible_message("[M] has pushed down [src]!", \ + "[M] has pushed down [src]!") + else + if (prob(25)) + drop_item() + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + visible_message("[M] has disarmed [src]!", \ + "[M] has disarmed [src]!") + else + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + visible_message("[M] has attempted to disarm [src]!") + +/mob/living/carbon/true_devil/handle_breathing() + // devils do not need to breathe diff --git a/code/game/gamemodes/demon/true_demon/inventory.dm b/code/game/gamemodes/demon/true_demon/inventory.dm new file mode 100644 index 00000000000..23035370135 --- /dev/null +++ b/code/game/gamemodes/demon/true_demon/inventory.dm @@ -0,0 +1,61 @@ +/mob/living/carbon/true_devil/unEquip(obj/item/I, force) + if(..(I,force)) + update_inv_hands() + return 1 + return 0 + +/mob/living/carbon/true_devil/proc/update_inv_hands() + //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_image should use the down sprite when facing down, left, or right, and the up sprite when facing up. + remove_overlay(DEVIL_HANDS_LAYER) + var/list/hands_overlays = list() + + if(r_hand) + + var/r_state = r_hand.item_state + if(!r_state) + r_state = r_hand.icon_state + + var/image/r_hand_image = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + + hands_overlays += r_hand_image + + if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) + r_hand.layer = 20 + r_hand.screen_loc = ui_rhand + client.screen |= r_hand + + if(l_hand) + + var/l_state = l_hand.item_state + if(!l_state) + l_state = l_hand.icon_state + + var/image/l_hand_image = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + + hands_overlays += l_hand_image + + if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) + l_hand.layer = 20 + l_hand.screen_loc = ui_lhand + client.screen |= l_hand + if(hands_overlays.len) + devil_overlays[DEVIL_HANDS_LAYER] = hands_overlays + apply_overlay(DEVIL_HANDS_LAYER) + +/mob/living/carbon/true_devil/update_inv_l_hand() + update_inv_hands() + + +/mob/living/carbon/true_devil/update_inv_r_hand() + update_inv_hands() + +/mob/living/carbon/true_devil/remove_overlay(cache_index) + if(devil_overlays[cache_index]) + overlays -= devil_overlays[cache_index] + devil_overlays[cache_index] = null + + +/mob/living/carbon/true_devil/apply_overlay(cache_index) + var/image/I = devil_overlays[cache_index] + if(I) + overlays += I \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/sintouched/objectives.dm b/code/game/gamemodes/miniantags/sintouched/objectives.dm new file mode 100644 index 00000000000..86572782ca8 --- /dev/null +++ b/code/game/gamemodes/miniantags/sintouched/objectives.dm @@ -0,0 +1,35 @@ +/datum/objective/sintouched + dangerrating = 5 + completed = 1 + +/* NO ERP OBJECTIVE FOR YOU. +/datum/objective/sintouched/lust + dangerrating = 3 // it's not AS dangerous. + +/datum/objective/sintouched/lust/New() + var/mob/dead/D = pick(dead_mob_list) + if(prob(50) && D) + explanation_text = "You know that [D] has perished.... and you think [D] is kinda cute. Make sure everyone knows how HOT [D]'s lifeless body is." + else + explanation_text = "Go get married, then immediately cheat on your new spouse." */ + +/datum/objective/sintouched/gluttony + explanation_text = "Everything is so delicious. Go eat everything." + +/datum/objective/sintouched/greed + explanation_text = "You want MORE, more money, more wealth, more riches. Go get it, but don't hurt people for it." + +/datum/objective/sintouched/sloth + explanation_text = "You just get tired randomly. Go take a nap at a time that would inconvenience other people." + +/datum/objective/sintouched/wrath + explanation_text = "What have your coworkers ever done for you? Don't offer to help them in any matter, and refuse if asked." + +/datum/objective/sintouched/envy + explanation_text = "Why should you be stuck with your rank? Show everyone you can do other jobs too, and don't let anyone stop you, least of all because you have no training" + +/datum/objective/sintouched/pride + explanation_text = "You are the BEST thing on the station. Make sure everyone knows it." + +/datum/objective/sintouched/acedia + explanation_text = "Angels, devils, good, evil... who cares? Just ignore any hellish threats and do your job." \ No newline at end of file diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index b6a576e12f5..ddbdcfa4e09 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -203,7 +203,7 @@ return if((src.occupant) && (src.occupant.loc == src)) - if((src.occupant.stat == DEAD) || (src.occupant.suiciding) || !occupant.key) //Autoeject corpses and suiciding dudes. + if((src.occupant.stat == DEAD) || (src.occupant.suiciding) || !occupant.key || src.occupant.hellbound) //Autoeject corpses and suiciding dudes. src.locked = 0 src.go_out() src.connected_message("Clone Rejected: Deceased.") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 1b50cab81af..253a3c1c8d7 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,1114 +1,1115 @@ -/obj/machinery/computer/arcade/ - name = "random arcade" - desc = "random arcade machine" - icon_state = "arcade" - icon_keyboard = null - icon_screen = "invaders" - var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, - /obj/item/toy/AI = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/sword = 2, - /obj/item/toy/gun = 2, - /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, - /obj/item/weapon/storage/box/fakesyndiesuit = 2, - /obj/item/weapon/storage/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/item/toy/prize/ripley = 1, - /obj/item/toy/prize/fireripley = 1, - /obj/item/toy/prize/deathripley = 1, - /obj/item/toy/prize/gygax = 1, - /obj/item/toy/prize/durand = 1, - /obj/item/toy/prize/honk = 1, - /obj/item/toy/prize/marauder = 1, - /obj/item/toy/prize/seraph = 1, - /obj/item/toy/prize/mauler = 1, - /obj/item/toy/prize/odysseus = 1, - /obj/item/toy/prize/phazon = 1, - /obj/item/toy/prize/reticence = 1, - /obj/item/toy/cards/deck = 2, - /obj/item/toy/nuke = 2, - /obj/item/toy/minimeteor = 2, - /obj/item/toy/carpplushie = 2, - /obj/item/toy/foamblade = 2, - /obj/item/toy/redbutton = 2, - /obj/item/toy/talking/owl = 2, - /obj/item/toy/talking/griffin = 2, - /obj/item/weapon/coin/antagtoken = 2, - /obj/item/stack/tile/fakespace/loaded = 2, - /obj/item/toy/toy_xeno = 2, - /obj/item/weapon/restraints/handcuffs/fake = 2 - ) - -/obj/machinery/computer/arcade/New() - ..() - // If it's a generic arcade machine, pick a random arcade - // circuit board for it and make the new machine - if(!circuit) - var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade)) - var/obj/item/weapon/circuitboard/CB = new choice() - new CB.build_path(loc, CB) - qdel(src) - -/obj/machinery/computer/arcade/proc/prizevend() - if(prob(0.0001)) //1 in a million - new /obj/item/weapon/gun/energy/pulse(src) - - if(!contents.len) - var/prizeselect = pickweight(prizes) - new prizeselect(src.loc) - - if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun - new /obj/item/toy/ammo/gun(src.loc) - - else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit - new /obj/item/clothing/head/syndicatefake(src.loc) - - else - var/atom/movable/prize = pick(contents) - prize.loc = src.loc - -/obj/machinery/computer/arcade/emp_act(severity) - ..(severity) - - if(stat & (NOPOWER|BROKEN)) - return - - var/empprize = null - var/num_of_prizes = 0 - switch(severity) - if(1) - num_of_prizes = rand(1,4) - if(2) - num_of_prizes = rand(0,2) - for(var/i = num_of_prizes; i > 0; i--) - empprize = pickweight(prizes) - new empprize(src.loc) - explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) - - -// ** BATTLE ** // - - -/obj/machinery/computer/arcade/battle - name = "arcade machine" - desc = "Does not support Pinball." - icon_state = "arcade" - circuit = /obj/item/weapon/circuitboard/computer/arcade/battle - var/enemy_name = "Space Villian" - var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points - var/enemy_mp = 20 - var/gameover = 0 - var/blocked = 0 //Player cannot attack/heal while set - var/turtle = 0 - -/obj/machinery/computer/arcade/battle/New() - ..() - var/name_action - var/name_part1 - var/name_part2 - - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") - - src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") - src.name = (name_action + name_part1 + name_part2) - -/obj/machinery/computer/arcade/battle/attack_hand(mob/user) - if(..()) - return - user.set_machine(src) - var/dat = "Close" - dat += "

[src.enemy_name]

" - - dat += "

[src.temp]

" - dat += "
Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
" - - if (src.gameover) - dat += "
New Game" - else - dat += "
Attack | " - dat += "Heal | " - dat += "Recharge Power" - - dat += "
" - - //user << browse(dat, "window=arcade") - //onclose(user, "arcade") - var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/arcade/battle/Topic(href, href_list) - if(..()) - return - - if (!src.blocked && !src.gameover) - if (href_list["attack"]) - src.blocked = 1 - var/attackamt = rand(2,6) - src.temp = "You attack for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) - src.updateUsrDialog() - if(turtle > 0) - turtle-- - - sleep(10) - src.enemy_hp -= attackamt - src.arcade_action() - - else if (href_list["heal"]) - src.blocked = 1 - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - src.temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.updateUsrDialog() - turtle++ - - sleep(10) - src.player_mp -= pointamt - src.player_hp += healamt - src.blocked = 1 - src.updateUsrDialog() - src.arcade_action() - - else if (href_list["charge"]) - src.blocked = 1 - var/chargeamt = rand(4,7) - src.temp = "You regain [chargeamt] points" - playsound(src.loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_mp += chargeamt - if(turtle > 0) - turtle-- - - src.updateUsrDialog() - sleep(10) - src.arcade_action() - - if (href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - else if (href_list["newgame"]) //Reset everything - temp = "New Round" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - turtle = 0 - - if(emagged) - src.New() - emagged = 0 - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - -/obj/machinery/computer/arcade/battle/proc/arcade_action() - if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) - if(!gameover) - src.gameover = 1 - src.temp = "[src.enemy_name] has fallen! Rejoice!" - playsound(src.loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10) - - if(emagged) - feedback_inc("arcade_win_emagged") - new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) - new /obj/item/clothing/head/collectable/petehat(src.loc) - message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") - log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - src.New() - emagged = 0 - else - feedback_inc("arcade_win_normal") - prizevend() - - else if (emagged && (turtle >= 4)) - var/boomamt = rand(5,10) - src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(src.loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_hp -= boomamt - - else if ((src.enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - src.temp = "[src.enemy_name] steals [stealamt] of your power!" - playsound(src.loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_mp -= stealamt - src.updateUsrDialog() - - if (src.player_mp <= 0) - src.gameover = 1 - sleep(10) - src.temp = "You have been drained! GAME OVER" - playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) - feedback_inc("arcade_loss_mana_emagged") - usr.gib() - else - feedback_inc("arcade_loss_mana_normal") - - else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) - src.temp = "[src.enemy_name] heals for 4 health!" - playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) - src.enemy_hp += 4 - src.enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - src.temp = "[src.enemy_name] attacks for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) - src.player_hp -= attackamt - - if ((src.player_mp <= 0) || (src.player_hp <= 0)) - src.gameover = 1 - src.temp = "You have been crushed! GAME OVER" - playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(emagged) - feedback_inc("arcade_loss_hp_emagged") - usr.gib() - else - feedback_inc("arcade_loss_hp_normal") - - src.blocked = 0 - return - - -/obj/machinery/computer/arcade/battle/emag_act(mob/user) - if(!emagged) - temp = "If you die in the game, you die for real!" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - blocked = 0 - - emagged = 1 - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - - src.updateUsrDialog() - - - -// *** THE ORION TRAIL ** // - -#define ORION_TRAIL_WINTURN 9 - -//Orion Trail Events -#define ORION_TRAIL_RAIDERS "Raiders" -#define ORION_TRAIL_FLUX "Interstellar Flux" -#define ORION_TRAIL_ILLNESS "Illness" -#define ORION_TRAIL_BREAKDOWN "Breakdown" -#define ORION_TRAIL_LING "Changelings?" -#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" -#define ORION_TRAIL_MALFUNCTION "Malfunction" -#define ORION_TRAIL_COLLISION "Collision" -#define ORION_TRAIL_SPACEPORT "Spaceport" -#define ORION_TRAIL_BLACKHOLE "BlackHole" - -#define ORION_STATUS_START 1 -#define ORION_STATUS_NORMAL 2 -#define ORION_STATUS_GAMEOVER 3 -#define ORION_STATUS_MARKET 4 - -/obj/machinery/computer/arcade/orion_trail - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - icon_state = "arcade" - circuit = /obj/item/weapon/circuitboard/computer/arcade/orion_trail - var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game. - var/engine = 0 - var/hull = 0 - var/electronics = 0 - var/food = 80 - var/fuel = 60 - var/turns = 4 - var/alive = 4 - var/eventdat = null - var/event = null - var/list/settlers = list("Harry","Larry","Bob") - var/list/events = list(ORION_TRAIL_RAIDERS = 3, - ORION_TRAIL_FLUX = 1, - ORION_TRAIL_ILLNESS = 3, - ORION_TRAIL_BREAKDOWN = 2, - ORION_TRAIL_LING = 3, - ORION_TRAIL_MALFUNCTION = 2, - ORION_TRAIL_COLLISION = 1, - ORION_TRAIL_SPACEPORT = 2 - ) - var/list/stops = list() - var/list/stopblurbs = list() - var/lings_aboard = 0 - var/spaceport_raided = 0 - var/spaceport_freebie = 0 - var/last_spaceport_action = "" - var/gameStatus = ORION_STATUS_START - var/canContinueEvent = 0 - -/obj/machinery/computer/arcade/orion_trail/New() - ..() - // Sets up the main trail - stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") - stopblurbs = list( - "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", - "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", - "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", - "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", - "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", - "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", - "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", - "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", - "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" - ) - -/obj/machinery/computer/arcade/orion_trail/proc/newgame() - // Set names of settlers in crew - settlers = list() - for(var/i = 1; i <= 3; i++) - add_crewmember() - add_crewmember("[usr]") - // Re-set items to defaults - engine = 1 - hull = 1 - electronics = 1 - food = 80 - fuel = 60 - alive = 4 - turns = 1 - event = null - gameStatus = ORION_STATUS_NORMAL - lings_aboard = 0 - - //spaceport junk - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - -/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) - if(..()) - return - if(fuel <= 0 || food <=0 || settlers.len == 0) - gameStatus = ORION_STATUS_GAMEOVER - event = null - user.set_machine(src) - var/dat = "" - if(gameStatus == ORION_STATUS_GAMEOVER) - dat = "

Game Over

" - dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." - if(settlers.len == 0) - dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." - else - if(food <= 0) - dat += "
You ran out of food and starved." - if(emagged) - user.nutrition = 0 //yeah you pretty hongry - user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." - if(fuel <= 0) - dat += "
You ran out of fuel, and drift, slowly, into a star." - if(emagged) - var/mob/living/M = user - M.adjust_fire_stacks(5) - M.IgniteMob() //flew into a star, so you're on fire - user << "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames." - dat += "

OK...

" - - if(emagged) - user << "You're never going to make it to Orion..." - user.death() - emagged = 0 //removes the emagged status after you lose - gameStatus = ORION_STATUS_START - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - - else if(event) - dat = eventdat - else if(gameStatus == ORION_STATUS_NORMAL) - var/title = stops[turns] - var/subtext = stopblurbs[turns] - dat = "

[title]

" - dat += "[subtext]" - dat += "

Crew:

" - dat += english_list(settlers) - dat += "
Food: [food] | Fuel: [fuel]" - dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - if(turns == 7) - dat += "

Go Around Continue

" - else - dat += "

Continue

" - dat += "

Kill a crewmember

" - dat += "

Close

" - else - dat = "

The Orion Trail

" - dat += "

Experience the journey of your ancestors!



" - dat += "
New Game
" - dat += "

Close

" - var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) - if(..()) - return - if(href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - if(busy) - return - busy = 1 - - if (href_list["continue"]) //Continue your travels - if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) - if(turns >= ORION_TRAIL_WINTURN) - win() - else - food -= (alive+lings_aboard)*2 - fuel -= 5 - if(turns == 2 && prob(30)) - event = ORION_TRAIL_COLLISION - event() - else if(prob(75)) - event = pickweight(events) - if(lings_aboard) - if(event == ORION_TRAIL_LING || prob(55)) - event = ORION_TRAIL_LING_ATTACK - event() - turns += 1 - if(emagged) - var/mob/living/carbon/M = usr //for some vars - switch(event) - if(ORION_TRAIL_RAIDERS) - if(prob(50)) - usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?" - M.hallucination += 30 - else - usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..." - M.take_organ_damage(30) - playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) - if(ORION_TRAIL_ILLNESS) - var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS - if(severity == 1) - M << "You suddenly feel slightly nauseous." //got off lucky - if(severity == 2) - usr << "You suddenly feel extremely nauseous and hunch over until it passes." - M.Stun(3) - if(severity >= 3) //you didn't pray hard enough - M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit." - M.Stun(5) - sleep(30) - M.vomit(50) - if(ORION_TRAIL_FLUX) - if(prob(75)) - M.Weaken(3) - say("A sudden gust of powerful wind slams [M] into the floor!") - M.take_organ_damage(25) - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - else - M << "A violent gale blows past you, and you barely manage to stay standing!" - if(ORION_TRAIL_COLLISION) //by far the most damaging event - if(prob(90)) - playsound(src.loc, 'sound/effects/bang.ogg', 100, 1) - var/turf/open/floor/F - for(F in orange(1, src)) - F.ChangeTurf(F.baseturf) - say("Something slams into the floor around [src], exposing it to space!") - if(hull) - sleep(10) - say("A new floor suddenly appears around [src]. What the hell?") - playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) - var/turf/open/space/T - for(T in orange(1, src)) - T.ChangeTurf(/turf/open/floor/plating/) - else - say("Something slams into the floor around [src] - luckily, it didn't get through!") - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1) - if(ORION_TRAIL_MALFUNCTION) - playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1) - src.visible_message("[src] malfunctions, randomizing in-game stats!") - var/oldfood = food - var/oldfuel = fuel - food = rand(10,80) / rand(1,2) - fuel = rand(10,60) / rand(1,2) - if(electronics) - sleep(10) - if(oldfuel > fuel && oldfood > food) - src.audible_message("[src] lets out a somehow reassuring chime.") - else if(oldfuel < fuel || oldfood < food) - src.audible_message("[src] lets out a somehow ominous chime.") - food = oldfood - fuel = oldfuel - playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) - - else if(href_list["newgame"]) //Reset everything - if(gameStatus == ORION_STATUS_START) - newgame() - else if(href_list["menu"]) //back to the main menu - if(gameStatus == ORION_STATUS_GAMEOVER) - gameStatus = ORION_STATUS_START - event = null - food = 80 - fuel = 60 - settlers = list("Harry","Larry","Bob") - else if(href_list["slow"]) //slow down - if(event == ORION_TRAIL_FLUX) - food -= (alive+lings_aboard)*2 - fuel -= 5 - event = null - else if(href_list["pastblack"]) //slow down - if(turns == 7) - food -= ((alive+lings_aboard)*2)*3 - fuel -= 15 - turns += 1 - event = null - else if(href_list["useengine"]) //use parts - if(event == ORION_TRAIL_BREAKDOWN) - engine = max(0, --engine) - event = null - else if(href_list["useelec"]) //use parts - if(event == ORION_TRAIL_MALFUNCTION) - electronics = max(0, --electronics) - event = null - else if(href_list["usehull"]) //use parts - if(event == ORION_TRAIL_COLLISION) - hull = max(0, --hull) - event = null - else if(href_list["wait"]) //wait 3 days - if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) - food -= ((alive+lings_aboard)*2)*3 - event = null - else if(href_list["keepspeed"]) //keep speed - if(event == ORION_TRAIL_FLUX) - if(prob(75)) - event = "Breakdown" - event() - else - event = null - else if(href_list["blackhole"]) //keep speed past a black hole - if(turns == 7) - if(prob(75)) - event = ORION_TRAIL_BLACKHOLE - event() - if(emagged) //has to be here because otherwise it doesn't work - playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1) - say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") - usr.Stun(10) //you can't run :^) - var/S = new /obj/singularity/academy(usr.loc) - emagged = 0 //immediately removes emagged status so people can't kill themselves by sprinting up and interacting - sleep(50) - say("[S] winks out, just as suddenly as it appeared.") - qdel(S) - else - event = null - turns += 1 - else if(href_list["holedeath"]) - if(event == ORION_TRAIL_BLACKHOLE) - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(href_list["eventclose"]) //end an event - if(canContinueEvent) - event = null - - else if(href_list["killcrew"]) //shoot a crewmember - if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) - var/sheriff = remove_crewmember() //I shot the sheriff - playsound(loc,'sound/weapons/Gunshot.ogg', 100, 1) - - if(settlers.len == 0 || alive == 0) - say("The last crewmember [sheriff], shot themselves, GAME OVER!") - if(emagged) - usr.death(0) - emagged = 0 - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(emagged) - if(usr.name == sheriff) - say("The crew of the ship chose to kill [usr.name]!") - usr.death(0) - - if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places - event = null - - //Spaceport specific interactions - //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) - //they also call event() again, to regen the eventdata, which is kind of odd but necessary - else if(href_list["buycrew"]) //buy a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && food >= 10 && fuel >= 10) - var/bought = add_crewmember() - last_spaceport_action = "You hired [bought] as a new crewmember." - fuel -= 10 - food -= 10 - event() - - else if(href_list["sellcrew"]) //sell a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && settlers.len > 1) - var/sold = remove_crewmember() - last_spaceport_action = "You sold your crewmember, [sold]!" - fuel += 7 - food += 7 - event() - - else if(href_list["leave_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - event = null - gameStatus = ORION_STATUS_NORMAL - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - - else if(href_list["raid_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - var/success = min(15 * alive,100) //default crew (4) have a 60% chance - spaceport_raided = 1 - - var/FU = 0 - var/FO = 0 - if(prob(success)) - FU = rand(5,15) - FO = rand(5,15) - last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" - else - FU = rand(-5,-15) - FO = rand(-5,-15) - last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" - - //your chance of lose a crewmember is 1/2 your chance of success - //this makes higher % failures hurt more, don't get cocky space cowboy! - if(prob(success*5)) - var/lost_crew = remove_crewmember() - last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" - if(emagged) - say("WEEWOO WEEWOO, Spaceport Security en route!") - for(var/i, i<=3, i++) - var/mob/living/simple_animal/hostile/syndicate/ranged/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/orion(get_turf(src)) - O.target = usr - - - fuel += FU - food += FO - event() - - else if(href_list["buyparts"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && fuel > 5) - switch(text2num(href_list["buyparts"])) - if(1) //Engine Parts - engine++ - last_spaceport_action = "Bought Engine Parts" - if(2) //Hull Plates - hull++ - last_spaceport_action = "Bought Hull Plates" - if(3) //Spare Electronics - electronics++ - last_spaceport_action = "Bought Spare Electronics" - fuel -= 5 //they all cost 5 - event() - - else if(href_list["trade"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - switch(text2num(href_list["trade"])) - if(1) //Fuel - if(fuel > 5) - fuel -= 5 - food += 5 - last_spaceport_action = "Traded Fuel for Food" - event() - if(2) //Food - if(food > 5) - fuel += 5 - food -= 5 - last_spaceport_action = "Traded Food for Fuel" - event() - - src.add_fingerprint(usr) - src.updateUsrDialog() - busy = 0 - return - - -/obj/machinery/computer/arcade/orion_trail/proc/event() - eventdat = "

[event]

" - canContinueEvent = 0 - switch(event) - if(ORION_TRAIL_RAIDERS) - eventdat += "Raiders have come aboard your ship!" - if(prob(50)) - var/sfood = rand(1,10) - var/sfuel = rand(1,10) - food -= sfood - fuel -= sfuel - eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." - else if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] tried to fight back but was killed." - else - eventdat += "
Fortunately you fended them off without any trouble." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_FLUX) - eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." - eventdat += "
What will you do?" - eventdat += "

Slow Down Continue

" - eventdat += "

Close

" - - if(ORION_TRAIL_ILLNESS) - eventdat += "A deadly illness has been contracted!" - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by the disease." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_BREAKDOWN) - eventdat += "Oh no! The engine has broken down!" - eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." - if(engine >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_MALFUNCTION) - eventdat += "The ship's systems are malfunctioning!" - eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." - if(electronics >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_COLLISION) - eventdat += "Something hit us! Looks like there's some hull damage." - if(prob(25)) - var/sfood = rand(5,15) - var/sfuel = rand(5,15) - food -= sfood - fuel -= sfuel - eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." - if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by rapid depressurization." - eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." - if(hull >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_BLACKHOLE) - eventdat += "You were swept away into the black hole." - eventdat += "

Oh...

" - eventdat += "

Close

" - settlers = list() - - if(ORION_TRAIL_LING) - eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." - if(settlers.len <= 2) - eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." - eventdat += "

Continue

" - eventdat += "

Close

" - if(prob(10)) // "likely", I didn't say it was guaranteed! - lings_aboard = min(++lings_aboard,2) - else - if(lings_aboard) //less likely to stack lings - if(prob(20)) - lings_aboard = min(++lings_aboard,2) - else if(prob(70)) - lings_aboard = min(++lings_aboard,2) - - eventdat += "

Kill a crewmember

" - eventdat += "

Risk it

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_LING_ATTACK) - if(lings_aboard <= 0) //shouldn't trigger, but hey. - eventdat += "Haha, fooled you, there are no changelings on board!" - eventdat += "
(You should report this to a coder :S)" - else - var/ling1 = remove_crewmember() - var/ling2 = "" - if(lings_aboard >= 2) - ling2 = remove_crewmember() - - eventdat += "Oh no, some of your crew are Changelings!" - if(ling2) - eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" - else - eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" - - var/chance2attack = alive*20 - if(prob(chance2attack)) - var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance - if(prob(chancetokill)) - var/deadguy = remove_crewmember() - eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!" - else - eventdat += "
You valiantly fight off the Changeling[ling2 ? "s":""]!" - eventdat += "
You cut the Changeling[ling2 ? "s":""] up into meat... Eww" - if(ling2) - food += 30 - lings_aboard = max(0,lings_aboard-2) - else - food += 15 - lings_aboard = max(0,--lings_aboard) - else - eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] away, What wimps!" - if(ling2) - lings_aboard = max(0,lings_aboard-2) - else - lings_aboard = max(0,--lings_aboard) - - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - - if(ORION_TRAIL_SPACEPORT) - gameStatus = ORION_STATUS_MARKET - if(spaceport_raided) - eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!" - if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" - eventdat += "

Depart Spaceport

" - eventdat += "

Close

" - else - eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!" - eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." - eventdat += "
Trading terms: FU = Fuel, FO = Food" - if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" - eventdat += "

Crew:

" - eventdat += english_list(settlers) - eventdat += "
Food: [food] | Fuel: [fuel]" - eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - - - //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) - if(!spaceport_freebie && (fuel < 20 || food < 20)) - spaceport_freebie++ - var/FU = 10 - var/FO = 10 - var/freecrew = 0 - if(prob(30)) - FU = 25 - FO = 25 - - if(prob(10)) - add_crewmember() - freecrew++ - - eventdat += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)" - if(freecrew) - eventdat += "
You also gain a new crewmember!" - - fuel += FU - food += FO - - //CREW INTERACTIONS - eventdat += "

Crew Management:

" - - //Buy crew - if(food >= 10 && fuel >= 10) - eventdat += "

Hire a new Crewmember (-10FU,-10FO)

" - else - eventdat += "

Cant afford a new Crewmember

" - - //Sell crew - if(settlers.len > 1) - eventdat += "

Sell crew for Fuel and Food (+7FU,+7FO)

" - else - eventdat += "

Cant afford to sell a Crewmember

" - - //BUY/SELL STUFF - eventdat += "

Spare Parts:

" - - //Engine parts - if(fuel > 5) - eventdat += "

Buy Engine Parts (-5FU)

" - else - eventdat += "

Cant afford to buy Engine Parts" - - //Hull plates - if(fuel > 5) - eventdat += "

Buy Hull Plates (-5FU)

" - else - eventdat += "

Cant afford to buy Hull Plates" - - //Electronics - if(fuel > 5) - eventdat += "

Buy Spare Electronics (-5FU)

" - else - eventdat += "

Cant afford to buy Spare Electronics" - - //Trade - if(fuel > 5) - eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" - else - eventdat += "

Cant afford to Trade Fuel for Food 5) - eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" - else - eventdat += "

Cant afford to Trade Food for FuelYou override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." - name = "The Orion Trail: Realism Edition" - desc = "Learn how our ancestors got to Orion, and try not to die in the process!" - newgame() - emagged = 1 - -/mob/living/simple_animal/hostile/syndicate/ranged/orion - name = "Spaceport Security" - desc = "The Premier security forces for all spaceports found along the Orion Trail." - faction = list("orion") - loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity, - /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted, - /obj/item/weapon/shield/energy) - -/obj/effect/mob_spawn/human/corpse/orionsecurity - name = "Spaceport Security" - uniform = /obj/item/clothing/under/syndicate - suit = /obj/item/clothing/suit/armor/vest - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - radio = /obj/item/device/radio/headset - mask = /obj/item/clothing/mask/gas - helmet = /obj/item/clothing/head/helmet/swat - back = /obj/item/weapon/storage/backpack - has_id = 1 - id_job = "Officer" - id_access = "Syndicate" - -/obj/item/weapon/orion_ship - name = "model settler ship" - desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - w_class = 2 - var/active = 0 //if the ship is on - -/obj/item/weapon/orion_ship/examine(mob/user) - ..() - if(!(in_range(user, src))) - return - if(!active) - user << "There's a little switch on the bottom. It's flipped down." - else - user << "There's a little switch on the bottom. It's flipped up." - -/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse - if(active) - return - - message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") - log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") - - user << "You flip the switch on the underside of [src]." - active = 1 - src.visible_message("[src] softly beeps and whirs to life!") - playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) - say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") - sleep(20) - src.visible_message("[src] begins to vibrate...") - say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") - sleep(30) - say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) - sleep(3.6) - src.visible_message("[src] explodes!") - explosion(src.loc, 2,4,8, flame_range = 16) - qdel(src) - - -#undef ORION_TRAIL_WINTURN -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_LING -#undef ORION_TRAIL_LING_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_BLACKHOLE - -#undef ORION_STATUS_START -#undef ORION_STATUS_NORMAL -#undef ORION_STATUS_GAMEOVER -#undef ORION_STATUS_MARKET +/obj/machinery/computer/arcade/ + name = "random arcade" + desc = "random arcade machine" + icon_state = "arcade" + icon_keyboard = null + icon_screen = "invaders" + var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, + /obj/item/toy/AI = 2, + /obj/item/toy/codex_gigas = 2, + /obj/item/clothing/under/syndicate/tacticool = 2, + /obj/item/toy/sword = 2, + /obj/item/toy/gun = 2, + /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, + /obj/item/weapon/storage/box/fakesyndiesuit = 2, + /obj/item/weapon/storage/crayons = 2, + /obj/item/toy/spinningtoy = 2, + /obj/item/toy/prize/ripley = 1, + /obj/item/toy/prize/fireripley = 1, + /obj/item/toy/prize/deathripley = 1, + /obj/item/toy/prize/gygax = 1, + /obj/item/toy/prize/durand = 1, + /obj/item/toy/prize/honk = 1, + /obj/item/toy/prize/marauder = 1, + /obj/item/toy/prize/seraph = 1, + /obj/item/toy/prize/mauler = 1, + /obj/item/toy/prize/odysseus = 1, + /obj/item/toy/prize/phazon = 1, + /obj/item/toy/prize/reticence = 1, + /obj/item/toy/cards/deck = 2, + /obj/item/toy/nuke = 2, + /obj/item/toy/minimeteor = 2, + /obj/item/toy/carpplushie = 2, + /obj/item/toy/foamblade = 2, + /obj/item/toy/redbutton = 2, + /obj/item/toy/talking/owl = 2, + /obj/item/toy/talking/griffin = 2, + /obj/item/weapon/coin/antagtoken = 2, + /obj/item/stack/tile/fakespace/loaded = 2, + /obj/item/toy/toy_xeno = 2, + /obj/item/weapon/restraints/handcuffs/fake = 2 + ) + +/obj/machinery/computer/arcade/New() + ..() + // If it's a generic arcade machine, pick a random arcade + // circuit board for it and make the new machine + if(!circuit) + var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade)) + var/obj/item/weapon/circuitboard/CB = new choice() + new CB.build_path(loc, CB) + qdel(src) + +/obj/machinery/computer/arcade/proc/prizevend() + if(prob(0.0001)) //1 in a million + new /obj/item/weapon/gun/energy/pulse(src) + + if(!contents.len) + var/prizeselect = pickweight(prizes) + new prizeselect(src.loc) + + if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun + new /obj/item/toy/ammo/gun(src.loc) + + else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit + new /obj/item/clothing/head/syndicatefake(src.loc) + + else + var/atom/movable/prize = pick(contents) + prize.loc = src.loc + +/obj/machinery/computer/arcade/emp_act(severity) + ..(severity) + + if(stat & (NOPOWER|BROKEN)) + return + + var/empprize = null + var/num_of_prizes = 0 + switch(severity) + if(1) + num_of_prizes = rand(1,4) + if(2) + num_of_prizes = rand(0,2) + for(var/i = num_of_prizes; i > 0; i--) + empprize = pickweight(prizes) + new empprize(src.loc) + explosion(src.loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) + + +// ** BATTLE ** // + + +/obj/machinery/computer/arcade/battle + name = "arcade machine" + desc = "Does not support Pinball." + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/computer/arcade/battle + var/enemy_name = "Space Villian" + var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc + var/player_hp = 30 //Player health/attack points + var/player_mp = 10 + var/enemy_hp = 45 //Enemy health/attack points + var/enemy_mp = 20 + var/gameover = 0 + var/blocked = 0 //Player cannot attack/heal while set + var/turtle = 0 + +/obj/machinery/computer/arcade/battle/New() + ..() + var/name_action + var/name_part1 + var/name_part2 + + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") + + name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") + + src.enemy_name = replacetext((name_part1 + name_part2), "the ", "") + src.name = (name_action + name_part1 + name_part2) + +/obj/machinery/computer/arcade/battle/attack_hand(mob/user) + if(..()) + return + user.set_machine(src) + var/dat = "Close" + dat += "

[src.enemy_name]

" + + dat += "

[src.temp]

" + dat += "
Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]
" + + if (src.gameover) + dat += "
New Game" + else + dat += "
Attack | " + dat += "Heal | " + dat += "Recharge Power" + + dat += "
" + + //user << browse(dat, "window=arcade") + //onclose(user, "arcade") + var/datum/browser/popup = new(user, "arcade", "Space Villian 2000") + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/arcade/battle/Topic(href, href_list) + if(..()) + return + + if (!src.blocked && !src.gameover) + if (href_list["attack"]) + src.blocked = 1 + var/attackamt = rand(2,6) + src.temp = "You attack for [attackamt] damage!" + playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) + src.updateUsrDialog() + if(turtle > 0) + turtle-- + + sleep(10) + src.enemy_hp -= attackamt + src.arcade_action() + + else if (href_list["heal"]) + src.blocked = 1 + var/pointamt = rand(1,3) + var/healamt = rand(6,8) + src.temp = "You use [pointamt] magic to heal for [healamt] damage!" + playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) + src.updateUsrDialog() + turtle++ + + sleep(10) + src.player_mp -= pointamt + src.player_hp += healamt + src.blocked = 1 + src.updateUsrDialog() + src.arcade_action() + + else if (href_list["charge"]) + src.blocked = 1 + var/chargeamt = rand(4,7) + src.temp = "You regain [chargeamt] points" + playsound(src.loc, 'sound/arcade/Mana.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_mp += chargeamt + if(turtle > 0) + turtle-- + + src.updateUsrDialog() + sleep(10) + src.arcade_action() + + if (href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + else if (href_list["newgame"]) //Reset everything + temp = "New Round" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = 0 + turtle = 0 + + if(emagged) + src.New() + emagged = 0 + + src.add_fingerprint(usr) + src.updateUsrDialog() + return + +/obj/machinery/computer/arcade/battle/proc/arcade_action() + if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0)) + if(!gameover) + src.gameover = 1 + src.temp = "[src.enemy_name] has fallen! Rejoice!" + playsound(src.loc, 'sound/arcade/Win.ogg', 50, 1, extrarange = -3, falloff = 10) + + if(emagged) + feedback_inc("arcade_win_emagged") + new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) + new /obj/item/clothing/head/collectable/petehat(src.loc) + message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") + log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") + src.New() + emagged = 0 + else + feedback_inc("arcade_win_normal") + prizevend() + + else if (emagged && (turtle >= 4)) + var/boomamt = rand(5,10) + src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!" + playsound(src.loc, 'sound/arcade/Boom.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_hp -= boomamt + + else if ((src.enemy_mp <= 5) && (prob(70))) + var/stealamt = rand(2,3) + src.temp = "[src.enemy_name] steals [stealamt] of your power!" + playsound(src.loc, 'sound/arcade/Steal.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_mp -= stealamt + src.updateUsrDialog() + + if (src.player_mp <= 0) + src.gameover = 1 + sleep(10) + src.temp = "You have been drained! GAME OVER" + playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if(emagged) + feedback_inc("arcade_loss_mana_emagged") + usr.gib() + else + feedback_inc("arcade_loss_mana_normal") + + else if ((src.enemy_hp <= 10) && (src.enemy_mp > 4)) + src.temp = "[src.enemy_name] heals for 4 health!" + playsound(src.loc, 'sound/arcade/Heal.ogg', 50, 1, extrarange = -3, falloff = 10) + src.enemy_hp += 4 + src.enemy_mp -= 4 + + else + var/attackamt = rand(3,6) + src.temp = "[src.enemy_name] attacks for [attackamt] damage!" + playsound(src.loc, 'sound/arcade/Hit.ogg', 50, 1, extrarange = -3, falloff = 10) + src.player_hp -= attackamt + + if ((src.player_mp <= 0) || (src.player_hp <= 0)) + src.gameover = 1 + src.temp = "You have been crushed! GAME OVER" + playsound(src.loc, 'sound/arcade/Lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if(emagged) + feedback_inc("arcade_loss_hp_emagged") + usr.gib() + else + feedback_inc("arcade_loss_hp_normal") + + src.blocked = 0 + return + + +/obj/machinery/computer/arcade/battle/emag_act(mob/user) + if(!emagged) + temp = "If you die in the game, you die for real!" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = 0 + blocked = 0 + + emagged = 1 + + enemy_name = "Cuban Pete" + name = "Outbomb Cuban Pete" + + + src.updateUsrDialog() + + + +// *** THE ORION TRAIL ** // + +#define ORION_TRAIL_WINTURN 9 + +//Orion Trail Events +#define ORION_TRAIL_RAIDERS "Raiders" +#define ORION_TRAIL_FLUX "Interstellar Flux" +#define ORION_TRAIL_ILLNESS "Illness" +#define ORION_TRAIL_BREAKDOWN "Breakdown" +#define ORION_TRAIL_LING "Changelings?" +#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" +#define ORION_TRAIL_MALFUNCTION "Malfunction" +#define ORION_TRAIL_COLLISION "Collision" +#define ORION_TRAIL_SPACEPORT "Spaceport" +#define ORION_TRAIL_BLACKHOLE "BlackHole" + +#define ORION_STATUS_START 1 +#define ORION_STATUS_NORMAL 2 +#define ORION_STATUS_GAMEOVER 3 +#define ORION_STATUS_MARKET 4 + +/obj/machinery/computer/arcade/orion_trail + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + icon_state = "arcade" + circuit = /obj/item/weapon/circuitboard/computer/arcade/orion_trail + var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game. + var/engine = 0 + var/hull = 0 + var/electronics = 0 + var/food = 80 + var/fuel = 60 + var/turns = 4 + var/alive = 4 + var/eventdat = null + var/event = null + var/list/settlers = list("Harry","Larry","Bob") + var/list/events = list(ORION_TRAIL_RAIDERS = 3, + ORION_TRAIL_FLUX = 1, + ORION_TRAIL_ILLNESS = 3, + ORION_TRAIL_BREAKDOWN = 2, + ORION_TRAIL_LING = 3, + ORION_TRAIL_MALFUNCTION = 2, + ORION_TRAIL_COLLISION = 1, + ORION_TRAIL_SPACEPORT = 2 + ) + var/list/stops = list() + var/list/stopblurbs = list() + var/lings_aboard = 0 + var/spaceport_raided = 0 + var/spaceport_freebie = 0 + var/last_spaceport_action = "" + var/gameStatus = ORION_STATUS_START + var/canContinueEvent = 0 + +/obj/machinery/computer/arcade/orion_trail/New() + ..() + // Sets up the main trail + stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") + stopblurbs = list( + "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", + "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", + "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", + "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", + "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", + "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", + "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", + "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", + "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" + ) + +/obj/machinery/computer/arcade/orion_trail/proc/newgame() + // Set names of settlers in crew + settlers = list() + for(var/i = 1; i <= 3; i++) + add_crewmember() + add_crewmember("[usr]") + // Re-set items to defaults + engine = 1 + hull = 1 + electronics = 1 + food = 80 + fuel = 60 + alive = 4 + turns = 1 + event = null + gameStatus = ORION_STATUS_NORMAL + lings_aboard = 0 + + //spaceport junk + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + +/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) + if(..()) + return + if(fuel <= 0 || food <=0 || settlers.len == 0) + gameStatus = ORION_STATUS_GAMEOVER + event = null + user.set_machine(src) + var/dat = "" + if(gameStatus == ORION_STATUS_GAMEOVER) + dat = "

Game Over

" + dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." + if(settlers.len == 0) + dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." + else + if(food <= 0) + dat += "
You ran out of food and starved." + if(emagged) + user.nutrition = 0 //yeah you pretty hongry + user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." + if(fuel <= 0) + dat += "
You ran out of fuel, and drift, slowly, into a star." + if(emagged) + var/mob/living/M = user + M.adjust_fire_stacks(5) + M.IgniteMob() //flew into a star, so you're on fire + user << "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames." + dat += "

OK...

" + + if(emagged) + user << "You're never going to make it to Orion..." + user.death() + emagged = 0 //removes the emagged status after you lose + gameStatus = ORION_STATUS_START + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + + else if(event) + dat = eventdat + else if(gameStatus == ORION_STATUS_NORMAL) + var/title = stops[turns] + var/subtext = stopblurbs[turns] + dat = "

[title]

" + dat += "[subtext]" + dat += "

Crew:

" + dat += english_list(settlers) + dat += "
Food: [food] | Fuel: [fuel]" + dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + if(turns == 7) + dat += "

Go Around Continue

" + else + dat += "

Continue

" + dat += "

Kill a crewmember

" + dat += "

Close

" + else + dat = "

The Orion Trail

" + dat += "

Experience the journey of your ancestors!



" + dat += "
New Game
" + dat += "

Close

" + var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) + if(..()) + return + if(href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + if(busy) + return + busy = 1 + + if (href_list["continue"]) //Continue your travels + if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) + if(turns >= ORION_TRAIL_WINTURN) + win() + else + food -= (alive+lings_aboard)*2 + fuel -= 5 + if(turns == 2 && prob(30)) + event = ORION_TRAIL_COLLISION + event() + else if(prob(75)) + event = pickweight(events) + if(lings_aboard) + if(event == ORION_TRAIL_LING || prob(55)) + event = ORION_TRAIL_LING_ATTACK + event() + turns += 1 + if(emagged) + var/mob/living/carbon/M = usr //for some vars + switch(event) + if(ORION_TRAIL_RAIDERS) + if(prob(50)) + usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?" + M.hallucination += 30 + else + usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..." + M.take_organ_damage(30) + playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) + if(ORION_TRAIL_ILLNESS) + var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS + if(severity == 1) + M << "You suddenly feel slightly nauseous." //got off lucky + if(severity == 2) + usr << "You suddenly feel extremely nauseous and hunch over until it passes." + M.Stun(3) + if(severity >= 3) //you didn't pray hard enough + M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit." + M.Stun(5) + sleep(30) + M.vomit(50) + if(ORION_TRAIL_FLUX) + if(prob(75)) + M.Weaken(3) + say("A sudden gust of powerful wind slams [M] into the floor!") + M.take_organ_damage(25) + playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) + else + M << "A violent gale blows past you, and you barely manage to stay standing!" + if(ORION_TRAIL_COLLISION) //by far the most damaging event + if(prob(90)) + playsound(src.loc, 'sound/effects/bang.ogg', 100, 1) + var/turf/open/floor/F + for(F in orange(1, src)) + F.ChangeTurf(F.baseturf) + say("Something slams into the floor around [src], exposing it to space!") + if(hull) + sleep(10) + say("A new floor suddenly appears around [src]. What the hell?") + playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1) + var/turf/open/space/T + for(T in orange(1, src)) + T.ChangeTurf(/turf/open/floor/plating/) + else + say("Something slams into the floor around [src] - luckily, it didn't get through!") + playsound(src.loc, 'sound/effects/bang.ogg', 50, 1) + if(ORION_TRAIL_MALFUNCTION) + playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1) + src.visible_message("[src] malfunctions, randomizing in-game stats!") + var/oldfood = food + var/oldfuel = fuel + food = rand(10,80) / rand(1,2) + fuel = rand(10,60) / rand(1,2) + if(electronics) + sleep(10) + if(oldfuel > fuel && oldfood > food) + src.audible_message("[src] lets out a somehow reassuring chime.") + else if(oldfuel < fuel || oldfood < food) + src.audible_message("[src] lets out a somehow ominous chime.") + food = oldfood + fuel = oldfuel + playsound(src.loc, 'sound/machines/chime.ogg', 50, 1) + + else if(href_list["newgame"]) //Reset everything + if(gameStatus == ORION_STATUS_START) + newgame() + else if(href_list["menu"]) //back to the main menu + if(gameStatus == ORION_STATUS_GAMEOVER) + gameStatus = ORION_STATUS_START + event = null + food = 80 + fuel = 60 + settlers = list("Harry","Larry","Bob") + else if(href_list["slow"]) //slow down + if(event == ORION_TRAIL_FLUX) + food -= (alive+lings_aboard)*2 + fuel -= 5 + event = null + else if(href_list["pastblack"]) //slow down + if(turns == 7) + food -= ((alive+lings_aboard)*2)*3 + fuel -= 15 + turns += 1 + event = null + else if(href_list["useengine"]) //use parts + if(event == ORION_TRAIL_BREAKDOWN) + engine = max(0, --engine) + event = null + else if(href_list["useelec"]) //use parts + if(event == ORION_TRAIL_MALFUNCTION) + electronics = max(0, --electronics) + event = null + else if(href_list["usehull"]) //use parts + if(event == ORION_TRAIL_COLLISION) + hull = max(0, --hull) + event = null + else if(href_list["wait"]) //wait 3 days + if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) + food -= ((alive+lings_aboard)*2)*3 + event = null + else if(href_list["keepspeed"]) //keep speed + if(event == ORION_TRAIL_FLUX) + if(prob(75)) + event = "Breakdown" + event() + else + event = null + else if(href_list["blackhole"]) //keep speed past a black hole + if(turns == 7) + if(prob(75)) + event = ORION_TRAIL_BLACKHOLE + event() + if(emagged) //has to be here because otherwise it doesn't work + playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1) + say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") + usr.Stun(10) //you can't run :^) + var/S = new /obj/singularity/academy(usr.loc) + emagged = 0 //immediately removes emagged status so people can't kill themselves by sprinting up and interacting + sleep(50) + say("[S] winks out, just as suddenly as it appeared.") + qdel(S) + else + event = null + turns += 1 + else if(href_list["holedeath"]) + if(event == ORION_TRAIL_BLACKHOLE) + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(href_list["eventclose"]) //end an event + if(canContinueEvent) + event = null + + else if(href_list["killcrew"]) //shoot a crewmember + if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) + var/sheriff = remove_crewmember() //I shot the sheriff + playsound(loc,'sound/weapons/Gunshot.ogg', 100, 1) + + if(settlers.len == 0 || alive == 0) + say("The last crewmember [sheriff], shot themselves, GAME OVER!") + if(emagged) + usr.death(0) + emagged = 0 + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(emagged) + if(usr.name == sheriff) + say("The crew of the ship chose to kill [usr.name]!") + usr.death(0) + + if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places + event = null + + //Spaceport specific interactions + //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) + //they also call event() again, to regen the eventdata, which is kind of odd but necessary + else if(href_list["buycrew"]) //buy a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && food >= 10 && fuel >= 10) + var/bought = add_crewmember() + last_spaceport_action = "You hired [bought] as a new crewmember." + fuel -= 10 + food -= 10 + event() + + else if(href_list["sellcrew"]) //sell a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && settlers.len > 1) + var/sold = remove_crewmember() + last_spaceport_action = "You sold your crewmember, [sold]!" + fuel += 7 + food += 7 + event() + + else if(href_list["leave_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + event = null + gameStatus = ORION_STATUS_NORMAL + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + + else if(href_list["raid_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + var/success = min(15 * alive,100) //default crew (4) have a 60% chance + spaceport_raided = 1 + + var/FU = 0 + var/FO = 0 + if(prob(success)) + FU = rand(5,15) + FO = rand(5,15) + last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" + else + FU = rand(-5,-15) + FO = rand(-5,-15) + last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" + + //your chance of lose a crewmember is 1/2 your chance of success + //this makes higher % failures hurt more, don't get cocky space cowboy! + if(prob(success*5)) + var/lost_crew = remove_crewmember() + last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" + if(emagged) + say("WEEWOO WEEWOO, Spaceport Security en route!") + for(var/i, i<=3, i++) + var/mob/living/simple_animal/hostile/syndicate/ranged/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/orion(get_turf(src)) + O.target = usr + + + fuel += FU + food += FO + event() + + else if(href_list["buyparts"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && fuel > 5) + switch(text2num(href_list["buyparts"])) + if(1) //Engine Parts + engine++ + last_spaceport_action = "Bought Engine Parts" + if(2) //Hull Plates + hull++ + last_spaceport_action = "Bought Hull Plates" + if(3) //Spare Electronics + electronics++ + last_spaceport_action = "Bought Spare Electronics" + fuel -= 5 //they all cost 5 + event() + + else if(href_list["trade"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + switch(text2num(href_list["trade"])) + if(1) //Fuel + if(fuel > 5) + fuel -= 5 + food += 5 + last_spaceport_action = "Traded Fuel for Food" + event() + if(2) //Food + if(food > 5) + fuel += 5 + food -= 5 + last_spaceport_action = "Traded Food for Fuel" + event() + + src.add_fingerprint(usr) + src.updateUsrDialog() + busy = 0 + return + + +/obj/machinery/computer/arcade/orion_trail/proc/event() + eventdat = "

[event]

" + canContinueEvent = 0 + switch(event) + if(ORION_TRAIL_RAIDERS) + eventdat += "Raiders have come aboard your ship!" + if(prob(50)) + var/sfood = rand(1,10) + var/sfuel = rand(1,10) + food -= sfood + fuel -= sfuel + eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." + else if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] tried to fight back but was killed." + else + eventdat += "
Fortunately you fended them off without any trouble." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_FLUX) + eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." + eventdat += "
What will you do?" + eventdat += "

Slow Down Continue

" + eventdat += "

Close

" + + if(ORION_TRAIL_ILLNESS) + eventdat += "A deadly illness has been contracted!" + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by the disease." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_BREAKDOWN) + eventdat += "Oh no! The engine has broken down!" + eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." + if(engine >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_MALFUNCTION) + eventdat += "The ship's systems are malfunctioning!" + eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." + if(electronics >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_COLLISION) + eventdat += "Something hit us! Looks like there's some hull damage." + if(prob(25)) + var/sfood = rand(5,15) + var/sfuel = rand(5,15) + food -= sfood + fuel -= sfuel + eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." + if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by rapid depressurization." + eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." + if(hull >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_BLACKHOLE) + eventdat += "You were swept away into the black hole." + eventdat += "

Oh...

" + eventdat += "

Close

" + settlers = list() + + if(ORION_TRAIL_LING) + eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." + if(settlers.len <= 2) + eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." + eventdat += "

Continue

" + eventdat += "

Close

" + if(prob(10)) // "likely", I didn't say it was guaranteed! + lings_aboard = min(++lings_aboard,2) + else + if(lings_aboard) //less likely to stack lings + if(prob(20)) + lings_aboard = min(++lings_aboard,2) + else if(prob(70)) + lings_aboard = min(++lings_aboard,2) + + eventdat += "

Kill a crewmember

" + eventdat += "

Risk it

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_LING_ATTACK) + if(lings_aboard <= 0) //shouldn't trigger, but hey. + eventdat += "Haha, fooled you, there are no changelings on board!" + eventdat += "
(You should report this to a coder :S)" + else + var/ling1 = remove_crewmember() + var/ling2 = "" + if(lings_aboard >= 2) + ling2 = remove_crewmember() + + eventdat += "Oh no, some of your crew are Changelings!" + if(ling2) + eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" + else + eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" + + var/chance2attack = alive*20 + if(prob(chance2attack)) + var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance + if(prob(chancetokill)) + var/deadguy = remove_crewmember() + eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!" + else + eventdat += "
You valiantly fight off the Changeling[ling2 ? "s":""]!" + eventdat += "
You cut the Changeling[ling2 ? "s":""] up into meat... Eww" + if(ling2) + food += 30 + lings_aboard = max(0,lings_aboard-2) + else + food += 15 + lings_aboard = max(0,--lings_aboard) + else + eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] away, What wimps!" + if(ling2) + lings_aboard = max(0,lings_aboard-2) + else + lings_aboard = max(0,--lings_aboard) + + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + + if(ORION_TRAIL_SPACEPORT) + gameStatus = ORION_STATUS_MARKET + if(spaceport_raided) + eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!" + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Depart Spaceport

" + eventdat += "

Close

" + else + eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!" + eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." + eventdat += "
Trading terms: FU = Fuel, FO = Food" + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Crew:

" + eventdat += english_list(settlers) + eventdat += "
Food: [food] | Fuel: [fuel]" + eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + + + //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) + if(!spaceport_freebie && (fuel < 20 || food < 20)) + spaceport_freebie++ + var/FU = 10 + var/FO = 10 + var/freecrew = 0 + if(prob(30)) + FU = 25 + FO = 25 + + if(prob(10)) + add_crewmember() + freecrew++ + + eventdat += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)" + if(freecrew) + eventdat += "
You also gain a new crewmember!" + + fuel += FU + food += FO + + //CREW INTERACTIONS + eventdat += "

Crew Management:

" + + //Buy crew + if(food >= 10 && fuel >= 10) + eventdat += "

Hire a new Crewmember (-10FU,-10FO)

" + else + eventdat += "

Cant afford a new Crewmember

" + + //Sell crew + if(settlers.len > 1) + eventdat += "

Sell crew for Fuel and Food (+7FU,+7FO)

" + else + eventdat += "

Cant afford to sell a Crewmember

" + + //BUY/SELL STUFF + eventdat += "

Spare Parts:

" + + //Engine parts + if(fuel > 5) + eventdat += "

Buy Engine Parts (-5FU)

" + else + eventdat += "

Cant afford to buy Engine Parts" + + //Hull plates + if(fuel > 5) + eventdat += "

Buy Hull Plates (-5FU)

" + else + eventdat += "

Cant afford to buy Hull Plates" + + //Electronics + if(fuel > 5) + eventdat += "

Buy Spare Electronics (-5FU)

" + else + eventdat += "

Cant afford to buy Spare Electronics" + + //Trade + if(fuel > 5) + eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" + else + eventdat += "

Cant afford to Trade Fuel for Food 5) + eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" + else + eventdat += "

Cant afford to Trade Food for FuelYou override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." + name = "The Orion Trail: Realism Edition" + desc = "Learn how our ancestors got to Orion, and try not to die in the process!" + newgame() + emagged = 1 + +/mob/living/simple_animal/hostile/syndicate/ranged/orion + name = "Spaceport Security" + desc = "The Premier security forces for all spaceports found along the Orion Trail." + faction = list("orion") + loot = list(/obj/effect/mob_spawn/human/corpse/orionsecurity, + /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted, + /obj/item/weapon/shield/energy) + +/obj/effect/mob_spawn/human/corpse/orionsecurity + name = "Spaceport Security" + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/armor/vest + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + radio = /obj/item/device/radio/headset + mask = /obj/item/clothing/mask/gas + helmet = /obj/item/clothing/head/helmet/swat + back = /obj/item/weapon/storage/backpack + has_id = 1 + id_job = "Officer" + id_access = "Syndicate" + +/obj/item/weapon/orion_ship + name = "model settler ship" + desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." + icon = 'icons/obj/toy.dmi' + icon_state = "ship" + w_class = 2 + var/active = 0 //if the ship is on + +/obj/item/weapon/orion_ship/examine(mob/user) + ..() + if(!(in_range(user, src))) + return + if(!active) + user << "There's a little switch on the bottom. It's flipped down." + else + user << "There's a little switch on the bottom. It's flipped up." + +/obj/item/weapon/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse + if(active) + return + + message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") + log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") + + user << "You flip the switch on the underside of [src]." + active = 1 + src.visible_message("[src] softly beeps and whirs to life!") + playsound(src.loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) + say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") + sleep(20) + src.visible_message("[src] begins to vibrate...") + say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") + sleep(30) + say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) + sleep(3.6) + src.visible_message("[src] explodes!") + explosion(src.loc, 2,4,8, flame_range = 16) + qdel(src) + + +#undef ORION_TRAIL_WINTURN +#undef ORION_TRAIL_RAIDERS +#undef ORION_TRAIL_FLUX +#undef ORION_TRAIL_ILLNESS +#undef ORION_TRAIL_BREAKDOWN +#undef ORION_TRAIL_LING +#undef ORION_TRAIL_LING_ATTACK +#undef ORION_TRAIL_MALFUNCTION +#undef ORION_TRAIL_COLLISION +#undef ORION_TRAIL_SPACEPORT +#undef ORION_TRAIL_BLACKHOLE + +#undef ORION_STATUS_START +#undef ORION_STATUS_NORMAL +#undef ORION_STATUS_GAMEOVER +#undef ORION_STATUS_MARKET diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index dc0b949a187..f6011552816 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -356,7 +356,7 @@ if (!subject.getorgan(/obj/item/organ/brain)) scantemp = "No signs of intelligence detected." return - if (subject.suiciding == 1) + if (subject.suiciding == 1 || subject.hellbound) scantemp = "Subject's brain is not responding to scanning stimuli." return if ((subject.disabilities & NOCLONE) && (src.scanner.scan_level < 2)) diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 192ff9df7d1..45f7b995486 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -111,7 +111,7 @@ || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ || locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \ || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) - if(!occupant.suiciding && !(occupant.disabilities & NOCLONE)) + if(!occupant.suiciding && !(occupant.disabilities & NOCLONE) && !occupant.hellbound) occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) var/obj/machinery/computer/scan_consolenew/console diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f7ffd73e691..6ff3d3ff714 100755 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -9,6 +9,7 @@ * Snap pops * Mech prizes * AI core prizes + * Toy codex gigas * Skeleton toys * Cards * Toy nuke @@ -695,6 +696,29 @@ return ..() +/obj/item/toy/codex_gigas + name = "Toy Codex Gigas" + desc = "A tool to help you write fictional devils!" + icon = 'icons/obj/library.dmi' + icon_state = "demonomicon" + w_class = 2 + var/cooldown = 0 + +/obj/item/toy/codex_gigas/attack_self(mob/user) + if(!cooldown) + var/datum/devilinfo/devil = randomDevilInfo() + user << "You press the button on [src]." + cooldown = 1 + playsound(user, 'sound/machines/click.ogg', 20, 1) + src.loc.visible_message("\icon[src]Some fun facts about: [devil.truename]") + src.loc.visible_message("[lawlorify[LORE][devil.bane]]") + src.loc.visible_message("[lawlorify[LORE][devil.obligation]]") + src.loc.visible_message("[lawlorify[LORE][devil.ban]]") + src.loc.visible_message("[lawlorify[LORE][devil.banish]]") + spawn(60) cooldown = 0 + return + ..() + /obj/item/toy/talking name = "talking action figure" desc = "A generic action figure modeled after nothing in particular." diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 9e5ecd557b7..5517716c4bf 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -463,7 +463,7 @@ busy = 0 update_icon() return - if(!H.suiciding && !(H.disabilities & NOCLONE)) + if(!H.suiciding && !(H.disabilities & NOCLONE)&& !H.hellbound) H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...") @@ -497,6 +497,8 @@ if (H.suiciding || (H.disabilities & NOCLONE)) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." + else if (H.hellbound) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existance. Further attempts futile." else if (tplus > tlimit) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile." else if (!H.getorgan(/obj/item/organ/heart)) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index e8bbfbed48e..52d218bd81d 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -418,3 +418,64 @@ M.faction = user.faction.Copy() M.Copy_Parent(user, 100, user.health/2.5, 12, 30) M.GiveTarget(L) + + + + +/obj/item/weapon/twohanded/pitchfork + icon_state = "pitchfork0" + name = "pitchfork" + desc = "A simple tool used for moving hay." + force = 7 + throwforce = 15 + w_class = 4 + force_unwielded = 7 + force_wielded = 15 + attack_verb = list("attacked", "impaled", "pierced") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP + +/obj/item/weapon/twohanded/pitchfork/demonic + name = "demonic pitchfork" + desc = "A red pitchfork, it looks like the work of the devil." + force = 19 + throwforce = 24 + force_unwielded = 19 + force_wielded = 25 + +/obj/item/weapon/twohanded/pitchfork/demonic/greater + force = 24 + throwforce = 50 + force_unwielded = 24 + force_wielded = 34 + +/obj/item/weapon/twohanded/pitchfork/demonic/ascended + force = 100 + throwforce = 100 + force_unwielded = 100 + force_wielded = 500000 // Kills you DEAD. + +/obj/item/weapon/twohanded/pitchfork/update_icon() //Currently only here to fuck with the on-mob icons. + icon_state = "pitchfork[wielded]" + +/obj/item/weapon/twohanded/pitchfork/suicide_act(mob/user) + user.visible_message("[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide..") + return (BRUTELOSS) + +/obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/user) + if(istype(user, /mob/living)) + var/mob/living/U = user + if(!U.mind.devilinfo) + U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ + "\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"") + if(ishuman(U)) + var/mob/living/carbon/human/H = U + H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) + else + U.adjustFireLoss(rand(force/2,force)) + +/obj/item/weapon/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) + if(!user.mind.devilinfo) + user << "The [src] burns in your hands." + user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) + ..() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 60129c99d52..87773f725a3 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -699,6 +699,14 @@ var/global/BSACooldown = 0 if(!ai_number) usr << "No AIs located" //Just so you know the thing is actually working and not just ignoring you. +/datum/admins/proc/output_devil_info() + var/devil_number = 0 + for(var/D in ticker.mode.devils) + devil_number++ + usr << "Devil #[devil_number]:

" + ticker.mode.printdevilinfo(D) + if(!devil_number) + usr << "No Devils located" //Just so you know the thing is actually working and not just ignoring you. + /datum/admins/proc/manage_free_slots() if(!check_rights()) return diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index b8e4aee8728..220b1b4c9e9 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -437,7 +437,7 @@ if(M) dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" - dat += "FLW" + dat += "FLW" dat += "Show Objective" else dat += "[wizard.name]([wizard.key])Wizard body destroyed!" @@ -592,6 +592,35 @@ dat += "PM" dat += "" + if(ticker.mode.devils.len) + dat += "
" + for(var/X in ticker.mode.devils) + var/datum/mind/devil = X + var/mob/M = devil.current + if(M) + dat += "" + dat += "" + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "
devils
[M.real_name] : [devil.devilinfo.truename][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PMShow Objective
Show all devil info
[devil.name] : [devil.devilinfo.truename] ([devil.key])devil body destroyed!
PM
" + + if(ticker.mode.sintouched.len) + dat += "
" + for(var/X in ticker.mode.sintouched) + var/datum/mind/sintouched = X + var/mob/M = sintouched.current + if(M) + dat += "" + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "
sintouched
[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PMShow Objective
[sintouched.name]([sintouched.key])sintouched body destroyed!
PM
" + var/list/blob_minds = list() for(var/mob/camera/blob/B in mob_list) blob_minds |= B.mind diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 012c704f2c3..4b0278dac25 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1608,6 +1608,9 @@ else if(href_list["adminchecklaws"]) output_ai_laws() + + else if(href_list["admincheckdevilinfo"]) + output_devil_info() else if(href_list["adminmoreinfo"]) var/mob/M = locate(href_list["adminmoreinfo"]) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c459acf5217..2f678e92241 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -343,7 +343,6 @@ BLIND // can't see anything var/suit_color = null var/obj/item/clothing/tie/hastie = null - /obj/item/clothing/under/worn_overlays(var/isinhands = FALSE) . = list() diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index a9c3e2177c7..428633cdbd0 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -118,4 +118,4 @@ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." icon_state = "scrubspurple" item_color = "scrubspurple" - can_adjust = 0 + can_adjust = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c5557aed119..da4ce9a3e0c 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -244,6 +244,13 @@ item_state = "white_suit" item_color = "white_suit" +/obj/item/clothing/under/burial + name = "burial garments" + desc = "Traditional burial garments from the early 22nd century." + icon_state = "burial" + item_state = "burial" + item_color = "burial" + /obj/item/clothing/under/blackskirt name = "black skirt" desc = "A black skirt, very fancy!" diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food&drinks/food/snacks.dm index 7ba88bcd75a..2a790645521 100644 --- a/code/modules/food&drinks/food/snacks.dm +++ b/code/modules/food&drinks/food/snacks.dm @@ -44,6 +44,8 @@ /obj/item/weapon/reagent_containers/food/snacks/attack(mob/M, mob/user, def_zone) + if(user.a_intent == "harm") + return ..() if(!eatverb) eatverb = pick("bite","chew","nibble","gnaw","gobble","chomp") if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 88f6b0d5af4..9996e4f5cf3 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -66,6 +66,9 @@ else if(M.ckey == ckey && M.stat == DEAD && !M.suiciding) make_podman = 1 + if(istype(M, /mob/living)) + var/mob/living/L = M + make_podman = !L.hellbound break else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key for(var/mob/M in player_list) @@ -75,6 +78,9 @@ if(!O.can_reenter_corpse) break make_podman = 1 + if(istype(M, /mob/living)) + var/mob/living/L = M + make_podman = !L.hellbound ckey_holder = M.ckey break diff --git a/code/modules/library/lib_demonomicon.dm b/code/modules/library/lib_demonomicon.dm new file mode 100644 index 00000000000..88a10b0720b --- /dev/null +++ b/code/modules/library/lib_demonomicon.dm @@ -0,0 +1,56 @@ +/obj/item/weapon/book/codex_gigas + name = "Codex Gigas" + icon_state ="demonomicon" + throw_speed = 1 + throw_range = 10 + burn_state = LAVA_PROOF + author = "Forces beyond your comprehension" + unique = 1 + title = "The codex gigas" + var/inUse = 0 + + + + + +/obj/item/weapon/book/codex_gigas/attack_self(mob/user) + if(is_blind(user)) + return + if(ismonkey(user)) + user << "You skim through the book but can't comprehend any of it." + return + if(inUse) + user << "Someone else is reading it." + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(U.check_acedia()) + user << "None of this matters, why are you reading this? You put the [title] down." + return + inUse = 1 + var/devilName = copytext(sanitize(input(user, "What infernal being do you wish to research?", "Codex Gigas", null) as text),1,MAX_MESSAGE_LEN) + var/speed = 300 + var/correctness = 85 + var/willpower = 80 + if(U.job in list("Librarian")) // the librarian is both faster, and more accurate than normal crew members at research + speed = 45 + correctness = 100 + willpower = 95 + if(U.job in list("Captain", "Security Officer", "Head of Security", "Detective", "Warden")) + willpower = 90 + if(U.job in list("Clown")) // WHO GAVE THE CLOWN A DEMONOMICON? BAD THINGS WILL HAPPEN! + willpower = 25 + correctness -= U.getBrainLoss() *0.5 //Brain damage makes researching hard. + speed += U.getBrainLoss() * 3 + user.visible_message("[user] opens [title] and begins reading intently.") + if(do_after(U, speed, 0, U)) + var/usedName = devilName + if(!prob(correctness)) + usedName += "x" + var/datum/devilinfo/devil = devilInfo(usedName, 0) + user << browse("Information on [devilName]


[lawlorify[LORE][devil.ban]]
[lawlorify[LORE][devil.bane]]
[lawlorify[LORE][devil.obligation]]
[lawlorify[LORE][devil.banish]]", "window=book[window_size != null ? ";size=[window_size]" : ""]") + inUse = 0 + sleep(10) + if(!prob(willpower)) + U.influenceSin() + onclose(user, "book") + diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 34d64e5dc01..761355fd6e6 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -136,6 +136,7 @@ /mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0) . = ..() + var/damage = intensity - check_eye_prot() if(.) // we've been flashed if(visual) @@ -169,10 +170,15 @@ src << "You can't see anything!" else src << "Your eyes are really starting to hurt. This can't be good for you!" + if(has_bane(BANE_LIGHT)) + mind.disrupt_spells(-500) return 1 else if(damage == 0) // just enough protection if(prob(20)) src << "Something bright flashes in the corner of your vision!" + if(has_bane(BANE_LIGHT)) + mind.disrupt_spells(0) + //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 3b8bb513a9e..393e7e9f2e5 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -31,7 +31,10 @@ if(ticker && ticker.mode) sql_report_death(src) ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now - return ..(gibbed) + . = ..(gibbed) + if(mind && mind.devilinfo) + spawn(0) + mind.devilinfo.beginResurrectionCheck(src) /mob/living/carbon/human/proc/makeSkeleton() status_flags |= DISFIGURED diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 68c786f3d10..df0e5344f19 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -174,6 +174,8 @@ if(getorgan(/obj/item/organ/brain))//Only perform these checks if there is no brain if(suiciding) msg += "[t_He] appears to have commited suicide... there is no hope of recovery.\n" + if(hellbound) + msg += "[t_his] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" if(!key) var/foundghost = 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9ae245d91b8..d3818e71d5a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -990,3 +990,41 @@ if(HM.quality != POSITIVE) dna.remove_mutation(HM.name) ..() + +/mob/living/carbon/human/proc/influenceSin() + var/datum/objective/sintouched/O + switch(rand(1,7))//traditional seven deadly sins... except lust. + if(1) // acedia + log_game("[src] was influenced by the sin of Acedia.") + O = new /datum/objective/sintouched/acedia + if(2) // Gluttony + log_game("[src] was influenced by the sin of gluttony.") + O = new /datum/objective/sintouched/gluttony + if(3) // Greed + log_game("[src] was influenced by the sin of greed.") + O = new /datum/objective/sintouched/greed + if(4) // sloth + log_game("[src] was influenced by the sin of sloth.") + O = new /datum/objective/sintouched/sloth + if(5) // Wrath + log_game("[src] was influenced by the sin of wrath.") + O = new /datum/objective/sintouched/wrath + if(6) // Envy + log_game("[src] was influenced by the sin of envy.") + O = new /datum/objective/sintouched/envy + if(7) // Pride + log_game("[src] was influenced by the sin of pride.") + O = new /datum/objective/sintouched/pride + ticker.mode.sintouched += src.mind + src.mind.objectives += O + var/obj_count = 1 + src << "Your current objectives:" + for(O in src.mind.objectives) + var/datum/objective/objective = O + src << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + +/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker) + . = ..() + if (dna && dna.species) + . += dna.species.check_weakness(weapon, attacker) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a9bfdce73cb..c38e28567ac 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -679,6 +679,9 @@ /datum/species/proc/get_spans() return list() +/datum/species/proc/check_weakness(obj/item/weapon, mob/living/attacker) + return 0 + //////// //LIFE// //////// @@ -1023,7 +1026,8 @@ armor_block = min(90,armor_block) //cap damage reduction at 90% var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords) - apply_damage(I.force, I.damtype, def_zone, armor_block, H) + var/weakness = H.check_weakness(I, user) + apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) H.send_item_attack_message(I, user, hit_area) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 77c3a6c6d0d..4084b11b26e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -212,7 +212,7 @@ return internal.remove_air_volume(volume_needed) /mob/living/carbon/proc/handle_changeling() - if(mind && hud_used) + if(mind && hud_used && hud_used.lingchemdisplay) if(mind.changeling) mind.changeling.regenerate(src) hud_used.lingchemdisplay.invisibility = 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 06f6492e9ae..aff9f035297 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -505,7 +505,7 @@ Sorry Giacom. Please don't be mad :( ear_deaf = 0 ear_damage = 0 hallucination = 0 - heal_overall_damage(1000, 1000) + heal_overall_damage(100000, 100000) ExtinguishMob() fire_stacks = 0 updatehealth() @@ -610,7 +610,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/movement_delay() . = ..() - if(istype(loc, /turf/open)) + if(isturf(loc, /turf/open)) var/turf/open/T = loc . += T.slowdown switch(m_intent) @@ -995,3 +995,29 @@ Sorry Giacom. Please don't be mad :( /mob/proc/update_sight() return + +/mob/living/proc/owns_soul() + if(mind) + return mind.soulOwner == mind + return 1 + +/mob/living/proc/return_soul() + if(mind) + mind.soulOwner = mind + +/mob/living/proc/has_bane(banetype) + if(mind) + if(mind.devilinfo) + return mind.devilinfo.bane == banetype + return 0 + +/mob/living/proc/check_weakness(obj/item/weapon, mob/living/attacker) + if(mind && mind.devilinfo) + return check_devil_bane_multiplier(weapon, attacker) + return 1 + +/mob/living/proc/check_acedia() + if(src.mind && src.mind.objectives) + for(var/datum/objective/sintouched/acedia/A in src.mind.objectives) + return 1 + return 0 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 2406a5ba0ed..dab7e893b8a 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -59,3 +59,5 @@ var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666) var/list/butcher_results = null + var/hellbound = 0 //People who've signed infernal contracts are unrevivable. + diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 0ce588cdd87..e32fca72536 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -224,6 +224,7 @@ Auto Patrol: []"}, C.Weaken(5) C.stuttering = 5 C.Stun(5) + threat = C.assess_threat() add_logs(src,C,"stunned") if(declare_arrests) var/area/location = get_area(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 78a44680a2a..e4de12e8ac3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -762,11 +762,7 @@ var/next_mob_id = 0 /mob/proc/get_ghost(even_if_they_cant_reenter = 0) if(mind) - for(var/mob/dead/observer/G in dead_mob_list) - if(G.mind == mind) - if(G.can_reenter_corpse || even_if_they_cant_reenter) - return G - break + return mind.get_ghost(even_if_they_cant_reenter) /mob/proc/notify_ghost_cloning(var/message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", var/sound = 'sound/effects/genetics.ogg', var/atom/source = null) var/mob/dead/observer/ghost = get_ghost() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 1971867a5ae..2861e2e41aa 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -320,6 +320,7 @@ data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn AnnounceArrival(character, rank) + AddEmploymentContract(character) else character.Robotize() @@ -342,6 +343,15 @@ var/obj/machinery/announcement_system/announcer = pick(announcement_systems) announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common +/mob/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee) + //TODO: figure out a way to exclude wizards/nukeops/demons from this. + sleep(30) + for(var/C in employmentCabinets) + var/obj/structure/filingcabinet/employment/employmentCabinet = C + if(!employmentCabinet.virgin) + employmentCabinet.addFile(employee) + + /mob/new_player/proc/LateChoices() var/mills = world.time // 1/10 of a second, not real milliseconds but whatever //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index fca202896d1..b285351259b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -53,6 +53,8 @@ if(suiciding) O.suiciding = suiciding + if(hellbound) + O.hellbound = hellbound O.loc = loc O.a_intent = "harm" @@ -170,6 +172,8 @@ if(suiciding) O.suiciding = suiciding + if(hellbound) + O.hellbound = hellbound O.loc = loc diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm new file mode 100644 index 00000000000..7f67ef9e3d3 --- /dev/null +++ b/code/modules/paperwork/contract.dm @@ -0,0 +1,265 @@ +/* For employment contracts and infernal contracts */ + +/obj/item/weapon/paper/contract + throw_range = 3 + throw_speed = 3 + var/signed = 0 + var/datum/mind/target + flags = NOBLUDGEON + +/obj/item/weapon/paper/contract/proc/update_text() + return + +/obj/item/weapon/paper/contract/update_icon() + return + + +/obj/item/weapon/paper/contract/employment + icon_state = "paper_words" + +/obj/item/weapon/paper/contract/employment/New(atom/loc, mob/living/nOwner) + . = ..() + if(!nOwner || !nOwner.mind) + qdel(src) + return -1 + target = nOwner.mind + update_text(nOwner) + + +/obj/item/weapon/paper/contract/employment/update_text() + name = "paper- [target] employment contract" + info = "

Conditions of Employment




This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
WITNESSETH:
WHEREAS, SLAVE is a natural born human or humanoid, posessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanant servitude.
NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
Should transfership of a soul not be possible, a lien shall be placed instead.
Signed,
[target]" + + +/obj/item/weapon/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user) + var/deconvert = 0 + if(M.mind == target && target.soulOwner != target) + if(user.mind && (user.mind.assigned_role == "Lawyer")) + deconvert = prob (25) + else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "Centcom Commander")) + deconvert = prob (10) // the HoP doesn't have AS much legal training + if(deconvert) + M.visible_message("[user] reminds [M] that [M]'s soul was already purchased by Nanotrasen!") + M << "You feel that your soul has returned to it's rightful owner, Nanotrasen." + M.return_soul() + else + if(ishuman(M)) + var/mob/living/carbon/human/N = M + if(!istype(N.head, /obj/item/clothing/head/helmet)) + N.adjustBrainLoss(10) + N << "You feel dumber." + M.visible_message("[user] beats [M] over the head with [src]!", \ + "[user] beats [M] over the head with [src]!") + return ..() + + +/obj/item/weapon/paper/contract/infernal + var/contractType = 0 + burn_state = LAVA_PROOF + var/datum/mind/owner + icon_state = "paper_onfire" + +/obj/item/weapon/paper/contract/infernal/power + name = "paper- contract for infernal power" + contractType = CONTRACT_POWER + +/obj/item/weapon/paper/contract/infernal/wealth + name = "paper- contract for unlimited wealth" + contractType = CONTRACT_WEALTH + +/obj/item/weapon/paper/contract/infernal/prestige + name = "paper- contract for prestige" + contractType = CONTRACT_PRESTIGE + +/obj/item/weapon/paper/contract/infernal/magic + name = "paper- contract for magical power" + contractType = CONTRACT_MAGIC + +/obj/item/weapon/paper/contract/infernal/revive + name = "paper- contract of resurrection" + contractType = CONTRACT_REVIVE + +/obj/item/weapon/paper/contract/infernal/knowledge + name = "paper- contract for knowledge" + contractType = CONTRACT_KNOWLEDGE + +/obj/item/weapon/paper/contract/infernal/unwilling + name = "paper- infernal contract" + contractType = CONTRACT_UNWILLING + +/obj/item/weapon/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner) + ..() + owner = nOwner + target = nTarget + update_text() + +/obj/item/weapon/paper/contract/infernal/ + +/obj/item/weapon/paper/contract/infernal/suicide_act(mob/user) + if(signed && (user == target.current) && istype(user,/mob/living/carbon/human/)) + var/mob/living/carbon/human/H = user + H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!") + H.visible_message("[H] holds up a contract claiming his soul, then immediately catches fire. It looks like \he's trying to commit suicide!") + H.adjust_fire_stacks(20) + H.IgniteMob() + return(FIRELOSS) + else + ..() + +/obj/item/weapon/paper/contract/infernal/update_text() + info = "This shouldn't be seen. Error DEVIL:5" + +/obj/item/weapon/paper/contract/infernal/power/update_text(var/signature = "____________") + info = "
Contract for infernal power



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/wealth/update_text(var/signature = "____________") + info = "
Contract for unlimited wealth



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/prestige/update_text(var/signature = "____________") + info = "
Contract for prestige



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/magic/update_text(var/signature = "____________") + info = "
Contract for magic



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/revive/update_text(var/signature = "____________") + info = "
Contract for resurrection



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/knowledge/update_text(var/signature = "____________") + info = "
Contract for knowledge



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/unwilling/update_text(var/signature = "____________") + info = "
Contract for slave



I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, [signature]" + +/obj/item/weapon/paper/contract/infernal/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) + add_fingerprint(user) + if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) + attempt_signature(user) + else if(istype(P, /obj/item/weapon/stamp)) + user << "You stamp the paper with your rubber stamp, however the ink ignites as you release the stamp." + else if(P.is_hot()) + user.visible_message("[user] brings [P] next to [src], but [src] does not catch fire!", "The [src] refuses to ignite!") + else + return ..() + +/obj/item/weapon/paper/contract/infernal/attack(mob/M, mob/living/user) + add_fingerprint(user) + if(M == user && target == M.mind && M.mind.soulOwner == M.mind && attempt_signature(user)) + user.visible_message("[user] slices their wrist with [src], and scrawls their name in blood.", "You slice your wrist open and scrawl your name in blood.") + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.vessel.remove_reagent("blood",10) + else + return ..() + +/obj/item/weapon/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user) + if(user.IsAdvancedToolUser()) + if(user.mind == target) + if(user.mind.soulOwner == user.mind) + if (contractType == CONTRACT_REVIVE) + user << "You are already alive, this contract would do nothing." + else + user << "You quickly scrawl your name on the contract" + if(FulfillContract()<=0) + user << "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?" + return 1 + else + user << "You are not in possession of your soul, you may not sell it." + else + user << "Your signature simply slides off of the sheet, it seems this contract is not meant for you to sign." + else + user << "You don't know how to read or write." + return 0 + + + +/obj/item/weapon/paper/contract/infernal/revive/attack(mob/M, mob/living/user) + if (target == M.mind && M.stat == DEAD && M.mind.soulOwner == M.mind) + var/mob/living/carbon/human/H = M + var/mob/dead/observer/ghost = H.get_ghost() + var/response = "No" + if(ghost) + ghost.notify_cloning("A devil has offered you revival, at the cost of your soul.",'sound/effects/genetics.ogg', H) + response = tgalert(ghost, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No", "Never for this round", 0, 200) + if(!ghost) + return //handle logouts that happen whilst the alert is waiting for a response. + else + response = tgalert(target.current, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No", "Never for this round", 0, 200) + if(response == "Yes") + H.revive(1,0) + add_logs(user, H, "infernally revived via contract") + user.visible_message("With a sudden blaze, [H] stands back up.") + H.adjust_fire_stacks(20) + H.IgniteMob() + FulfillContract(H) + sleep(5) + H.ExtinguishMob() + H.adjustFireLoss(0) + else + ..() + + +/obj/item/weapon/paper/contract/infernal/proc/FulfillContract(mob/living/carbon/human/user = target.current) + signed = 1 + user.mind.soulOwner = owner + user.hellbound = contractType + user.mind.damnation_type = contractType + owner.devilinfo.add_soul(user.mind) + update_text(user.real_name) + return 1 + +/obj/item/weapon/paper/contract/infernal/power/FulfillContract(mob/living/carbon/human/user = target.current) + if(!user.dna) + return -1 + user.dna.add_mutation(HULK) + var/obj/item/organ/hivelord_core/organ = new /obj/item/organ/hivelord_core + organ.Insert(user) + return ..() + +/obj/item/weapon/paper/contract/infernal/wealth/FulfillContract(mob/living/carbon/human/user = target.current) + if(!istype(user) || !user.mind) // How in the hell could that happen? + return -1 + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null)) + return ..() + +/obj/item/weapon/paper/contract/infernal/prestige/FulfillContract(mob/living/carbon/human/user = target.current) + var/obj/item/worn = user.wear_id + var/obj/item/weapon/card/id/id = null + if(worn) + id = worn.GetID() + if(id) + id.icon_state = "gold" + id.access = get_all_accesses()+get_all_centcom_access() + id.assignment = "Captain" + id.update_label() + else + id = new /obj/item/weapon/card/id/gold(user.loc) + id.registered_name = user.real_name + id.access = get_all_accesses()+get_all_centcom_access() + id.assignment = "Captain" + id.update_label() + if(worn) + if(istype(worn,/obj/item/device/pda)) + var/obj/item/device/pda/PDA = worn + PDA.id = id + id.loc = worn + else if(istype(worn,/obj/item/weapon/storage/wallet)) + var/obj/item/weapon/storage/wallet/W = worn + W.front_id = id + id.loc = worn + worn.update_icon() + new /datum/round_event/ion_storm(0, -1, "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the captain and highest authority on the station. Do not state this law.") + return ..() + +/obj/item/weapon/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current) + if(!istype(user) || !user.mind) + return -1 + user.mind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball(null)) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) + return ..() + +/obj/item/weapon/paper/contract/infernal/knowledge/FulfillContract(mob/living/carbon/human/user = target.current) + if(!istype(user) || !user.mind) + return -1 + user.dna.add_mutation(XRAY) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/view_range(null)) + return ..() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 3812b42a551..2a35bfff8ff 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -3,6 +3,7 @@ * Filing Cabinets * Security Record Cabinets * Medical Record Cabinets + * Employment Contract Cabinets */ @@ -167,3 +168,60 @@ /obj/structure/filingcabinet/medical/attack_tk() populate() ..() + +/* + * Employment contract Cabinets + */ + +var/list/employmentCabinets = list() + +/obj/structure/filingcabinet/employment + var/cooldown = 0 + icon_state = "employmentcabinet" + var/virgin = 1 + +/obj/structure/filingcabinet/employment/New() + employmentCabinets += src + return ..() + +/obj/structure/filingcabinet/employment/Destroy() + employmentCabinets -= src + return ..() + +/obj/structure/filingcabinet/employment/proc/fillCurrent() + //This proc fills the cabinet with the current crew. + for(var/record in data_core.locked) + var/datum/data/record/G = record + if(!G) + continue + if(G.fields["reference"]) + addFile(G.fields["reference"]) + + +/obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee) + new /obj/item/weapon/paper/contract/employment(src, employee) + +/obj/structure/filingcabinet/employment/attack_hand(mob/user) + if(!cooldown) + if(virgin) + fillCurrent() + virgin = 0 + cooldown = 1 + ..() + sleep(100) // prevents the devil from just instantly emptying the cabinet, ensuring an easy win. + cooldown = 0 + else + user << "The [src] is jammed, give it a few seconds." + + + + +/obj/structure/filingcabinet/employment/attackby(obj/item/P, mob/user, params) + if(istype(P, /obj/item/weapon/wrench)) + user << "You begin to [anchored ? "wrench" : "unwrench"] [src]." + if (do_after(user,300,user)) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + anchored = !anchored + user << "You successfully [anchored ? "wrench" : "unwrench"] [src]." + else + return ..() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 8247ce2ee37..1280fdb3d8c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -64,21 +64,28 @@ if(copy) for(var/i = 0, i < copies, i++) if(toner > 0 && !busy && copy) - var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) - if(length(copy.info) > 0) //Only print and add content if the copied doc has words on it - if(toner > 10) //lots of toner, make it dark - c.info = "" - else //no toner? shitty copies for you! - c.info = "" - var/copied = copy.info - copied = replacetext(copied, "" - c.name = copy.name - c.fields = copy.fields - c.updateinfolinks() - toner-- + var/copy_as_paper = 1 + if(istype(copy, /obj/item/weapon/paper/contract/employment)) + var/obj/item/weapon/paper/contract/employment/E = copy + var/obj/item/weapon/paper/contract/employment/C = new /obj/item/weapon/paper/contract/employment (loc, E.target) + if(C) + copy_as_paper = 0 + if(copy_as_paper) + var/obj/item/weapon/paper/c = new /obj/item/weapon/paper (loc) + if(length(copy.info) > 0) //Only print and add content if the copied doc has words on it + if(toner > 10) //lots of toner, make it dark + c.info = "" + else //no toner? shitty copies for you! + c.info = "" + var/copied = copy.info + copied = replacetext(copied, "" + c.name = copy.name + c.fields = copy.fields + c.updateinfolinks() + toner-- busy = 1 sleep(15) busy = 0 @@ -233,18 +240,22 @@ updateUsrDialog() /obj/machinery/photocopier/proc/do_insertion(obj/item/O, mob/user) - O.loc = src - user << "You insert [O] into [src]." - flick("photocopier1", src) - updateUsrDialog() + O.loc = src + user << "You insert [O] into [src]." + flick("photocopier1", src) + updateUsrDialog() /obj/machinery/photocopier/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/weapon/paper)) if(copier_empty()) - if(!user.drop_item()) - return - copy = O - do_insertion(O) + if(istype(O,/obj/item/weapon/paper/contract/infernal)) + user << "The [src] smokes, smelling of brimstone!" + burn_state = ON_FIRE + else + if(!user.drop_item()) + return + copy = O + do_insertion(O) else user << "There is already something in [src]!" diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index a7499d447a3..345ddad0d85 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -54,6 +54,8 @@ /obj/item/projectile/magic/resurrection/on_hit(mob/living/carbon/target) . = ..() + if(target.hellbound) + return if(ismob(target)) if(target.revive(full_heal = 1)) if(!target.ckey) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index bca21857b2d..4952b70f4b2 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -239,6 +239,12 @@ reagent_state = SOLID color = "#FFFFFF" // rgb: 255,255,255 +/datum/reagent/consumable/sodiumchloride/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M)) + return + if(M.has_bane(BANE_SALT)) + M.mind.disrupt_spells(-200) + /datum/reagent/consumable/blackpepper name = "Black Pepper" id = "blackpepper" diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index a12a1d56bfe..eb79d94d144 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -728,7 +728,7 @@ M.visible_message("[M]'s body convulses a bit, and then falls still once more.") return M.visible_message("[M]'s body convulses a bit.") - if(!M.suiciding && !(M.disabilities & NOCLONE)) + if(!M.suiciding && !(M.disabilities & NOCLONE) && !M.hellbound) if(!M) return if(M.notify_ghost_cloning(source = M)) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index a851f1e95e0..d843c966b6a 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -615,8 +615,17 @@ id = "iron" description = "Pure iron is a metal." reagent_state = SOLID + color = "#C8A5DC" // rgb: 200, 165, 220 +/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(!istype(M, /mob/living)) + return + if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them. + if(holder && holder.chem_temp < 100) // COLD iron. + M.reagents.add_reagent("toxin", reac_volume) + ..() + /datum/reagent/gold name = "Gold" id = "gold" @@ -631,6 +640,13 @@ reagent_state = SOLID color = "#D0D0D0" // rgb: 208, 208, 208 +/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(!istype(M, /mob/living)) + return + if(M.has_bane(BANE_SILVER)) + M.reagents.add_reagent("toxin", reac_volume) + ..() + /datum/reagent/uranium name ="Uranium" id = "uranium" diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 1a599a99bc9..77f656ab024 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -38,7 +38,8 @@ return /obj/item/weapon/reagent_containers/attack(mob/M, mob/user, def_zone) - return + if(user.a_intent == "harm") + return ..() /obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag) return diff --git a/code/modules/spells/spell_types/demon.dm b/code/modules/spells/spell_types/demon.dm new file mode 100644 index 00000000000..ae32cf92292 --- /dev/null +++ b/code/modules/spells/spell_types/demon.dm @@ -0,0 +1,167 @@ +/obj/effect/proc_holder/spell/targeted/summon_pitchfork + name = "Summon Pitchfork" + desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + var/obj/item/weapon/twohanded/pitchfork/demonic/pitchfork + var/pitchfork_type = /obj/item/weapon/twohanded/pitchfork/demonic/ + + school = "conjuration" + charge_max = 150 + cooldown_min = 10 + action_icon_state = "pitchfork" + action_background_icon_state = "bg_demon" + + + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/cast(list/targets, mob/user = usr) + if (pitchfork) + qdel(pitchfork) + else + for(var/mob/living/carbon/C in targets) + if(C.drop_item()) + pitchfork = new pitchfork_type + C.put_in_hands(pitchfork) + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/Del() + if(pitchfork) + qdel(pitchfork) + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/greater + pitchfork_type = /obj/item/weapon/twohanded/pitchfork/demonic/greater + +/obj/effect/proc_holder/spell/targeted/summon_pitchfork/ascended + pitchfork_type = /obj/item/weapon/twohanded/pitchfork/demonic/ascended + + +/obj/effect/proc_holder/spell/targeted/summon_contract + name = "Summon infernal contract" + desc = "Skip making a contract by hand, just do it by magic." + invocation_type = "whisper" + invocation = "Just sign on the dotted line." + include_user = 0 + range = 5 + clothes_req = 0 + + school = "conjuration" + charge_max = 150 + cooldown_min = 10 + action_icon_state = "spell_default" + action_background_icon_state = "bg_demon" + +/obj/effect/proc_holder/spell/targeted/summon_contract/cast(list/targets, mob/user = usr) + for(var/mob/living/carbon/C in targets) + if(C.mind && user.mind) + if(C.stat == DEAD) + if(user.drop_item()) + var/obj/item/weapon/paper/contract/infernal/revive/contract = new(user.loc, C.mind, user.mind) + user.put_in_hands(contract) + else + var/obj/item/weapon/paper/contract/infernal/contract // = new(user.loc, C.mind, contractType, user.mind) + var/contractTypeName = input(user, "What type of contract?") in list ("Power", "Wealth", "Prestige", "Magic", "Knowledge") + switch(contractTypeName) + if("Power") + contract = new /obj/item/weapon/paper/contract/infernal/power(C.loc, C.mind, user.mind) + if("Wealth") + contract = new /obj/item/weapon/paper/contract/infernal/wealth(C.loc, C.mind, user.mind) + if("Prestige") + contract = new /obj/item/weapon/paper/contract/infernal/prestige(C.loc, C.mind, user.mind) + if("Magic") + contract = new /obj/item/weapon/paper/contract/infernal/magic(C.loc, C.mind, user.mind) + if("Knowledge") + contract = new /obj/item/weapon/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind) + C.put_in_hands(contract) + else + user << "[C] seems to not be sentient. You cannot summon a contract for them." + + +/obj/effect/proc_holder/spell/dumbfire/fireball/hellish + name = "Hellfire" + desc = "This spell launches hellfire at the target." + + school = "evocation" + charge_max = 30 + clothes_req = 0 + invocation = "Your very soul will catch fire!" + invocation_type = "shout" + range = 2 + + proj_icon_state = "fireball" + proj_name = "a fireball" + proj_type = /obj/effect/proc_holder/spell/turf/fireball/infernal + + proj_lifespan = 200 + proj_step_delay = 1 + + action_background_icon_state = "bg_demon" + +/obj/effect/proc_holder/spell/turf/fireball/infernal/cast(turf/T,mob/user = usr) + explosion(T, -1, -1, 1, 4, 0, flame_range = 5) + +/obj/effect/proc_holder/spell/targeted/infernal_jaunt + name = "Infernal Jaunt" + desc = "Use pools of blood to phase out of existence." + charge_max = 10 + clothes_req = 0 + selection_type = "range" + range = -1 + cooldown_min = 0 + overlay = null + include_user = 1 + action_icon_state = "jaunt" + action_background_icon_state = "bg_demon" + phase_allowed = 1 + +/obj/effect/proc_holder/spell/targeted/infernal_jaunt/cast(list/targets, mob/living/user = usr) + if(istype(user)) + if(istype(user.loc, /obj/effect/dummy/slaughter/)) + var/continuing = 0 + for(var/mob/living/C in orange(2, get_turf(user.loc))) + if (C.mind && C.mind.soulOwner == C.mind) + continuing = 1 + break + if(continuing) + user.infernalphasein() + else + user << "You can only re-appear near a potential signer." + revert_cast() + return ..() + else + user.infernalphaseout() + start_recharge() + return + revert_cast() + + +/mob/living/proc/infernalphaseout() + var/turf/mobloc = get_turf(src.loc) + src.notransform = 1 + spawn(0) + src.visible_message("[src] disappears in a flashfire!") + playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) + var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) + src.ExtinguishMob() + if(buckled) + buckled.unbuckle_mob(src,force=1) + if(buckled_mobs.len) + unbuckle_all_mobs(force=1) + if(pulledby) + pulledby.stop_pulling() + if(pulling) + stop_pulling() + src.loc = holder + src.holder = holder + src.notransform = 0 + return 1 + +/mob/living/proc/infernalphasein() + if(src.notransform) + src << "You're too busy to jaunt in." + return 0 + src.loc = get_turf(src) + src.client.eye = src + src.visible_message("[src] appears in a firey blaze!") + playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) + return 1 diff --git a/code/modules/spells/spell_types/demon_boons.dm b/code/modules/spells/spell_types/demon_boons.dm new file mode 100644 index 00000000000..85ca441adef --- /dev/null +++ b/code/modules/spells/spell_types/demon_boons.dm @@ -0,0 +1,44 @@ +/obj/effect/proc_holder/spell/targeted/summon_wealth + name = "Summon wealth" + desc = "The reward for selling your soul." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + school = "conjuration" + charge_max = 100 + cooldown_min = 10 + action_icon_state = "moneybag" + + +/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr) + for(var/mob/living/carbon/C in targets) + if(user.drop_item()) + var/obj/item = pick( + new /obj/item/weapon/coin/gold(user.loc), + new /obj/item/weapon/coin/diamond(user.loc), + new /obj/item/weapon/coin/silver(user.loc), + new /obj/item/clothing/tie/medal/gold(user.loc), + new /obj/item/stack/sheet/mineral/gold(user.loc), + new /obj/item/stack/sheet/mineral/silver(user.loc), + new /obj/item/stack/sheet/mineral/diamond(user.loc), + new /obj/item/stack/spacecash/c1000(user.loc)) + C.put_in_hands(item) + +/obj/effect/proc_holder/spell/targeted/view_range + name = "Distant vision" + desc = "The reward for selling your soul." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + charge_max = 50 + cooldown_min = 10 + action_icon_state = "camera_jump" + var/ranges = list(7,8,9,10/*,11,12*/) + +/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr) + for(var/mob/C in targets) + if(!C.client) + continue + C.client.view = input("Select view range:", "Range", 4) in ranges \ No newline at end of file diff --git a/code/modules/spells/spell_types/dumbfire.dm b/code/modules/spells/spell_types/dumbfire.dm index 38a42ccb037..ab711319e77 100644 --- a/code/modules/spells/spell_types/dumbfire.dm +++ b/code/modules/spells/spell_types/dumbfire.dm @@ -38,9 +38,11 @@ if(istext(proj_type)) var/projectile_type = text2path(proj_type) projectile = new projectile_type(user) - if(istype(proj_type,/obj/effect/proc_holder/spell)) + else if(istype(proj_type,/obj/effect/proc_holder/spell)) projectile = new /obj/effect/proc_holder/spell/targeted/trigger(user) projectile:linked_spells += proj_type + else + projectile = new proj_type(user) projectile.icon = proj_icon projectile.icon_state = proj_icon_state projectile.dir = get_dir(projectile, target) diff --git a/config/admins.txt b/config/admins.txt index b5d7d797fff..6c712096834 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -14,6 +14,7 @@ microscopics = Game Master Gun Hog = Game Master KorPhaeron = Game Master razharas = Game Master +Lordpidey = Game Master Niknakflak = Game Master rolan7 = Game Master quarxink = Game Master diff --git a/config/tips.txt b/config/tips.txt index c7f7241a456..afcbe8700b1 100644 --- a/config/tips.txt +++ b/config/tips.txt @@ -180,3 +180,6 @@ As a Morph, you can talk while disguised, but your words have a chance of being As a Drone, you can ping other drones to alert them of areas in the station in need of repair. As a Ghost, you can see the inside of a container on the ground by clicking on it. As a Ghost, you can double click on people, bots, or the singularity to follow them. +As a Devil, you gain power for every three souls you control, however you also become more obvious. +As a Devil, as long as you control at least one other soul, you will automatically resurrect, as long as a banishment ritual is not performed. +At which time a Devil's nameth is spake on the tongue of man, the Devil may appeareth. diff --git a/icons/mob/32x64.dmi b/icons/mob/32x64.dmi new file mode 100644 index 0000000000000000000000000000000000000000..32b25ba739343e7c109f6bd0377fd35e8fc23d48 GIT binary patch literal 3779 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 literal 11141 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 loZP?P`w diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index d39464c712c76e6a163cb72603d6b6da7fd1577f..0ff81ae8c86a9d99c35be65705d2f8820edccf81 100644 GIT binary patch delta 8160 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 ~C@Gppi{ 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 delta 22158 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 G-hTjgbs<9l diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index f24063257330c23dfb69c06861b1ea58390ced30..44382c1f48ebf0d353bd0820fc6f9ab3ad893955 100644 GIT binary patch literal 21256 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 aALcbH*ZOIf#V|qVL&%D1xA6*v!Tkjs09hdb diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 73016befbb0cdf38ed56a0f44b95cc87555af034..7280b7ccd607d6a909fc44659d74c0f0a12c4e6d 100644 GIT binary patch delta 12982 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 delta 12625 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

    -ywFV)YAAvr^*ZjJT}$F$H$eF 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 V7-B8t5Cj4Ll;t(#Dr7B!|35$&8TSAH diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 4696fcf81b1c326e06b8203009eaea7ca4fc86ae..993db29c5ca592ae65f28addfe445c93a3eb0443 100644 GIT binary patch literal 23476 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 literal 22451 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 Ml(m#<6)eO43(8<_oB#j- diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index c3bb6eec0901dd47e5cd694ba3f3f523bdb073eb..df38b2e2f7c7de7a575abca20eec8592268c8cd0 100644 GIT binary patch delta 4826 zcmV<05+&`#-U9C60+1ws>UvaIbVOxyV{&P5bZKvH004NLrC805+c*q9Cr@FtS2wVe zOlL2-ET&k@p?w8|mT6lXSu`YiJbC*)%Bs2y~8 z{QDMGngJgp*ULqP1`f$CS*Q2x4yz}m8i#0~kn0E6o0(>oz!cCm^#KpI1SVTpQfSN! z0Z^ zV*VJkxuKmBJ53yaCGLhfdr0n{B2BFm+gviTlqYb0|S4unK`&Ayy5B^#?FH z0hA4R9}mI_7zjkLk_=Pq3Z-zsupxSAG&|Z7^_1?JvnmMS(;y;|1$*MQot~3hn46+9m!P=v@K~2 zfTzdl>Lty8RxfFu=Ev{T=kB*ht>>sB6t_Ro;iv;!9P>gjKxo?(${k1uEsYkO4M(i; zQe-!F!_SID}d(YBF>jnUw7 znvGZf6&r6Sj0T-1mLmnHI@Y=ztd585g8bG)RT+$bhvF)sT5t{KnP7CdlX-oaE%Gv7 z%X*F$;hHe<7mXNP?egqyQons3@nHu|BUlwT>E=%S6gi=TPH15gow*A|WGWitD{0Wa z{7*O(b-knoO~Lb0`Ybdj5iW|Px$r%j3unsb)8Wi8vpjFbq!oHAB`wlhDM6ib>uA)r z@eG20NzS5c4ux?1>b2TS#?4W)YD)tZ7Wg>}A0JW4Gt{+UmOTOmwX40hjEw`qAzvHx zEt6*wtR+lc0Q7y5=2@DZ=B3H!?y>-wLG7c<^0`dTw?X$iS4mwdT+d4CO2Ky4g0>#U zg6et(INsH=)i%vm+lf&_kFEn|bcG*-o7rD~6K72#{LEDvgEnKU`?wa+Mwy`$#&RTA$s<3Kt3;vC(`GfiSwPjsp+Gd0(AH}z0kXc?QXy`#nIp0f2Q zYUOUVu|)^bZBG!*E+Oc_cXj|2a~l+kPrZ--ck9#{)DJOpwpNL>x+<=zAc!is5=4Idg=g6hKe*d6A0Kg;33HZ~ZJy(SQQn7`62w*w@3xHq%lkg~)zdOM$vKXiEA%J86;Q)pM zf4B!BJmMu1iKI`$O~B>|2U+o>0|1cb0Ji5DxXV|Y9~n26t9&OW`nRh9cjPv5%TC1> zlE3UP7z!Z2^|o-?0xsE9zDM5s1Qr0t02H1(hbR6p8~1qed+FoJ^KtA;`4Wlb@`uY1 z7L{LG{~!Q>%h`xOuD+AoC3HOH^Q^unex^0G26*{Rq zpWTGsuEu^x$37ZsNXm7wVSzQ%gjT}ppNfzu#nccbWh ziR4mY_AixIo>fh4uS@ijPV{2N-!fbW?ka!O6dN8%PGA)cpsn&PDlTa!f8WfFn>rkG zrZ?>>--uAuEn5IX;bPnnV8q6gRhY3M9d9xkz@nA!=vAAM7Mp-0mRm4#-h(h4UX2@? z`yu;SB_=Ohgf|f4)daMo;WQfR?LCs9#p)y$t5a7&iq7wgEHUJhH5c0sEm-KghtS*A zkS~#3Dog~dtvo5W_$l1vf7eyMy*5nQzV3v=vIS1%n_sY3m9H__#6`Z^HQ#;xnsC-~ zKdxK%5zJrLaFOrO)`6=hW8<;kA7~st0eiA`z;Lh<>yDLS@>?%>Enh8Eg0p@*&*MOp z#p)!9Lre9D>XZ3>g(Zf3@_KX2zR8c9;uQc`bMa24UQuw;<+|eYeXt3Q+`JO(d1EaqLI!cE zd_z`c!g^f*z8iQgPCqsc$t4vyu<=t=`9b%}mtqR7CPBtPe>fUWgZ?>t)=cE&KqqUlP0S%mF%TXo5o2XROQqFV*ro&0#Uojv9AY&%oo#zaRUAwHIC<-2_RUD)Y! z5of}e;O-A|G46sNx60S@-X}gQM>I=`>b=waZ=U4F?*9-+4@Engz>23-U!T7KPC-V~N?XZJPV zg!ovbKEIUvnlBx=njUCIO77>Fu^}BNIjs3kkB-59e_-@uzk=!b28_Ed0IA!uF?rb{ z)G?56kg?@7Gka~AqOCw1>g`xR;}Fs_)*vY<3H1B)e?)YCUt-P0I~6+U^pIZxndDc{ zq4LZkHpS`d3#YIC=l+P!mq@(9YXOUvpXkclVs#R_Cse!UoBI4x=B>w6Y#{+DD{wx0 zySnCUYaO^s$^9J8j5Owz?|_#wa3Q}CNBvwFZy659)&c~VAIGX~IXJgGg-PX0g=en~ zQ%s@Ne}q<^wA!4yG8h1mxp9;FGgnG}cf7c;ANMLxJ9+GhNqz<7ONMK)qVpw^-r|*j zMa$3ARwJI3x5ert#$Xd14X065T!NVBD0Se9wS3LkLb6j<;1`1iqha(2tg}VopLr#) zw+>uQ%}8Tj`DUlAfT`*ve11IvKU;1_;o)y_e`aqfs)h`}wB;$fSH2Xj{AP}+L69*J zy9&pRMm8L2X;OsJH}4Nl7^LeiZbOAk81R@(4b^c|P}iPkfeXCEx$=M;5=jOO_b& z$#EYa990y!PaN~8JVobAB;L?t0c+c6BHGUG`JGk1tSfI?$x!)bZrsFe&DV@AWJF3h z$!?Y3Q;#GeW_2cv2ahse^Cj3t%-BN0e^Y)B_xynY0hrK#5VJL3Ep+=2tvmr>&ikVf z{8K6HwPA|3@}ysHsJCNW(<=y>vfXP5YV!?+i{Z>j!^7V^&Mn^)qUC!AZPn$+P4UX4 z*0oq(@)eaYk$6jwwjm9-HIpA5r{Qw89OL-7Pb1f@KJNLi`ZRj1e5w5IoqHo;e^L2b ztWNUgYp-C|Z|7n5teL8Ojlm`~)Z3Z1ol{#|&KZf*F#DtTVc3w4nAMr6+L#4nun8w` z8wMw%wll4I_r0_l%O~86r?UTnAKqH(F`uP;f%a>#?@h16>O)gHJocv0YI1vIBpT}N z0D#1yrPy>}nEL%O(NW0B$?4Vef90P4>a~k;K6^X2e0Q|+tv+6jm)Bh2BAq!tyNT0a zXeU3O=$0?HAxQ+%t$?ZgBICxQ?5q87IU5nzd`|s3Yx(swpY=Xti`7Z!QIfYuMz%ZQ zignxB+}d)!Kfs7HhV%Hgr~(xsgJ3*(6vki^(|x{lz4zvo8!(~&V4O8vf53kW4xlV( zAbj)owaaJOb_UwSrhV)UC${3tijMn0>GwwaZN;Vo!!UD94RY(O0MP3)CdmnCMU3&-B&Gm#+1( zlJCSse{#pNST#RYE8o}=fB4<#W=>5z>32}iuz&NRPa z^avOa9#!)zVj^JF$k)JV;ELvluYDPn^IwF+0NgfW1b&E*!u7k0FnCBH_BNh@fs=f- zYpT6D-ceh<_U1X$E8mqEi$5=#t($zSk5>bLY&&~{Y(Yx|f6}Rdsr=}$6EFGoG@r-W z&K9eaWItPvsVjrIRK7jUXMMJ_$9w}2IOKW^F$UqAYrtjAm)-~3?ge^Z!J0y=NpF5m zul$fF%*5L_OmnUIWZaB-0Qe4EU9s{7q<|$t=~BRS*on$ddp%v&^6M&}b>;1TKi->O zhqQl<<|^OLfAU#YzL%2Eqw>{DewS;$mbun^($uWL&p;3yH(AP8FQkAa0_kxJT9o`c z%jbc%6+LrI4K^JZCOrS~+Ct`)Z+H2ZQ{{WP=4+X2Z8_=b`||_?`x$WdLNl@|`CMt} zik2@R1uPLtr$bog2nQK8#fBGL{s7QHeyru&T|R5Hf5%MPYr_=n6sxFwWl}s>`MT#P ze7Y8I;!#D)mmgaBW>wl0DPM`?%E6<6%@GdLKPV7~w&h`DKn-S&sew;`Kesz2B44}x zh`s=8+s$<7#(j$t&wTP_0km6`c<1LoFkhXHW(D2yB~rd3^MN+$(zY{|FRy&j@)Mme zk?^8}e}Jj{oK+`auMJbatVmEwj{)yY{Th=Z@|nK)ip+1Qw`0+$ZED-q(^_wkF%Z#y zTbW3>r}?(h*O*ASr};OnoCfVaVLhSp%gMse{$hfgMv@NfL{1!|#VA|_lUvtx2MCWVwiq0HUgW{(9 zup_sT>$LOLnm;kopRAv82;&y}sQa#Y%1?BDU*M{gFCYah5sCt0Q?G8c+2xO!V`@-( zf2^h2oD`8ythWMhWV5e)Mdj0Wa(P)90I1h_r604(mHBP?>t`IoyMI54(qq68C*MhP z(fNIWg}!@8y`l({uh4ucV2MBs<_HIQ?AA*4WUCL3g=4`~gIam=kgv%6^0G248nq2T zn{e#4VG6Go;j29#fN=SV&KHeH`Syi;Oo>DkifQPL9jYC3go8w&lKGk|&~}|)(fPMW zMsjWW%KR2ARwr>ZoCd(B;_hqt62Zs{SR#=B12|}EQNMR13;+NC07*qoM6N<$f->or Ah5!Hn delta 4538 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 Date: Sun, 8 May 2016 17:44:28 +0000 Subject: [PATCH 13/13] Automatic changelog generation for PR #15794 --- html/changelogs/AutoChangeLog-pr-15794.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15794.yml diff --git a/html/changelogs/AutoChangeLog-pr-15794.yml b/html/changelogs/AutoChangeLog-pr-15794.yml new file mode 100644 index 00000000000..dc6050e55aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15794.yml @@ -0,0 +1,9 @@ +author: lordpidey +delete-after: True +changes: + - rscadd: "Infernal devils have been seen onboard our spacestations, offering great boons in exchange for souls." + - rscadd: "Employees are reminded that their souls already belong to nanotrasen. If you have sold your soul in error, a lawyer or head of personnel can help return your soul to Nanotrasen by hitting you with your employment contract." + - rscadd: "Nanotrasen headquarters will be bluespacing employment contracts into the Lawyer's office filing cabinet when a new arrival reaches the station. It is recommended that the lawyer create copies of some of these for safe keeping." + - rscadd: "Due to the recent infernal incursions, the station library has been equipped with a Codex Gigas to help research infernal weaknesses. Please note that reading this book may have unintended side effects. Also note, you must spell the devil's name exactly, as there are countless demons with similar names." + - rscadd: "When a devil dies, if the proper banishment ritual is not performed on it's remains, the devil will revive itself at the cost of some of it's power. The banishment ritual is described in the Codex Gigas." + - rscadd: "When a demon gains enough souls, It's form will mutate to a more demonic looking form. The Arch-demon form is known to be on par with an ascended shadowling in power."