From 375490bb8cb362f91a1a53236e5a90690635ee90 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 23 Nov 2022 17:35:25 +1100 Subject: [PATCH] Add command for creating simple planet maps (#12698) --- Content.Server/Maps/PlanetCommand.cs | 95 ++++++++++++++++++ Resources/Locale/en-US/maps/planet.ftl | 5 + Resources/Prototypes/Parallaxes/planet.yml | 10 ++ .../Tiles/Planet/grass.rsi/grass0.png | Bin 0 -> 695 bytes .../Tiles/Planet/grass.rsi/grass1.png | Bin 0 -> 706 bytes .../Tiles/Planet/grass.rsi/grass2.png | Bin 0 -> 692 bytes .../Tiles/Planet/grass.rsi/grass3.png | Bin 0 -> 749 bytes .../Tiles/Planet/grass.rsi/grass_corners.png | Bin 0 -> 608 bytes .../Planet/grass.rsi/grass_edge_corner.png | Bin 0 -> 2620 bytes .../Tiles/Planet/grass.rsi/grass_edges.png | Bin 0 -> 1424 bytes .../Planet/grass.rsi/grass_edges_old.png | Bin 0 -> 1401 bytes .../Textures/Tiles/Planet/grass.rsi/meta.json | 39 +++++++ 12 files changed, 149 insertions(+) create mode 100644 Content.Server/Maps/PlanetCommand.cs create mode 100644 Resources/Locale/en-US/maps/planet.ftl create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass0.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass1.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass2.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass3.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass_corners.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass_edge_corner.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass_edges.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/grass_edges_old.png create mode 100644 Resources/Textures/Tiles/Planet/grass.rsi/meta.json diff --git a/Content.Server/Maps/PlanetCommand.cs b/Content.Server/Maps/PlanetCommand.cs new file mode 100644 index 0000000000..e5c249722b --- /dev/null +++ b/Content.Server/Maps/PlanetCommand.cs @@ -0,0 +1,95 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Atmos; +using Content.Server.Atmos.Components; +using Content.Server.Gravity.EntitySystems; +using Content.Shared.Administration; +using Content.Shared.Atmos; +using Content.Shared.Gravity; +using Content.Shared.Movement.Components; +using Content.Shared.Parallax; +using Robust.Shared.Audio; +using Robust.Shared.Console; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; + +namespace Content.Server.Maps; + +/// +/// Converts the supplied map into a "planet" with defaults. +/// +[AdminCommand(AdminFlags.Mapping)] +public sealed class PlanetCommand : IConsoleCommand +{ + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + + public string Command => $"planet"; + public string Description => Loc.GetString("cmd-planet-desc"); + public string Help => Loc.GetString("cmd-planet-help", ("command", Command)); + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 1) + { + shell.WriteError(Loc.GetString($"cmd-planet-args")); + return; + } + + if (!int.TryParse(args[0], out var mapInt)) + { + shell.WriteError(Loc.GetString($"cmd-planet-map", ("map", mapInt))); + return; + } + + var mapId = new MapId(mapInt); + + if (!_mapManager.MapExists(mapId)) + { + shell.WriteError(Loc.GetString($"cmd-planet-map", ("map", mapId))); + return; + } + + var mapUid = _mapManager.GetMapEntityId(mapId); + MetaDataComponent? metadata = null; + + var parallax = _entManager.EnsureComponent(mapUid); + parallax.Parallax = "Grass"; + _entManager.Dirty(parallax, metadata); + var gravity = _entManager.EnsureComponent(mapUid); + gravity.Enabled = true; + _entManager.Dirty(gravity); + _entManager.EnsureComponent(mapUid); + var atmos = _entManager.EnsureComponent(mapUid); + + atmos.Space = false; + var moles = new float[Atmospherics.TotalNumberOfGases]; + moles[(int) Gas.Oxygen] = 21.824779f; + moles[(int) Gas.Nitrogen] = 82.10312f; + + atmos.Mixture = new GasMixture(2500) + { + Temperature = 293.15f, + Moles = moles, + }; + + var footstep = _entManager.EnsureComponent(mapUid); + footstep.Sound = new SoundCollectionSpecifier("FootstepGrass"); + _entManager.Dirty(footstep); + + _entManager.EnsureComponent(mapUid); + shell.WriteLine(Loc.GetString("cmd-planet-success", ("mapId", mapId))); + } + + public CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length != 1) + { + return CompletionResult.Empty; + } + + var options = _entManager.EntityQuery(true) + .Select(o => new CompletionOption(o.WorldMap.ToString(), "MapId")); + + return CompletionResult.FromOptions(options); + } +} diff --git a/Resources/Locale/en-US/maps/planet.ftl b/Resources/Locale/en-US/maps/planet.ftl new file mode 100644 index 0000000000..0d51694500 --- /dev/null +++ b/Resources/Locale/en-US/maps/planet.ftl @@ -0,0 +1,5 @@ +cmd-planet-desc = Converts the supplied map into a planet with sensible defaults. +cmd-planet-help = {$command} . +cmd-planet-args = Require 1 arg only. +cmd-planet-map = Unable to parse {$map} as an existing map. +cmd-planet-success = Set map {$mapId} to Planet. NOTE! You will need to load the map (either onto a new map or by restarting the game) for atmospherics to work. diff --git a/Resources/Prototypes/Parallaxes/planet.yml b/Resources/Prototypes/Parallaxes/planet.yml index df2373628e..d18d32b063 100644 --- a/Resources/Prototypes/Parallaxes/planet.yml +++ b/Resources/Prototypes/Parallaxes/planet.yml @@ -13,6 +13,16 @@ scale: "2, 2" scrolling: "0.1, -0.05" +- type: parallax + id: Grass + layers: + - texture: + !type:ImageParallaxTextureSource + path: "/Textures/Tiles/Planet/grass.rsi/grass0.png" + slowness: 0 + scale: "1, 1" + shader: "" + - type: parallax id: Snow layers: diff --git a/Resources/Textures/Tiles/Planet/grass.rsi/grass0.png b/Resources/Textures/Tiles/Planet/grass.rsi/grass0.png new file mode 100644 index 0000000000000000000000000000000000000000..8868223f7f7997b35f689f825d57a7acaf22926e GIT binary patch literal 695 zcmV;o0!aOdP)9W7bj&K>u z{qZzhq<-ea1)ra33xVJV&p40o&&P|pJ8lQN!4WRbjOXVnQ0kQJfq@*1bK(rDRC>PK zLAHAV#s1hMqmjx{KFfyPJNn#yKVDMMg1FWIQ0E+0l+RFR2Y7#G13CbP0DM%1wUtYE zr#jc)Of@8U(N%sW_pqdCazVmZbj6qoMVRTWoN3Q17{^X*q1mEYgCmouSNy0gcj4IGye6YiG+Xu3;B!4H=g^C(43rKeZ8RxL0%A z5zN0sUj^=*R>6f+LRe(1bhm(1l$|PdSwGAH{ktI_+f36k8&a;8Rz>KjnHjFy(xGck{{uR=KJfv#f`|YB002ovPDHLkV1i&ALK*-7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Tiles/Planet/grass.rsi/grass1.png b/Resources/Textures/Tiles/Planet/grass.rsi/grass1.png new file mode 100644 index 0000000000000000000000000000000000000000..9598fcb9a4b9896fbc397a52e60821796bd34b69 GIT binary patch literal 706 zcmV;z0zLhSP)5?#8NG6fPh;0D}^%Wx8Izzyh9LYFQT z#BVikXD4GPmJoSfufJn^+xy4!-`D4U7j!&6?M|o5PAT{xJ;xdIo&4+DdE>FY#>zrC zn1`3&Nf3NB65rrC=lL7D!jbrk?>KKi-^-Of4EKY5YRD<)h@GP>ui2h5z|N?VOkwrg z-5o)8xfYDW%kT_JGAD56Qm%LOyZ>LVCFoA97>KC3#;&#+9XnV#mtiIX4vOI0y;|Ng zR$)W+fKck71|f%hr0fS%?6*RdMQSvPPAF?y@^UNfNRL>-;+iU%Ne9cP;b z)iGfJ3^#@yxgpc<4nR9uy_e1bXABoLLUr`fNxC}VqVXfNqZ>$f^FPB!=EPP4WoBt- zKmlZ&3G_aASwKw9MWRMPQ0$DuL4YyvP(4f#%rpn|H@9SuF2?mjXCCDYWbk<0PrD!k zkn*6E$E_o`EAWlcd^`^M#*ynna@oPGfShZwjN&egPcNbYzWwxOQ-vd0y@;4PTC-W7y#;}bxT{Yzm7N^WDD-gxQq=Q3Zef)2 z-UDWJzyZTutds_E_Y5cfLgG?1T*3}_%6WuVh<4e@w&K=?NLd9Qj)*U_+@o!H^CCiI oUEuZ&knIL`#BIHdSXTu84-U~%S0ma5&j0`b07*qoM6N<$g3vxfH2?qr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Tiles/Planet/grass.rsi/grass2.png b/Resources/Textures/Tiles/Planet/grass.rsi/grass2.png new file mode 100644 index 0000000000000000000000000000000000000000..1d21d0234f94bbc8a3952ed6357011e0164f0576 GIT binary patch literal 692 zcmV;l0!#ggP)=kpX}S)QiLVvbqw9d9=GsF6$| zLd((0M(<>mE3t4oHw93VfxsT8Dg&;;cT3% z=dV*an#&O8+JNWFGIho{dKv}jM8wtxDwD6`uDMwO2-=+`EeEZQZ+BJ(+_k4|wE_#Q;cI)EQMhOjgASj}C*ylpS3} z_CTx=a7?8KxZ!}s)Hp{3dq?QJWclY22SYjfIDl#=#2#uzQ|jn^!vijC$Uo@XdBn0X z((CYaZf}7r#%&SKHe#;gxz8w_7xr8ml19gQ=M1VdNMWyAx*?SFo9zebA0000^``lB0I{)(ev+-13(Z_HY z%;V|O9V9;qrGNxp*L({=@P{?_%lFrOV>iKA^Kg3Xk;V?h&%3od3qZJQLDQ)<{wsVLa+X%r3l!CCn0V<-7k93HS@!?RLz{rsu^QpbWeFHkh?m-lmuy7wlX?z zCI!#a@{!i=p49?gE_ndCO3jo{0hPB0&R|O>_jMNoexRDSY1MpR^Pk|f$*3zv>FvN` z9Z+gP+G;ps04`C%1pLSXnn@)ccEoBWg3;!cz$b0fUU6YwWc09BG!WtdvBK}Y)!I9r zs?i0b>ZZP?aHb)f6?=S|8%VsP)YSpKG)8~j*7#PJaGez58N>-&@(Lhjfg?{*bLKoCOnM zpUue!6%SUKh?Lr_r$QZsTS+a*Kz)?L-8_(TSkW>&(s@v-ie5!snXVU%qMpKC`;q^( zb@wjlEw~1u&v+?v^#{nklC2~mSkaP>ob z|KE>??P^>32W&h4a?`|B>lZ(|?J9@AkRZrz>~u+$&eU?p)bR58IHy$oSbg#0@Bg(s^AE9i{J6}sr}%3A`ael+@`=kAeA7RF zt#|v1hwdT{h0Xs~E~;bybCjh)n8A<1g7E=KjC+h%u66%5m@K^)m}D3{UHx3vIVCg! E03}BCu>b%7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Tiles/Planet/grass.rsi/grass_edge_corner.png b/Resources/Textures/Tiles/Planet/grass.rsi/grass_edge_corner.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6508e0e471379153feda44da4bc393729b778e GIT binary patch literal 2620 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 H!qWc(Hwm9d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Tiles/Planet/grass.rsi/grass_edges_old.png b/Resources/Textures/Tiles/Planet/grass.rsi/grass_edges_old.png new file mode 100644 index 0000000000000000000000000000000000000000..af73ea013eeff92bac6c7b646b0fd45fe8cc0ec2 GIT binary patch literal 1401 zcmb`H`#aMM0LH(Y+a}gBIqp_6TNaZ~UDHSB!Mf<7H~!`y%Q@_865oj)u(m=7LSi9+(@7yD zGQX&GwYosk`3*(mJsr*#FBXl={d8YaJwS3J9AI;uH=8#>FnW4cd4#lleo+Z65^1a} z2Q`|qJ{?s1MG*@6c5r6Gz}c9v;czP_;*h+RS?9c>Kz0PO8&d_yhIfPCD<8_pS_2wr z9wg>IlAy0TX-XQjqN7CpRaq9vV^p1BS2!;^P^q9}15lSg7b_pgN^JonE09xQehyEw zjm*!`ydmk$j}?s)_SRe-y*QFHgwZVEaN@p}MqC~b9j_SBpqC_k=%PHGb#^oGY}XyR z%05%)X!jd$At-)LvbpE2p*rw1&YTrj#}peHZr%b{WMywI;h~h}9X@XAF`M(P1_Ez0 z?Y&2L3cA(j8CX+H%cL5H24iQXC1t|V>W5SfmXXl5uMf~slO!7qSEoG!>*yv|3l~W! z*o65hLm?au=<5A?Ci6ocAVCdtLR^XPjPFaZw#!`n8w2`|a?Q3=wR2Ti3X<$WZvh*s zwnk4tcj;SoX|>%ZdxXF&ni`4G4eYKE0>U9I$n1r`*P?-_fOS5Af$SWD3S|60R2UOM(JA*6-J-K(N9ncSw*rQIu48gDm#6Hxyboy!7zTyimNe zeD%v}A!CD+28+2e{5&RZGZ@&=x4h$SEBCGr;HTupLlp1r?!9zk=~*=8nX{H|Qu2zI zgRDCpOS0kigjAFOd8V_Mdgu5^p~Go&MBd^B+!{o#6^=`I>yX;xMH*9!zVK1|J*?5;Rqf%Y0a zc*q0Q+OqHi1V~(G;|`Y80N#FkfZL^zb2UT>nAUyTdgw?V1(wd6Oz}a6wg}5|b1t1- zwj|mcNM-U+9ojg*(&)wG!(%>pEY81eAr|^)ef)&4_G{lRDDL4N=Eg=2yt(C_XQi0Y z#efYl$h64FH zz@iG=qn>pXoyMRZ9mN+Wp;a$4vFaPQnzLv