From ae619710c6a3adca0b9d702378ba94abb5074dc9 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Wed, 19 Jul 2023 23:55:37 +1000 Subject: [PATCH] Refining/debugging bots. --- code/game/jobs/job/silicon.dm | 1 + code/game/objects/items/robot/robot_frame.dm | 8 ++++---- code/game/objects/items/robot/robot_parts.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 3 +++ .../silicon/robot/robot_modules/_module.dm | 17 +++++++++-------- .../silicon/robot/robot_modules/station.dm | 2 +- .../subtypes/thinktank/thinktank_module.dm | 2 ++ code/modules/mob/new_player/new_player.dm | 15 ++++++++++----- icons/obj/robot_parts.dmi | Bin 2765 -> 1120 bytes icons/obj/robot_parts_flying.dmi | Bin 474 -> 579 bytes icons/obj/robot_parts_platform.dmi | Bin 0 -> 915 bytes 11 files changed, 31 insertions(+), 19 deletions(-) create mode 100644 icons/obj/robot_parts_platform.dmi diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index c9d5a94a88c..b59ce7cf246 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -57,6 +57,7 @@ assignable = FALSE mob_type = JOB_SILICON_ROBOT outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg + substitute_announce_title = "Stationbound Synthetic" job_description = "A Cyborg is a mobile station synthetic, piloted by a cybernetically preserved brain. It is considered a person, but is still required \ to follow its Laws." alt_titles = list( diff --git a/code/game/objects/items/robot/robot_frame.dm b/code/game/objects/items/robot/robot_frame.dm index 8c1fed9a9ad..eb4fbd42eab 100644 --- a/code/game/objects/items/robot/robot_frame.dm +++ b/code/game/objects/items/robot/robot_frame.dm @@ -22,10 +22,10 @@ update_icon() /obj/item/robot_parts/frame/update_icon() - overlays.Cut() + cut_overlays() for(var/part in required_parts) if(parts[part]) - overlays += "[part]+o" + add_overlay("[part]+o") /obj/item/robot_parts/frame/proc/check_completion() for(var/part in required_parts) @@ -170,8 +170,8 @@ ) /obj/item/robot_parts/frame/platform - name = "flying robot frame" - icon = 'icons/obj/robot_parts_flying.dmi' + name = "large robot frame" + icon = 'icons/obj/robot_parts_platform.dmi' product = /mob/living/silicon/robot/platform required_parts = list( BP_L_ARM = /obj/item/robot_parts/l_arm, diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index a010796295c..6fe4ed5ba54 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -84,7 +84,7 @@ /obj/item/robot_parts/chest name = "torso" desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." - icon_state = "chest" + icon_state = "torso" part = list(BP_GROIN,BP_TORSO) bp_tag = BP_TORSO var/wires = 0.0 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0f4777401d0..a9065fb7455 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -267,6 +267,9 @@ var/is_crisis_mode = crisis_override || (security_level == SEC_LEVEL_RED) var/list/robot_modules = SSrobots.get_available_modules(module_category, is_crisis_mode, override) + if(!length(robot_modules)) + to_chat(src, SPAN_WARNING("For some reason, no modules are available to you. Please report this on the issue tracker!")) + return if(!override) if(is_crisis_mode) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/_module.dm b/code/modules/mob/living/silicon/robot/robot_modules/_module.dm index c903bdb15be..7a7bb22d274 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/_module.dm @@ -129,15 +129,16 @@ /obj/item/robot_module/proc/build_synths() SHOULD_CALL_PARENT(TRUE) for(var/thing in synths) - if(ispath(thing, /datum/matter_synth)) - if(!isnull(synths[thing])) - synths += new thing(synths[thing]) - else - synths += new thing - else if(istype(thing, /datum/matter_synth)) - synths |= thing - else + if(istype(thing, /datum/matter_synth)) + continue + if(!ispath(thing, /datum/matter_synth)) log_debug("Invalid var type in [type] synth creation - [thing]") + continue + if(isnull(synths[thing])) + synths += new thing + else + synths += new thing(synths[thing]) + synths -= thing /obj/item/robot_module/proc/finalize_synths() SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 61c76ab6127..fe677f863d2 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -273,7 +273,7 @@ var/obj/item/matter_decompiler/MD = locate() in modules MD.metal = metal MD.glass = glass - var/obj/item/stack/material/cyborg/steel/M =locate() in modules + var/obj/item/stack/material/cyborg/steel/M = locate() in modules M.synths = list(metal) var/obj/item/stack/material/cyborg/glass/G = locate() in modules G.synths = list(glass) diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm index ff3410f91f2..d966d0b59ba 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm @@ -49,6 +49,7 @@ /obj/item/robot_module/robot/platform/explorer name = "recon platform module" + display_name = "Recon" unavailable_by_default = FALSE armor_color = "#528052" eye_color = "#7b7b46" @@ -94,6 +95,7 @@ /obj/item/robot_module/robot/platform/cargo name = "logistics platform module" + display_name = "Logistics" unavailable_by_default = FALSE armor_color = "#d5b222" eye_color = "#686846" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ea7022a0604..b7b33494ac0 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -419,6 +419,13 @@ var/datum/job/J = SSjob.get_job(rank) + // Get the appropriate announcement title. + var/announce_rank = rank + if(J?.substitute_announce_title) + announce_rank = J.substitute_announce_title + else if(character.mind.role_alt_title) + announce_rank = character.mind.role_alt_title + // AIs don't need a spawnpoint, they must spawn at an empty core if(J.mob_type & JOB_SILICON_AI) @@ -431,7 +438,7 @@ // AIize the character, but don't move them yet character = character.AIize(move = FALSE) // Dupe of code in /datum/controller/subsystem/ticker/proc/create_characters() for non-latespawn, unify? - AnnounceCyborg(character, rank, "has been transferred to the empty core in \the [character.loc.loc]") + AnnounceCyborg(character, announce_rank, "has been transferred to the empty core in \the [character.loc.loc]") ticker.mode.latespawn(character) qdel(C) //Deletes empty core (really?) @@ -453,10 +460,10 @@ var/do_announce = join_props["announce"] && join_message && announce_channel if(J.mob_type & JOB_SILICON) if(do_announce) - AnnounceCyborg(character, rank, join_message, announce_channel, character.z) + AnnounceCyborg(character, announce_rank, join_message, announce_channel, character.z) else if(do_announce) - AnnounceArrival(character, J?.substitute_announce_title || rank, join_message, announce_channel, character.z) + AnnounceArrival(character, announce_rank, join_message, announce_channel, character.z) data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn @@ -465,8 +472,6 @@ /mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message, var/channel, var/zlevel) if (ticker.current_state == GAME_STATE_PLAYING) var/list/zlevels = zlevel ? using_map.get_map_levels(zlevel, TRUE, om_range = DEFAULT_OVERMAP_RANGE) : null - if(character.mind.role_alt_title) - rank = character.mind.role_alt_title // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer", channel, zlevels) diff --git a/icons/obj/robot_parts.dmi b/icons/obj/robot_parts.dmi index 9461028091fcd3c90973bb1b181bbbd09cd7d06d..724a179addabd2e5a5bcf1be2e7576d9a126c312 100644 GIT binary patch delta 1110 zcmV-c1gZPY72pVv8Gi!+008vhk@)}s07y_wR7JqRzyJUMD=Rg6dX{f*j9FQ6W@dm> zQ)nqEDLOhj|NsA0Q&TW7Fr}rXhlhs`5DqOZEr5W4YHDhknVE8Oa#K@Nva+(kz`(%2 z!gK%t00DGTPE!Ct=GbNc0060aR9JLGWpiV4X>fFDZ*Bkpcz>KzR&a84_w-Y6@%7{? zOD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DJds0FI$O=GbOXA z7|1u|;!G<_%uR)`;i`)Alk($>OEXIds?11DOwrCKsH`Nvs5qYpbw%-sMY%+&%SlZq zLR}7#=H-xL9)EGZAkI$Wd`evS5*1mv6e%mX`niCU6aa=UscpcWNu>Y)0})9?K~#90 z?VEvisxS%YSwd$J%^^rlc$shEVZpDS!g}Fn|*D zMu4*Xb2y%u2pIv&!{KzQDnNJ_KyAHh9zX*!rdjN{eShP>FFTB`Y}>YV4I9e?SPZTK zni-(sdBE1T2Em6MVEHlwG{`0Bx(I+hpRK)IEE8aT32rn^GyCEWpzkAnIRdWztp^sG z2LN3Uiuj;#WAO3Op>^AKcnr|Yn`IE*U4pJ3d-#bF#57pjUazgS0m1F0{YMC}9fa=u zyN>WdM1QS4I}crK8vrEF1D&~fz{m&&0JvTOAoM^ofN?|6dBE=q1kQI+Vx=Ac%^nb0 zFT4j_l!!gx0O0&PF@PI|PMav;02D3^#rC}mwhrI{80Uc}a+G-tgui0}jBXH)a)7}_ zLFfP$fSG4PxeEpefr}Wx_#xU!AREs_CNt~WA* za`IF0c?vS7RDkdXAR(|H(*#MAou-eq5B3A__i6yx+_94Z!p@}A(S5p*JO)%Ml}e>j z{VH*vH9pr2>4^8B@5yFZPt{S-Re7wk0q`IAid&(wkiQFBohLyn-2N!(O4tnRX_Nwt znSTJH&-(nu7PWiWkgJmUJpQ}gNfKOGM^z<@l5BBWN_^nXKi@1c?17-a8C?dS{IxsJIi-sY*^m=7q^cD?|04cp*0f^qB;Q=6}*Z(AYi-skv^iO(q zRP+`NOIYdk3PAK04G#b*z1|SK)IM5zy+L^C>KZM*-cfkz^?rI#dc7wBT6(=Z#2byP cRKHVy0nSb)zz=*V0000007*qoM6N<$g3D+7r2qf` literal 2765 zcma)8c{mi>8$L5*8Dl2f$dX1RmqfNu!jSCC5E2?>C;NyfO}3l0WD5zEghI-4jb*~6 zvTscqrWq<^8`+!ioBQ1Vf6x8nocDa^Ip=ww@0{;_&q>Bv8KV&52mk=e)Wp!1jl_Q% zoQvIe>bm!`p)%UekznW*?h)n}LhuU?0wC&P&agJ3QyIxcpE#3f(rqvwuwg3^_vcr{ z+lui|W65u?Q5PcN1O*#S9^F`}itd2X9~k>`#(8;GQ%P6v9++MV43%5G0cE_iu6|*u z^o-x^MYmh7F=xlGY@2C;E}i`RkH4yHC1&mww_P21mD(*5gtzxYqR9+`D+im?t8trUfDg;mFqeG{>%Q&l^E+U zF;$a}l2 ztcJ-iB0GZcb6=3Cb!eheMN-JOqK<(luyB_E9&p3Rbh^VmQsCrP#eDW-xr>dXMn= zd;^W}&YSyTF^2$i2j%0ek)=4r}qjQXn;Wp6(`Pxuw2J*b_g zaJ!HgdunRXr=!HS0tcRt`)A6V+1v9Q0MJ|w11Wz?1F~}3^ArK`Wi3#qp8c7R9KpgH z*{nsnws$NqTr7RGCjIf_M_Y0QgGb6IZ7_q8hz8O4z_z}e$fD=gq``)*RAEv5Xh@D( z;-+})HE$(bYurl*QXBC((p4$XPd5)HpGT@Lr!2gwe;ps)x?Cl3n`0D)fJ zBMj8`C^^B*+0T)H-j?CSVRM1K>r4?Bo#SEg<@N($JL1+Clx`q(^H`jDA!yJ^lYQ(u zO6Lyl_u(oo$`4PhW&O%IBqEb}Ly4R07yUVxb5z~EK=yO)H;wa)5A^eaL}%2#Xe)K1 zEf!z;r7g8#r;L3Lqv|T!YTV?CjT2nk%|B6~Tuj+g?Ul6e(juYtBpM-yMu=d-#U|4@ z{0odGUYYYPUjWsj4=!$p?v~rFyfQVYp~#1CB;2dU!+8x}=lA7r)1{lPi+>6jip9`d zJhGrwQ!ftvSW2wjPu>9dT+C$oYqjv8exI6rZWC1+wpOGaa)dnpnkY%RW%kM&5S6>P zI$Fpy8iq)Z$4#n3@amRNUhHy9@Rj&ENyFOlEvH;48%mw5m%E@G;}#JyzQhI1;C8%x zIlU1laD}QtxEvV+lHAD+OW4`z0hn)r5rsm55coK2YHE0AIKdxt9y8zsKteS!*irS$ z8_~jv2BiwyFsnqI9J+R$uB)@X#p>GR06w)n%E+zcr|zO{+(gkyICf|KM}8?@gFb@- zES*101Q*2;DBq|J>6`C$+XrQu=D6yDiv0@mFg1SSUU+Fg9hiZ`+|Qp!Ev&6c@z`<} z`~V-{>h9L9jhy=$n<_vp_N9Y4N;;RVvdVG)ii!NwQKXcX3ojk!r>74CGNUx>?t^~M zd;Olx4T?&%(`!$EN;mmI4SfOw746xJ)@BD;%eQ{5`%zxSKZ;x|B$jb+`Qa|=_W4{V zj<36i33TJZ{o(um8ik>G`hrJ2Bst8CQqe@Z2?U<;-ylJWNaI9j849i_+CkVFZr`59 zOSeCNN^_pW(3hyL%6hl7ZCue(3WV6b29liTeYlSNoAGFYP5GXLbv*pS4`s?%$(`hD?Ki8|&?)c6Jl4PVoI^@Ja zt|`i3WLafQwq)41spbh@dH4_^sntodFk9gJ>3HRo7z+z0t<*6!o`UwNVfboqmX^5pmc*!is}Au0K` zfj!)aE^@Xee;DwO)xD*#9w1`|n)hVJ{adkB8&GHGLFV>qW2lIqFGg?gAUh;4D_p&s zD+d7?aI_bKPm-2Ok}F+hGIZoVjF}X??&1L<&4KAgu)@N^P!TU*4Nc8qUv;C8FRh+} z7UtOyq4N_$3gA0uluvfOq=};@Zo0TD8oYP=5BGvpBsPVwbTfV}-tAdH9V0gVVUf|h zF*_S<96hzOLxnH2!Fb(VWG%W+iA7}RH|Gg>Z?55l&UL$YcuHj17#CH<2>g>+;jYCy z1S)!$jKSJGW7|`0%Wrs!s_?q{xl*|cj`-LF|9ZhoVvpaA9ZsmNEB-SDGW}3lY}Rwk z#^(p#=)uHbDFHU~ft0HDC74YT&+o7qP8W5P_?LE!JtLTeNv?=y^vM@Kp)~^gzm;e;SCzPy^vo|*M9SeQ_nf=OlO3gHRl{U7 zmXDYBbA3}U|1n!2A?Qs~b)qMlr8_nWF^`6wV> zm5m>)cI5`Yo7?YhnmSYlQlC>6JTjF}!^32TxOZF*04$vS=(rWgT8tV}>u@Iyk}@*W z6!&*lB(1+}BcRUO+HM#C5Q$JgR`0L&cw7?caAHLdB_wsBopq?M>JpmPcoT7?xVJR$ z(on?V1pY0Ge(K-S$j*?vV#oTJ=H{-9&Og5}zgtp^q3x)|aPFLV&UHKmty~dhbJyHFOu3J*PrE$%m_%7l{Z$uRvsUS&RV0nz5M+=X}EK}{>JLBTMf z+s?S!>#Z6TY&c?BT>h|;2xb6Hym}!zkMU$~uXU1UM6Gj~DQ>h>6}^3y7)Tw8m|Ehj zZO}v5*+;bA)r5O}<4-I#exftWWBAIE&;xk@F+vq)_9Cs}r#*g$=GSZccZjDS_zL;? zmjtpCTRsY*-`KH10TtMmQreLeMrZfdddTMAY_q*9Su~dL{=I1=@s8%XJ2ce#I0xIC z%*zDfQYPi2ID6sB%D8lt7VG|6)s#rbM)=tG6-_G#%AswI%JJiuU0PsZxzc6Af@{L! zSpaoFR;{lqy-V$G3SO05O|SuvLpRAW_w zDRfv(`bOZn?;I)TDR-EzLr(NFxjD!lm&tE wei*x6Pfd2TTkUbXepj2Tzdez)Ft8^nDtDMC^P|u#`+o{d&s!N*8@R>&5AW<3fB*mh diff --git a/icons/obj/robot_parts_flying.dmi b/icons/obj/robot_parts_flying.dmi index 90033c41ff4f0b1bdab0ebbc822f08feab2b03b6..43c81d957d86a8e65337856db3d592b99a006073 100644 GIT binary patch delta 497 zcmVViA~001yhOjJd{z`y_i0RR90D=RfqQ)n$MEoNqb z5D*Z0dX`K~OeG~HQBhGOBqTL8HGY16D=RD0rM4>o0004WQchCOEXIds?11DOwrCKsH`Nvs5qYp zbw%-sMY%+%%fYWsS;5uM1spyAVA4}ec+^U<7BC_yOV+-d0rgu0^m#G+gx)aBq;r>x-W=K}UQ z0I;V>hK=6|2mk;8&q+iKk-rMUFc63DtWGYu5>armf_tHT07H|>MI}y7K33mC zLElfSZTbfq(^d0-LCEF!eOy8SJf0ySu|atX*AZD0F$B%LEU*|c5)d;Aoj&v%jHi?d ztd5*>L0kw?C)#g9B9gCF^$?K(GFE3sGkI7wj7uhxdAjJobEI<>wmJdD{c(U$lZx6c zY0Cp{P)Zzo=&# zH&0o?)z1YS-T+jlX~-{g@o@kE0&Gb{K~!jg?U{>mgdhw>QB;fq|Nps70xIkKL1wzG zcV>6dvGbpwr(2RN*TYd6ptNZDY(v0IElKKzH5L(66M3e?9@9MaJ_Uv>Jh>2pZkc zk4*umuLEP+uI0~ajU8YG00651?j8W0<7W+^6uMh$@%v-%1wcpM?M8++bp~L#wu-%p zGVRI*2#Fty9LtdnU}9>>wPjY^&KN<+|4?SmRmKP~gboXf0q~hqa%e|h0Gf70;9yqW*vuQJjQ;pACCwVA zi~xF`YI?5905sZj>xT#t0_f2BVehBm`0yKmCX@iEff51Kp#+$rS_Uv?UV{u^s;p2A zqygpR3X7H8LN_k=O91TCFBAF%(C-`<0nKHCO#pW1xNt1q7q0?b0&qLWk-u|ya-?9; z(Sf$~{ubf1obN>eHiRH@wXnal&O1p!+2dNwiTNw%j;8TLd11ivozt51{SuuzeS9ox z(KzWc5e48Z{_>e{b}l@SbO5hjy?XTvCHVq@{cE`{D)OblAe*l_=7p+xF&7J@N002ovPDHLkV1g3!me&9P literal 0 HcmV?d00001