From 7e3ee1d7c6097b2290d8e7f93a031b82794bbd0a Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Sat, 4 Oct 2025 10:51:36 -0700 Subject: [PATCH 001/216] Explosives with timers now properly alert admins when detonating (#40471) * Explosives with timers now properly alert admins when detonating * add TODO comment * Check if user is deleted before triggering --- Content.Shared/Trigger/Components/TimerTriggerComponent.cs | 1 + Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs | 3 ++- Content.Shared/Trigger/Systems/TriggerSystem.cs | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Trigger/Components/TimerTriggerComponent.cs b/Content.Shared/Trigger/Components/TimerTriggerComponent.cs index 9cc58d3cda..f413ab5d4f 100644 --- a/Content.Shared/Trigger/Components/TimerTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/TimerTriggerComponent.cs @@ -75,6 +75,7 @@ public sealed partial class TimerTriggerComponent : Component /// /// The entity that activated this trigger. + /// TODO: use WeakEntityReference once the engine PR is merged! /// [DataField, AutoNetworkedField] public EntityUid? User; diff --git a/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs b/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs index 58ac43e571..179b04af93 100644 --- a/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs +++ b/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs @@ -168,7 +168,8 @@ public sealed partial class TriggerSystem if (timer.NextTrigger <= curTime) { - Trigger(uid, timer.User, timer.KeyOut); + var user = TerminatingOrDeleted(timer.User) ? null : timer.User; + Trigger(uid, user, timer.KeyOut); // Remove after triggering to prevent it from starting the timer again RemComp(uid); if (TryComp(uid, out var appearance)) diff --git a/Content.Shared/Trigger/Systems/TriggerSystem.cs b/Content.Shared/Trigger/Systems/TriggerSystem.cs index ca60901a79..25f8d51e11 100644 --- a/Content.Shared/Trigger/Systems/TriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/TriggerSystem.cs @@ -107,6 +107,7 @@ public sealed partial class TriggerSystem : EntitySystem ent.Comp.NextTrigger = curTime + ent.Comp.Delay; var delay = ent.Comp.InitialBeepDelay ?? ent.Comp.BeepInterval; ent.Comp.NextBeep = curTime + delay; + ent.Comp.User = user; Dirty(ent); var ev = new ActiveTimerTriggerEvent(user); From 2dc0cef5d4f22952b59dedf89c03b11f07e4b48c Mon Sep 17 00:00:00 2001 From: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Date: Sat, 4 Oct 2025 13:16:27 -0700 Subject: [PATCH 002/216] made evac signs glow (#38545) Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> --- .../Structures/Wallmounts/Signs/signs.yml | 10 +++++++++- .../Wallmounts/signs.rsi/direction_evac_glow.png | Bin 0 -> 261 bytes .../Structures/Wallmounts/signs.rsi/meta.json | 6 +++++- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Structures/Wallmounts/signs.rsi/direction_evac_glow.png diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml index b77fbc3547..a8e834ecce 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml @@ -104,7 +104,15 @@ description: A direction sign, pointing out which way evac is. components: - type: Sprite - state: direction_evac + layers: + - state: direction_evac + - state: direction_evac_glow + shader: unshaded + - state: direction_evac_glow + shader: shaded + #This is a neat trick I found to sort of "hack" an emissive map into ss14. Basically, the direction_evac_glow texture has an alpha channel. + #Alpha doesn't work for unshaded, but for *shaded* it does, and by putting a shaded texture infront of the unshaded, we can dim the unshaded texture, effectively allowing brightness control. + #I am re-using this from my high-vis vest PR, where I go further into detail, https://github.com/space-wizards/space-station-14/pull/37869 - type: entity parent: BaseSignDirectional diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/direction_evac_glow.png b/Resources/Textures/Structures/Wallmounts/signs.rsi/direction_evac_glow.png new file mode 100644 index 0000000000000000000000000000000000000000..d82d60abdd6f8b5555c5903baee0ebdebb546acb GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|_ItWGhE&XX zd&`rn*+7Kh!jh8brF;H!R?S`aR!hJsX_ec`FSZjbKCrXjQBedNq}Y;Lx%cw4zRw%) zoKHSgT)rmW_uttYr;Ahnep1|Kb8Xg*zbxz)QTE3wPaU6@uJ7o*e&?UJUy9}i{-1E` zdGKxh^K-xQ@7QGrGztj*bO(O^y!~zVm0u0_w(8pUywlF~>tFuBHu&~dx9v|>-gW4* zzZ8B}^ELCQ8@8{RljbZByQBJ=&F$>@{%@;m85tPvoMZoCxUKSQghd6&I8RqUmvv4F FO#n{dbM62D literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json index 9da6753c35..d535ec1dc2 100644 --- a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18 and bee station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/13dd5ac712385642574138f6d7b30eea7c2fab9c, Job signs by EmoGarbage404 (github) with inspiration from yogstation and tgstation, 'direction_exam' and 'direction_icu' made by rosieposieeee (github), 'direction_atmos' made by SlamBamActionman, 'vox' based on sprites taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/e7f005f8b8d3f7d89cbee3b87f76c23f9e951c27/icons/obj/decals.dmi, 'direction_pods' derived by WarPigeon from existing directional signs., 'detective' derived by Soupkilove from existing security sign", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18 and bee station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/13dd5ac712385642574138f6d7b30eea7c2fab9c, Job signs by EmoGarbage404 (github) with inspiration from yogstation and tgstation, 'direction_exam' and 'direction_icu' made by rosieposieeee (github), 'direction_atmos' made by SlamBamActionman, 'vox' based on sprites taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/e7f005f8b8d3f7d89cbee3b87f76c23f9e951c27/icons/obj/decals.dmi, 'direction_pods' derived by WarPigeon from existing directional signs., 'detective' derived by Soupkilove from existing security sign, direction_evac_glow made by moomoobeef based on existing direction_evac", "states": [ { "name": "ai" @@ -165,6 +165,10 @@ "name": "direction_evac", "directions": 4 }, + { + "name": "direction_evac_glow", + "directions": 4 + }, { "name": "direction_supply", "directions": 4 From 24753a78db1720b70dd4195e29a0887dd61b6a3c Mon Sep 17 00:00:00 2001 From: Kowlin <10947836+Kowlin@users.noreply.github.com> Date: Sun, 5 Oct 2025 09:29:28 +0200 Subject: [PATCH 003/216] Add high severity logging to stun prods (#40709) --- .../Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml index b5dbdf032a..a82a44b00a 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml @@ -5,6 +5,10 @@ - node: start edges: - to: msstunprod + completed: + - !type:AdminLog + message: "Construction" + impact: High steps: - material: MetalRod amount: 1 From d9b296a64049343ff5bd493310bee381d5750588 Mon Sep 17 00:00:00 2001 From: NoreUhh <85219416+NoreUhh@users.noreply.github.com> Date: Sun, 5 Oct 2025 00:55:17 -0700 Subject: [PATCH 004/216] Ian Suit gives accent! (#40694) Ian suit has been made STRONGERgit add Resources/Prototypes/Entities/Clothing/OuterClothing/suits.ymlgit add Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml Co-authored-by: NoreUhh --- Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 93a209c6be..068ed1a511 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -288,6 +288,8 @@ tags: - CorgiWearable - WhitelistChameleon + - type: AddAccentClothing + accent: BarkAccent - type: entity parent: ClothingOuterBase From b57be2413e4735a366dd42d30ce85bea4614e4b7 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Sun, 5 Oct 2025 01:27:19 -0700 Subject: [PATCH 005/216] Incendiary rounds do pierce (#39204) * Incendiary rounds do pierce * Address review --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- .../Weapons/Guns/Ammunition/Projectiles/light_rifle.yml | 4 ++-- .../Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml | 4 ++-- .../Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml | 4 ++-- .../Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml | 4 ++-- .../Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml | 4 ++-- .../Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml | 3 ++- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml index 43427c1dac..60640bdd2e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 3 - Heat: 16 + Piercing: 14 + Heat: 5 - type: entity id: BulletLightRifleUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml index b4017fd550..124fa4a93e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 3 - Heat: 32 + Piercing: 26 + Heat: 9 - type: entity id: BulletMagnumAP diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml index 8d146939b7..53917035cb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 2 - Heat: 14 + Piercing: 12 + Heat: 4 - type: entity id: BulletPistolUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml index 497ca9e2a3..84506148b4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 2 - Heat: 15 + Piercing: 12 + Heat: 5 - type: entity id: BulletRifleUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml index e5120a746f..ebea6dde5e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml @@ -68,8 +68,8 @@ - type: Projectile damage: types: - Blunt: 3 - Heat: 7 + Piercing: 7 + Heat: 3 - type: IgnitionSource ignited: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 6c39e112bd..2134ac0cbf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -142,7 +142,8 @@ - type: Projectile damage: types: - Blunt: 14 + Piercing: 10 + Heat: 4 - type: PointLight enabled: true color: "#ff4300" From c9373c5397c19672aec5f20e4233d858669b4077 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 17:05:25 +0200 Subject: [PATCH 006/216] Update Credits (#40706) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index f3ea41018f..ca08fb2939 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 27alaing, 2DSiggy, 3nderall, 4310v343k, 4dplanner, 5tickman, 612git, 778b, 96flo, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, adm2play, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aearo-Deepwater, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aidenkrz, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexalexmax, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, Alkheemist, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, ancientpower, Andre19926, Andrew-Fall, AndrewEyeke, AndrewFenriz, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, Arcane-Waffle, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, areyouconfused, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, Artxmisery, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, Awlod, AzzyIsNotHere, azzyisnothere, B-Kirill, B3CKDOOR, baa14453, BackeTako, BadaBoomie, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, beesterman, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, BigfootBravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, blitzthesquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, breeplayx3, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, captainsqrbeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, CawsForConcern, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, citrea, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, cnv41, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, CoolioDudio, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, CraftyRenter, crazybrain23, Crazydave91920, creadth, CrigCrag, CroilBird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, ddeegan, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, devinschubert14, dexlerxd, dffdff2423, DieselMohawk, DieselMohawkTheSequel, digitalic, Dimastra, DinnerCalzone, DinoWattz, Disp-Dev, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, Dragonjspider, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, EnrichedCaramel, Entvari, eoineoineoin, ephememory, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, F1restar4, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FlipBrooke, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, Funce, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, GR1231, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, Hayden, he1acdvv, Hebi, Helix-ctrl, helm4142, Henry, HerCoyote23, Hi-Im-Shot, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hoshizora-sayo, Hreno, Hrosts, htmlsystem, Huaqas, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, insoPL, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jkwookee, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, JpegOfAFrog, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kontakt, kosticia, koteq, kotobdev, Kowlin, KrasnoshchekovPavel, Krosus777, Krunklehorn, Kupie, kxvvv, Kyoth25f, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, lilazero, liltenhead, linkbro1, linkuyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, Lordbrandon12, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luegamer, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, Luxeator, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M1tht1c, M3739, M4rchy-S, M87S, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, magnuscrowe, maland1, malchanceux, MaloTV, ManelNavola, manelnavola, Mangohydra, marboww, Markek1, MarkerWicker, marlyn, matt, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, Mixelz, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, mnva0, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nabegator, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, nkokic, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnsenCapy, OnyxTheBrave, opl-, Orange-Winds, OrangeMoronage9622, OrbitSystem07, Orsoniks, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, pavlockblaine03, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, pgraycs, PGrayCS, Pgriha, phantom-lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, Pixel8-dev, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, Princess-Cheeseballs, ProfanedBane, PROG-MohamedDwidar, Prole0, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, Pyrovi, qrtDaniil, qrwas, Quantum-cross, quasr-9, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rhailrake, rhsvenson, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, rlebell33, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, rumaks, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, ScholarNZL, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, ser1-1y, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, Siginanto, signalsender, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, sirwarock, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skybailey-dev, skye, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, Smugman, snebl, snicket, sniperchance, Snowni, snowsignal, SolidSyn, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, Steffo99, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SurrealShibe, SweetAplle, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, taonewt, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheFlyingSentry, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, ThereDrD0, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, tornado-technology, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, travis-g-reid, treytipton, trixxedbit, TrixxedHeart, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, verslebas, vexerot, vgskye, viceemargo, VigersRay, violet754, Visne, vitopigno, vitusveit, vlad, vlados1408, VMSolidus, vmzd, VoidMeticulous, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wachte1, wafehling, walksanatora, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xeri7, xkreksx, xprospero, xRiriq, xsainteer, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex +0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 27alaing, 2DSiggy, 3nderall, 4310v343k, 4dplanner, 5tickman, 612git, 778b, 96flo, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, adm2play, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aearo-Deepwater, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aidenkrz, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexalexmax, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, Alkheemist, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, ancientpower, Andre19926, Andrew-Fall, AndrewEyeke, AndrewFenriz, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, Arcane-Waffle, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, areyouconfused, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, Artxmisery, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, AwareFoxy, Awlod, azzyisnothere, AzzyIsNotHere, B-Kirill, B3CKDOOR, baa14453, BackeTako, BadaBoomie, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, beesterman, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, BigfootBravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, blitzthesquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, breeplayx3, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, captainsqrbeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, CawsForConcern, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, citrea, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, cnv41, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, CoolioDudio, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, CraftyRenter, crazybrain23, Crazydave91920, creadth, CrigCrag, CroilBird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, ddeegan, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, devinschubert14, dexlerxd, dffdff2423, DieselMohawk, DieselMohawkTheSequel, digitalic, Dimastra, DinnerCalzone, DinoWattz, Disp-Dev, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, Dragonjspider, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, EnrichedCaramel, Entvari, eoineoineoin, ephememory, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, F1restar4, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FlipBrooke, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, Funce, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, GR1231, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, Hayden, he1acdvv, Hebi, Helix-ctrl, helm4142, Henry, HerCoyote23, Hi-Im-Shot, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hoshizora-sayo, Hreno, Hrosts, htmlsystem, Huaqas, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, insoPL, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jkwookee, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, JpegOfAFrog, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kontakt, kosticia, koteq, kotobdev, Kowlin, KrasnoshchekovPavel, Krosus777, Krunklehorn, Kupie, kxvvv, Kyoth25f, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leah, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, lilazero, liltenhead, linkbro1, linkuyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, Lordbrandon12, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luegamer, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, Luxeator, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M1tht1c, M3739, M4rchy-S, M87S, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, magnuscrowe, maland1, malchanceux, MaloTV, manelnavola, ManelNavola, Mangohydra, marboww, Markek1, MarkerWicker, marlyn, matt, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, Mixelz, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, mnva0, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nabegator, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, nkokic, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, NoreUhh, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnsenCapy, OnyxTheBrave, opl-, Orange-Winds, OrangeMoronage9622, OrbitSystem07, Orsoniks, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, pavlockblaine03, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, pgraycs, PGrayCS, Pgriha, phantom-lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, Pixel8-dev, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, Princess-Cheeseballs, ProfanedBane, PROG-MohamedDwidar, Prole0, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, Pyrovi, qrtDaniil, qrwas, Quantum-cross, quasr-9, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rhailrake, rhsvenson, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, rlebell33, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, rumaks, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, ScholarNZL, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, ser1-1y, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, Siginanto, signalsender, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, sirwarock, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skybailey-dev, skye, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, Smugman, snebl, snicket, sniperchance, Snowni, snowsignal, SolidSyn, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, Steffo99, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SurrealShibe, SweetAplle, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, taonewt, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheFlyingSentry, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, ThereDrD0, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, tornado-technology, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, travis-g-reid, treytipton, trixxedbit, TrixxedHeart, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, verslebas, vexerot, vgskye, viceemargo, VigersRay, violet754, Visne, vitopigno, vitusveit, vlad, vlados1408, VMSolidus, vmzd, VoidMeticulous, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wachte1, wafehling, walksanatora, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xeri7, xkreksx, xprospero, xRiriq, xsainteer, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex From 7f69c44dd77fcad9410a6f9196257e6b32ad8ebb Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Sun, 5 Oct 2025 17:44:29 +0200 Subject: [PATCH 007/216] Add Arrivals sign (#40227) * Arrivals sign * Waving!!! * Attribution --- .../Structures/Wallmounts/Signs/signs.yml | 9 +++++++++ .../Wallmounts/signs.rsi/arrivals.png | Bin 0 -> 18012 bytes .../Structures/Wallmounts/signs.rsi/meta.json | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Structures/Wallmounts/signs.rsi/arrivals.png diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml index a8e834ecce..8798e920c7 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml @@ -296,6 +296,15 @@ - type: Sprite state: armory +- type: entity + parent: BaseSign + id: SignArrivals + name: arrivals sign + description: A sign indicating where the Arrivals shuttle will dock. + components: + - type: Sprite + state: arrivals + - type: entity parent: BaseSign id: SignToolStorage diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/arrivals.png b/Resources/Textures/Structures/Wallmounts/signs.rsi/arrivals.png new file mode 100644 index 0000000000000000000000000000000000000000..2a615548a7b07ec21c910c80036dbf6aa8445318 GIT binary patch literal 18012 zcmeI3c|26_+sBWkvSdlgmW)xpZDYn*XJYIbMKtzGHO36XY|V^iR8o>wl#n%1p(bsL zWNTH~qNq?wBq3CiNY4x-lHS>ov=DU-$L7&w1bXb)EbCarQc`wv~}m zl>z`j#tv(Z94rD7UCnrBTo6hp1 zGaze_T_D%eZ9RSk4K6-Q#(g% zIJI)&vlO%sz0ULpP`F4F^b?I3N9?V8CE=oq*j90f{OigazSC|4K))C#B#eFDY*geN z9S{W=4LS=HDqenzD00$v2Ox)lR;WU!v`8!txU1uGcMfn@8948J$wvw}0ss`wR!b;w zS_bI(Xor~wJjsn~Q39T1&dZem4vGLti)6L2fbz=t>cmy` zdUFcnAE*Yu?{96>Y`a0ZV2M{+EKibbho&Z`XwAlUirLr91OV0Hy6a=cX0e^G+h4vW zbyE61-p(8g=%+(5ngcJ!iVuj21M;hD`VV`+?2L=1FJE zvm(B3#?ylGaM7KW;+DF!p-!!_ipcF>qZik;>0emCOmW|U$KFCGs6z$kD(;ZA=Dqkf zg|6+$0gZ&Ol5xQ@0C%@z`RXe(E>}{@!`_LA?w9qb4+6}?KEMvBN*@B`ef5!?ApnRg z8;&twDgsm|o_GZS#c!0?=NwV8zas$v))_mNoVS=U^ZFcaxoqln_2P0RQT%jk^O+0E zP2?@7w};P@IDl4pfwUoNzvj^JXZg3_z6hYo;hovx9>7fh~`@QAM(O#y@xU9pboA# z{}S7L7lPb3y06$)_sEWmYs4Oj2AW^Z(NNuYCxcbT)|c}NPsj|YQ_Y`m8h#}+yKdE+ zKsK;#Uo;`SPFI$6;3~l7i3Otj!)NzM zY}h4#gR(O=*4D$`!zyQCk5;}yk%YTs#4g<%|3Kq%9P<~3Dh%HW@kU>W^;p5xey2HK zGkxKPe`IHGjKeOFy?3~MwUp+!Qj3p?R_0#h$fPPNzWj-}pv-Y#)5oC`@j zR1hl{>v(wN-p%%cIq2Ja+UzAW7vN4DQCMj}H0uyQc?@ZplyQ1Zb#D42iPL+~$JW|W zGlHDp&QZCu^#hX^R;SFhsyqS9YIu-L_9YMb!MoT+lFuUM+ax|ntPglIqpPzk;$!ek zncXrG6s$H`& zt90YnonHtt7k5Xl$k>g|av>DlQ8}nN_YRUc;9=RwbQ9}d7I4(Td)>w19{ZqaBWgkL zE%weG;y8#m%D!BTw3--d?%iaDPQYQ^MBDX$cMqL)@co7&ngFpxa}vUE})hW!=<9cZ!pm zd&K{6aLe}Pt;Gf>Q(a; z)Ek$xmv3dV1FM24jNe|cSZG=9}Z@vTuW&=`;_|VS(WMSZD&RtbW+srdEGSav-sFQQ!2HO7@Kp zv7PV@K^r_bjFilGyp*b)-iV;yZN9axwWM;(CN##B_@$;x408t~dMxx`>itNi0B2Lp(|R}j>7>?zbBt0XB6Z=17t3G%eg+co*l?9J?Yk%XIH6mS`s>SueFc*(HHZ$m?jy zysGrNtEMtN*u>MoGj^+SEXUn%)eev7vxFYb5o}?pgDd&*N;j3C79NerMpL1)UZhi_w9Z5ZsnuU`g zC*&`Ej3`)C;7D4!G)|_S^O|~JEiUT*P`lPJ>qE05CDOhwD<7BVBswO0v>_;?@JKL5mqb#B|2 zD8+B&GPpT;pUG{fn`@P-R?i1ZK?vQ8Mxs@gU77Y(}_sg7B z8#vgZwvoE>Is161|6p`=e)auoF$26o@4Bih+~)Vk4YNLlrfv7Cbo+YtOhM^W?WV@E zXTe)O$VR9uE`Q#4q^J1u(h&E65}R#6DgpWn~v7sW`)f^RZ|~M@l%oDWx|#_%dVd64@IT9oPSPacb+9S59w^*W7Hm zS^Xkud%>VYH34qzr2C<`14~OuVb8&zB@f? z1vKqv^9mOh4So*#)TNqL+-Paj*S9mi$i3a3KX!pwPHp|XseDuIO;5Q# zS;?sMu_NCeM!l@Jt+H*AA9MOp z_k~cA{lIYu)46qQ6h5@;!^pz=V|oC9hLT-8*d7k{Xab$8gZH6(6LmtU4Bj>r08Gq6 z7G?ht@}+^^uV82NWa4`)9)RA)#^BE4~lMvrM6WY&HW8 zhX)4->jdlR(3!q)T@(rhMGFyF^=(L>pvO(%aD`qzYffs69Ar-^I z*;+#EY^)4*QHF*vq>k=XnJN9I=!~yev>lDb#?uHyJ8KNDL5EECL6f|_k;W)}Bbbps ziUdRH=_6oxBRwM+(FkRXH%94_jP*(5li}bnHT*YeYdRs2pLO4*eR$G72m^0jJ)|)V zX+%KsW?3H(LwOUCFceA8P~V%Nk22Il{*ay${+qNTlecT9;VD!4@X!9gJH#Jkej5r) zX7ScJXUh8LWx;q&bS7^8we^RCLLRSe3_O!Xmu4DG-;`&lf+5G~U~u!MxWx>0#^3 zc&~&)2w0p00E8|Cfba+a82-ll?E-*61OU9<#Cx0cC;%wY4{yA^0sutT*;!k-gfw}N ze*0#2(_B=0x5)HmZ$u9qI53lcB)l7NkxPEHTnWj4!vPY7mNty!wSDVos8-%}TQP?; z+?*(<%sa+z&fD=&1W~E@s5zi|H59V8|G+nY+K9Fy{7Z+2# z{;&dmOM;}7*&~bjk*8MaKpG45H=B3l>n$qv+SaNmyH3uHJLOO>Xi#P4m_3M4r~2XCwVCX-elAnw$$)UXy$D$b%i9Wcs53 zEiJ8Tw6+{Q-P^d7rMWN7L*2YKPvzB~K6SC_z^FxzM`@hD0{=B#JDb(kd6t`Y{uhoN B?u7sV literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json index d535ec1dc2..4833c7b814 100644 --- a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18 and bee station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/13dd5ac712385642574138f6d7b30eea7c2fab9c, Job signs by EmoGarbage404 (github) with inspiration from yogstation and tgstation, 'direction_exam' and 'direction_icu' made by rosieposieeee (github), 'direction_atmos' made by SlamBamActionman, 'vox' based on sprites taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/e7f005f8b8d3f7d89cbee3b87f76c23f9e951c27/icons/obj/decals.dmi, 'direction_pods' derived by WarPigeon from existing directional signs., 'detective' derived by Soupkilove from existing security sign, direction_evac_glow made by moomoobeef based on existing direction_evac", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18 and bee station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/13dd5ac712385642574138f6d7b30eea7c2fab9c, Job signs by EmoGarbage404 (github) with inspiration from yogstation and tgstation, 'direction_exam' and 'direction_icu' made by rosieposieeee (github), 'direction_atmos' made by SlamBamActionman, 'vox' based on sprites taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/e7f005f8b8d3f7d89cbee3b87f76c23f9e951c27/icons/obj/decals.dmi, 'direction_pods' derived by WarPigeon from existing directional signs., 'detective' derived by Soupkilove from existing security sign, direction_evac_glow made by moomoobeef based on existing direction_evac, 'arrivals' made by SlamBamActionman", "states": [ { "name": "ai" @@ -28,6 +28,9 @@ { "name": "armory" }, + { + "name": "arrivals" + }, { "name": "barbershop" }, From 096f998c3fb54e8434d39b6c8d87e3d22500b67b Mon Sep 17 00:00:00 2001 From: Absotively Date: Sun, 5 Oct 2025 14:53:58 -0600 Subject: [PATCH 008/216] Fix species default skin tones (#40707) fix so that all default Urist entities don't spawn with the same default human skin tone (cursed skin tone Urist McSlime) (cherry picked from commit 8d9564c23856c342bc3a35834c462e659f5ebd5b) Co-authored-by: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com> --- Content.Shared/Preferences/HumanoidCharacterProfile.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index 098f65ef18..5c0c316898 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -205,6 +205,7 @@ namespace Content.Shared.Preferences return new() { Species = species, + Appearance = HumanoidCharacterAppearance.DefaultWithSpecies(species), }; } From f94faf8aebc32cc69e825fc618180d8a8fdbe2f7 Mon Sep 17 00:00:00 2001 From: mq <113324899+mqole@users.noreply.github.com> Date: Mon, 6 Oct 2025 07:58:46 +1100 Subject: [PATCH 009/216] fix edge case typing indicator error (#40708) * cleanup rsi error in typingindicatorvisualizersystem * sprite fix --- .../TypingIndicatorVisualizerSystem.cs | 3 +-- .../Textures/Effects/speech.rsi/moth3.png | Bin 2010 -> 1498 bytes 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs b/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs index e1197d4ac4..bb30ca1c55 100644 --- a/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs +++ b/Content.Client/Chat/TypingIndicator/TypingIndicatorVisualizerSystem.cs @@ -37,8 +37,7 @@ public sealed class TypingIndicatorVisualizerSystem : VisualizerSystemp}IARzgmn8Q~4HJdz$mKY0|3n#?OSv7iY&Nsb&WrQnoIWpqFTT(7{rsNqtimk3=nx2rKj(x7nyG4^ z06?fJLjO&YEtXQdtTkjbIoS^l5=Eg-gxP)>?xqU0Q|8I66XS zEv?5DpEqB@i(rgbd;^iBVt0!N+-OUa`4EwBs|UV1z!Rq!G>UqZh3ysz%a#wP?l{?| z>NgWQM|9MRAs1$!tEOR-lT=F6L(9Be6Eh(f`- zQVSXP&Hy;Ga2Ww#$PW3HdIl9A}=SH|J+7%zSUJ zaQy7RtKI0IHYZsf`Hku~+x^NsN7>if<&C>2%DT!BC2qzT=>1f}WIiSX4#-aQ$Tk_F zq+A@mU2ZVl9G>8vgZ7qo;JPw%$vqM$_K8zq=9v`h>OPK_o^sd4I&X{Le1E_z$m_jO z3hVw|2=3c9*WBo<(MU+#*vMfWPFR(b=&k*9Ag09t8@@)ap=mDNopdr=z;hzbg(C`z zzML?PbsK3RZZS&uL=Y7oLg~w`4yZ{%Wb-37r)Ki!YArEE5yBnSM^9;c;3J5ZmtTfg zSYkydM3orr#^wEBZbFm90dt-A*hNxTdKS3NzXe1%;5_O$cM7OQaoE6?Kj_&92OClu z?#zbN2LcdE7&Ki5-?(t4)!U9P4mtE7hNcIwUr&az${|raxXEk?V%JkX zj+A2+Pqu|E@3dThN}}R2!Go>aOzBg9$=gFWjqSy)AF#AiQY|U3dofx*#r(xu8xZ=1 z0Tt1EI>2o9ifSOImZhcjZa)BY#G)Lui3961**r$Dea1p?4v*K-p+z~KCH^lQ9$?5n zJmL-usL&;@jFe3()<<5eQa=*UGPq-k>FU-Wq&AK`H_`M%m-0z;N!fx-8>uUE13{zR zi1DJa`kCo)1oa8b)+vbs1@Fh>x|16GhDW~@&qjw15iaZHHd7QXmqG9Acj}E~86z8T zGKr-0zNVAF@tTK5Ez|p325lT3JVF?#0?Yip2Z6+1=$!wWwL;#{*{{` zV9oyO@GSUvB{-U!+)(pghzNJAZ={yqMbw+yMXe|{xV9yJpf#Y|wZF}Tyf_fL#ns)+ z#ec`g_;3Lf|9G=00-N5o_6FH|b!!Le=FVi&;k8>Eovyr6+VGrFmAi!&$|4(l-sr(| zEtbDWv85@@FVxi|85aV4&mqA;(dSp`!F+2;VYP21u2ZlJNjpCuY!-+FS+x0*rMc!< z5CAN;*%;fnbU^^WQ?%+=jca4-klRs|m0=u(jw7K&V;|&j+~~0mA2^ldVUx`5zmzT% z#~Sj@;EP^c8|B?*cK$?6-^F)Z8|}x=6Jsrj)DS^sv?cMoQg}Rxz6(2&&$n?iTwMml NoOV3p(2Neb{x|kT^dkTO literal 2010 zcmbVNc{JOJ7XHPSNGW11)fDxrs$-1zv}b~#w(=rWi!w^3XlrlnThdZXEn!R34-_su)!yZ8I!JLjHrm+#z6XD2&Zs5%q?0NHEy z*4K|2_bnh&$GOA&4&#`l!|iW90)P{+Zvpx|m3#;Q;OuMGmN#N=uM*Msyls@a&+Arb z=;T8)p;YHQKX&I69Qj9-CHKIsi(5s(Y~{9J#iCy@eUA1Ksa|2y;Q4v6XIx^_ zf$j`MWZYAr{V?#1;fNseON?TFP;1XNkNnfWm~X$)E$~#+;HZAuw}$8tu1jEIrgUmK*j=00 zFRLWmhyEN_1Z^%M2W}K=JhnYauF)wn=X=1iD;&36WR~5pF7$}G(B@hsVjl#7V(DCp zVFJ*j#K3V@8T6-Jl{kiEA?2qa966dQy`$cG z8G8qp)6-a++e;~#UY=EPZfzN^e@s+)a;z(S(~tDA@q<2SJy@#P+eFBhD#|P`x7`cN z$PDIf1R`qekRc4e71e_I{ivs7Cu<1&;^5IOfg;{xW4fZle1?>wX31v#@E41WfACvi5)Dh>O zPQlF*lK{$qp&Ov}Y_+U+Xk&FLpsj}I&y|wjuya(rM@8sqf_e5hiT@E3s8Tk`j8}f# z%I5K`tJi1H?i(c&9k3Lz_%7JKP+Jb0OohcS)FUnWabzT1l3O(>0&;~4d5OE=@Fi5K zW9@q+$BQHc`RT?Awp}tx1S@h(FKF{2p9-U_62lh zI1su1j-Hv`(BB@^5O{0Xj+q3=oaJ5pRf!3ICIb9ug0E(ERx`+z>@Jl?8_uVn@RRK5 z%J?mH%uurQh>?XI1~-yP53T7oUl?z5I@JTk@rj@}{frfLAYv*|zxTxhyt_qCExditN1_JH$eFg=3N zUA;2D?G(8X#=LZ7a_oeHbe0 z@HUQdk$$n>!0pK-p|fmB4p&Xr3Z3LF3}=b1e86l%>2IGS>v~D}ad+*sWC0gQnz_?c zIw29yXBk=W=E^7P*i|=8v(b?SociEdo#{t|fVZ@O2lj}cMRP?(|DifpVLJS0K{w*UTbfR#-{lFl6*=BaPgp z?W3LcH=(cqGo@Syq%6I&(yV%bA4yj%lzY5%rjuRhy|f)qFfVh>sVCjzp32H9=^& z*_pe$s?1RD?jOJglFTn?x_R3KX}TgO3D+1MP)IQ)PD%zZ;yKv#DkSYzg3f8Z)toSY zsIlbgB6^QKkQx?4>fTnMkayPx^zH2a+VTI_DQ^joL$KKlAL)8`BLDbV1J`VvtlwDq GKKTz{7qG?v From 0466b8a5d3edc351c081588ff367339a91e54b73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Sun, 5 Oct 2025 16:09:53 -0500 Subject: [PATCH 010/216] Document tags: C - F (#40711) * one step forward * the letter C * some of D * the letter D * the letter E * the letter F * stay in scope don't stray --------- Co-authored-by: iaada --- .../Catalog/Fills/Boxes/emergency.yml | 1 + .../Catalog/Fills/Boxes/general.yml | 2 +- .../Catalog/Fills/Boxes/medical.yml | 2 +- .../Entities/Mobs/Player/observer.yml | 2 +- .../Consumable/Food/Containers/box.yml | 6 +- .../Smokeables/Cigarettes/rolling_paper.yml | 2 +- .../Syndicate_Gadgets/guardian_activators.yml | 3 +- .../Objects/Materials/Sheets/other.yml | 2 +- .../Entities/Objects/Misc/folders.yml | 2 +- .../Ammunition/Cartridges/antimateriel.yml | 1 - .../Ammunition/Cartridges/caseless_rifle.yml | 1 - .../Ammunition/Cartridges/heavy_rifle.yml | 1 - .../Ammunition/Cartridges/light_rifle.yml | 1 - .../Guns/Ammunition/Cartridges/magnum.yml | 1 - .../Guns/Ammunition/Cartridges/pistol.yml | 1 - .../Guns/Ammunition/Cartridges/rifle.yml | 1 - .../Guns/Ammunition/Cartridges/shotgun.yml | 5 - .../Guns/Ammunition/Cartridges/toy.yml | 1 - .../Guns/Ammunition/Magazines/pistol.yml | 2 +- .../Weapons/Guns/Launchers/launchers.yml | 4 +- .../Weapons/Guns/Revolvers/revolvers.yml | 2 +- Resources/Prototypes/tags.yml | 326 +++++++++--------- 22 files changed, 181 insertions(+), 188 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml b/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml index 972eb5074b..b5b2fb90d8 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml @@ -183,6 +183,7 @@ - id: DrinkWaterBottleFull - type: Tag tags: + - BoxCardboard - BoxHug - type: entity diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml index 257dd2ea5e..6c789a8f59 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml @@ -408,7 +408,7 @@ - type: Storage grid: - 0,0,5,3 - whitelist: + whitelist: # TODO cardboard boxes shouldn't have whitelisting tags: - Candle - type: StorageFill diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml b/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml index 7f3a16c33a..53d8a00e1d 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml @@ -102,7 +102,7 @@ layers: - state: box - state: bodybags - - type: Storage + - type: Storage # TODO cardboard boxes shouldn't have whitelisting whitelist: tags: - BodyBag diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index cb0cfdb693..08bdbe8ebb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -76,7 +76,7 @@ components: - type: Spectral - type: Tag - tags: + tags: # BAD: Intentional removal of inherited tag - AllowGhostShownByEvent - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml index 5717a12462..0e8f0ce56d 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml @@ -533,6 +533,7 @@ tags: - Trash - HappyHonk + - BoxCardboard - type: StorageFill contents: - id: ToyMouse @@ -704,7 +705,8 @@ - type: Tag tags: - Trash - - CluwneHappyHonk + - CluwneHappyHonk # BAD: Intentional removal of parent tag + - BoxCardboard - type: Sprite sprite: Objects/Storage/Happyhonk/cluwne.rsi state: box @@ -882,7 +884,7 @@ grid: - 0,0,1,1 maxItemSize: Normal - whitelist: + whitelist: # TODO BoxCardboard shouldn't have whitelisted storage tags: - ClothMade - type: Item diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml index 44edce5e07..d28fd027e5 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml @@ -27,7 +27,7 @@ id: PackPaperRollingFilters description: A pack of filters and thin pieces of paper used to make fine smokeables. components: - - type: Storage + - type: Storage # Redundant whitelist: tags: - RollingPaper diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml index 259d36555e..254dcccde9 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/guardian_activators.yml @@ -65,4 +65,5 @@ - state: holo - type: Tag tags: - - BoxHug + - BoxCardboard + - BoxHug diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index 34aff04489..7634f8e3a7 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -108,7 +108,7 @@ - ReagentId: Plasma Quantity: 10 canReact: false - - type: Tag + - type: Tag # Redundant tags: - Sheet - ConstructionMaterial diff --git a/Resources/Prototypes/Entities/Objects/Misc/folders.yml b/Resources/Prototypes/Entities/Objects/Misc/folders.yml index cee720b6ea..632a27324a 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/folders.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/folders.yml @@ -263,7 +263,7 @@ - type: Storage grid: - 0,0,5,3 - whitelist: + whitelist: # Redundant tags: - Document - type: ItemMapper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimateriel.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimateriel.yml index e622952b3f..1fd04ae36f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimateriel.yml @@ -5,7 +5,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeAntiMateriel - type: CartridgeAmmo proto: BulletAntiMateriel diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml index fd465b71d6..8d4e9b8ffc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeCaselessRifle - type: CartridgeAmmo deleteOnSpawn: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml index 51bf0fea54..a953985e9a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeHeavyRifle - type: CartridgeAmmo proto: BulletHeavyRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml index bdd4758fd2..b4af723945 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeLightRifle - type: CartridgeAmmo proto: BulletLightRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml index c7adfb5b1e..58862b9984 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeMagnum - type: CartridgeAmmo proto: BulletMagnum diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml index faa094f7f5..ba2b856778 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgePistol - type: CartridgeAmmo proto: BulletPistol diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml index 2559349c4a..d4304ef803 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeRifle - type: CartridgeAmmo proto: BulletRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml index 72411fc134..3dfab5e84a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - ShellShotgun - type: CartridgeAmmo soundEject: @@ -26,7 +25,6 @@ components: - type: Tag tags: - - Cartridge - ShellShotgun - ShellShotgunLight - type: Sprite @@ -59,7 +57,6 @@ components: - type: Tag tags: - - Cartridge - ShellShotgun - ShellShotgunLight - type: Sprite @@ -118,7 +115,6 @@ components: - type: Tag tags: - - Cartridge - ShellShotgun - ShellShotgunLight - type: Sprite @@ -147,7 +143,6 @@ components: - type: Tag tags: - - Cartridge - ShellShotgun - ShellShotgunLight - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml index 6ec93e1778..510a8fef3e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml @@ -6,7 +6,6 @@ components: - type: Tag tags: - - Cartridge - CartridgeCap - type: CartridgeAmmo - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml index 6af54bb114..47c09282c6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml @@ -337,7 +337,7 @@ components: - type: BallisticAmmoProvider proto: CartridgePistol - whitelist: + whitelist: # Redundant tags: - CartridgePistol soundInsert: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index de9cea7e52..7a2b44e615 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -425,7 +425,7 @@ description: It fires large meteors. components: - type: BallisticAmmoProvider - whitelist: + whitelist: # Redundant tags: - CartridgeRocket proto: MeteorMedium @@ -438,7 +438,7 @@ description: It fires slow immovable rods. components: - type: BallisticAmmoProvider - whitelist: + whitelist: # Redundant tags: - CartridgeRocket proto: ImmovableRodSlow diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 1f24828428..1ea835a2cd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -153,7 +153,7 @@ suffix: armor-piercing components: - type: RevolverAmmoProvider - whitelist: + whitelist: # Redundant tags: - CartridgeMagnum - SpeedLoaderMagnum diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 92c71a9eaf..4f6c018f23 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -40,10 +40,10 @@ id: Arrow # Storage whitelist: ClothingBeltQuiver - type: Tag - id: ArtifactFragment # Storage whitelist: OreBag, CargoBounty: BountyArtifactFragment, ConstructionGraph: Artifact + id: ArtifactFragment # Storage whitelist: OreBag. CargoBounty: BountyArtifactFragment. ConstructionGraph: Artifact - type: Tag - id: ATVKeys # Unused + id: ATVKeys # Unused x2 ## B ## @@ -57,7 +57,7 @@ id: Banana # CargoBounty: BountyBanana - type: Tag - id: BananaPeel # SpecialDigestible by OrganAnimalRuminantStomach, and several BananaClown ConstructionGraphs + id: BananaPeel # SpecialDigestible by OrganAnimalRuminantStomach. Several BananaClown ConstructionGraphs - type: Tag id: Bandana # CargoBounty: BountyBandana @@ -66,13 +66,13 @@ id: BaseballBat # CargoBounty: BountyBaseballBat - type: Tag - id: BBQsauce # Storage whitelist: ClothingBeltChef and FoodCartHot, ItemMapper: ClothingBeltChef and FoodCartHot + id: BBQsauce # Storage whitelist: ClothingBeltChef and FoodCartHot. ItemMapper: ClothingBeltChef and FoodCartHot - type: Tag id: Bedsheet # CargoBounty: BountyBedsheet - type: Tag - id: Bee # Mode switch whitelisting for BuzzochloricBees (only damages non-bees) + id: Bee # Mode switching for BuzzochloricBees (only damages non-bees) - type: Tag id: Beer # CargoBounty: BountyBeer @@ -87,7 +87,7 @@ id: BlueprintAutolathe # Whitelist on BlueprintReceiverComponent on the autolate for linking this entity's BlueprintComponent - type: Tag - id: BodyBag # Storage whitelist: BoxBodyBag # TODO cardboard boxes shouldn't have whitelisting + id: BodyBag # Storage whitelist: BoxBodyBag - type: Tag id: Boll # MaterialStorage whitelist: Sheetifier @@ -147,16 +147,16 @@ id: BorgModuleSyndicateAssault # Cyborg module category for extra evil red robots (nukies) - type: Tag - id: Bot # Unused + id: Bot # Unused (Exists on MobRobotic, MobSupplyBot) - type: Tag - id: BotanyHatchet # Storage whitelist: ClothingBeltPlant, ItemMapper: ClothingBeltPlant + id: BotanyHatchet # Storage whitelist: ClothingBeltPlant. ItemMapper: ClothingBeltPlant - type: Tag - id: BotanyHoe # Storage whitelist: ClothingBeltPlant, ItemMapper: ClothingBeltPlant + id: BotanyHoe # Storage whitelist: ClothingBeltPlant. ItemMapper: ClothingBeltPlant - type: Tag - id: BotanyShovel # Storage whitelist: ClothingBeltPlant, ItemMapper: ClothingBeltPlant + id: BotanyShovel # Storage whitelist: ClothingBeltPlant. ItemMapper: ClothingBeltPlant - type: Tag # Used for specifically chemistry bottles id: Bottle # Storage whitelist: ChemMaster, ChemBag, SmartFridge, ClothingBeltJanitor, ClothingBeltMedical, ClothingBeltPlant @@ -165,10 +165,10 @@ id: BoxCardboard # CargoBounty: BountyCardboardBox - type: Tag - id: BoxHug # Unused + id: BoxHug # Unused (Exists on BoxHug, BoxHoloclown) - type: Tag - id: Brain # Storage whitelist: MMI. CargoBounty: BountyBrain. FoodSequenceElement: Brain + id: Brain # Storage whitelist: MMI. CargoBounty: BountyBrain - type: Tag id: BrassInstrument # MachineBoard construction: DawInstrumentMachineCircuitboard @@ -177,7 +177,7 @@ id: Bread # CargoBounty: BountyBread. Blacklisted in BountyFruit and BountyVegetable - type: Tag - id: Briefcase # Unused + id: Briefcase # Unused (exists on BriefcaseBase) - type: Tag id: BrimFlatcapBrown # ConstructionGraph: BladedFlatcapBrown @@ -192,16 +192,16 @@ id: Bucket # Storage whitelist: JanitorialTrolley. ItemMapper: JanitorialTrolley. ConstructionGraph: CleanBot, scraphelmet - type: Tag - id: Burger # Unused x2 (this is the only place burger tag exists) + id: Burger # Food sequence key - type: Tag - id: BulletFoam # BallisticAmmoProviderComponent whitelist for WeaponRifleFoam, FoamCrossbow, MagazineFoamBox, BoxDonkSoftBox + id: BulletFoam # Ammo: WeaponRifleFoam, FoamCrossbow, MagazineFoamBox, BoxDonkSoftBox - type: Tag id: Burnt # Storage whitelist: ashtray. Seemingly redundant - type: Tag - id: Bun # FoodSequenceElement: BunTopBurger, CottonBunTopBurger + id: Bun # Unused (Exists on FoodSequenceElements BunTopBurger and CottonBunTopBurger) - type: Tag id: BypassDropChecks # Entities with this tag don't care about drop distance or walls (Aghost) @@ -212,414 +212,416 @@ ## C ## - type: Tag - id: CableCoil + id: CableCoil # Storage whitelist: ClothingBeltUtility, BorgModuleCable - type: Tag - id: Candle + id: Candle # Storage whitelist: BoxCandle - type: Tag - id: Cake + id: Cake # CargoBounty blacklist: BountyFruit, BountyVegetable - type: Tag - id: CaneBlade + id: CaneBlade # Storage whitelist: CaneSheath. ItemMapper: CaneSheath - type: Tag - id: CannonBall + id: CannonBall # Ammo: WeaponLauncherPirateCannon, ShuttleGunPirateCannon - type: Tag - id: CannotSuicide + id: CannotSuicide # Used by SuicideSystem. Entities with this tag ghost when attempting to suicide - type: Tag - id: CanPilot + id: CanPilot # Used by ShuttleConsoleSystem to guard who's allowed to pilot ships - type: Tag - id: CaptainSabre + id: CaptainSabre # Storage whitelist: ClothingBeltSheath. ItemMapper: ClothingBeltSheath - type: Tag - id: Carpet + id: Carpet # Unused (exists on carpets (obviously)) - type: Tag - id: Carrot + id: Carrot # CargoBounty: BountyCarrot - type: Tag - id: CarrotFries + id: CarrotFries # CargoBounty: BountyCarrotFries - type: Tag - id: Carp + id: Carp # CargoBounty: BountyCarp + +- type: Tag # NOT bullets. This is for the cart to load PDA programs + id: Cartridge # Storage whitelist: BasePDA, TrashBag - type: Tag - id: Cartridge + id: CartridgeAntiMateriel # Ammo: WeaponSniperHristov, Musket, BaseMagazineBoxAntiMateriel - type: Tag - id: CartridgeAntiMateriel + id: CartridgeCap # Ammo: RevolverCapGun, RevolverCapGunFake, BaseSpeedLoaderCap - type: Tag - id: CartridgeCap + id: CartridgeCaselessRifle # Ammo: WeaponPistolCobra, BaseMagazineCaselessRifle, BaseMagazineBoxCaselessRifle - type: Tag - id: CartridgeCaselessRifle + id: CartridgeCHIMP # Unused x2 - type: Tag - id: CartridgeCHIMP + id: CartridgeHeavyRifle # Unused (exists on BaseCartridgeHeavyRifle) - type: Tag - id: CartridgeHeavyRifle + id: CartridgeLightRifle # Ammo: BaseWeaponLightMachineGun, BaseWeaponRifle, BaseWeaponSniper + # SpeedLoaderLightRifle, BaseMagazineLightRifle, BaseMagazineBoxLightRifle - type: Tag - id: CartridgeLightRifle + id: CartridgeMagnum # Ammo: BaseWeaponRevolver, RevolverCapGunFake, WeaponPistolN1984, WeaponPistolFlintlock, XenoArtifactGun + # BaseMagazineBoxMagnum, BaseMagazineMagnum, BaseSpeedLoaderMagnum - type: Tag - id: CartridgeMagnum + id: CartridgePistol # Ammo: BaseWeaponPistol, BasePistol, BaseWeaponSubMachineGun, WeaponPistolViper, WeaponSubMachineGunDrozd, WeaponSubMachineGunWt550 + # BaseMagazineBoxPistol, BaseMagazinePistol, BaseMagazinePistolHighCapacity, BaseMagazinePistolSubMachineGun, MagazinePistolSubMachineGunTopMounted, BaseSpeedLoaderPistol - type: Tag - id: CartridgePistol + id: CartridgeRifle # Ammo: BaseMagazineRifle, WeaponRifleLecter, WeaponRifleEstoc, WeaponRifleM90GrenadeLauncher, BaseMagazineBoxRifle - type: Tag - id: CartridgeRifle + id: CartridgeRocket # Ammo: WeaponLauncherRocket, WeaponLauncherMultipleRocket - type: Tag - id: CartridgeRocket - -# Allows you to walk over tile entities such as lava without steptrigger -- type: Tag - id: Catwalk + id: Catwalk # Allows you to walk over tile entities such as lava without steptrigger - type: Tag - id: CentrifugeCompatible + id: CentrifugeCompatible # Storage whitelist: MachineCentrifuge - type: Tag - id: Chicken + id: Chicken # MetamorphRecipe: FoodBurgerChicken - type: Tag - id: Cheese - -# Allowed to control someone wearing a Chef's hat if inside their hat. -- type: Tag - id: ChefPilot + id: Cheese # MetamorphRecipe: FoodBurgerCheese, FoodBurgerDuck - type: Tag - id: ChemDispensable # container that can go into the chem dispenser + id: ChefPilot # Allowed to control someone wearing a Chef's hat if inside their hat. - type: Tag - id: ChiliBowl + id: ChemDispensable # Storage whitelist: ChemDispenserEmpty, SmartFridge, BorgModuleAdvancedChemical - type: Tag - id: Cigarette + id: ChiliBowl # CargoBounty: BountyChili - type: Tag - id: CigFilter + id: Cigarette # Storage whitelist: Ashtray - type: Tag - id: CigPack + id: CigFilter # Storage whitelist: PackPaperRolling - type: Tag - id: Cleaver + id: CigPack # Storage whitelist: ClothingBeltUtility, ClothingBeltAssault, ClothingBeltChef, ClothingBeltMedical, ClothingBeltJanitor - type: Tag - id: ClockworkGlassShard + id: Cleaver # Storage whitelist: ClothingBeltChef. ItemMapper: ClothingBeltChef - type: Tag - id: ClothMade + id: ClockworkGlassShard # Unused (Exists on ShardGlassClockwork) - type: Tag - id: ClownMask + id: ClothMade # SpecialDigestible: OrganMothStomach. Storage whitelist: FoodBoxCloth - type: Tag - id: ClownRecorder + id: ClownMask # CargoBounty: BountyClownCostume. ConstructionGraph: Honker, BananaClownMask - type: Tag - id: ClownRubberStamp + id: ClownRecorder # ConstructionGraph: ClownHardsuit - type: Tag - id: ClownShoes + id: ClownRubberStamp # Unused: RubberStampClown - type: Tag - id: ClownSuit + id: ClownShoes # CargoBounty: BountyClownCostume. ConstructionGraph: Honker, BananaClownShoes - type: Tag - id: CluwneHappyHonk + id: ClownSuit # ConstructionGraph: BananaClownJumpsuit - type: Tag - id: CluwneHorn + id: CluwneHappyHonk # ConstructionGraph: JonkBot - type: Tag - id: Cola + id: CluwneHorn # ConstructionGraph: JonkBot - type: Tag - id: Coldsauce + id: Cola # Storage whitelist: DrinkCanPack - type: Tag - id: CombatKnife + id: Coldsauce # Storage whitelist: ClothingBeltChef and FoodCartHot. ItemMapper: ClothingBeltChef and FoodCartHot - type: Tag - id: ComputerTelevisionCircuitboard + id: CombatKnife # Storage whitelist: ClothingBeltSecurity - type: Tag - id: ConstructionMaterial + id: ComputerTelevisionCircuitboard # ConstructionGraph: WallmountTelevision - type: Tag - id: ConveyorAssembly + id: ConstructionMaterial # Storage whitelist: BorgModuleConstruction - type: Tag - id: CoordinatesDisk + id: ConveyorAssembly # ConstructionGraph: ConveyorGraph + +- type: Tag + id: CoordinatesDisk # Storage whitelist: DiskCase - type: Tag # designed to let corgis wear things; at present only for SmartCorgi. View PR 33737 on upstream for more dog wearables id: CorgiWearable - type: Tag #Ohioans die happy - id: Corn + id: Corn # CargoBounty: BountyCorn - type: Tag - id: CottonBoll + id: CottonBoll # CargoBounty: BountyCottonBoll - type: Tag - id: CottonBurger + id: CottonBurger # Food sequence key - type: Tag - id: Cow + id: Cow # Reproduction key - type: Tag - id: Crab + id: Crab # MetamorphRecipe: FoodBurgerCrab - type: Tag - id: Crayon + id: Crayon # SpecialDigestible: OrganAnimalStomach. CargoBounty: BountyCrayon - type: Tag - id: CrayonBlack + id: CrayonBlack # ConstructionGraph: MimeHardsuit. ItemMapper: CrayonBox - type: Tag - id: CrayonBlue + id: CrayonBlue # ItemMapper: CrayonBox - type: Tag - id: CrayonGreen + id: CrayonGreen # ItemMapper: CrayonBox - type: Tag - id: CrayonOrange + id: CrayonOrange # ItemMapper: CrayonBox - type: Tag - id: CrayonPurple + id: CrayonPurple # ConstructionGraph: ClownHardsuit. ItemMapper: CrayonBox - type: Tag - id: CrayonRed + id: CrayonRed # ConstructionGraph: MimeHardsuit, ClownHardsuit. ItemMapper: CrayonBox - type: Tag - id: CrayonWhite + id: CrayonWhite # ItemMapper: CrayonBox - type: Tag - id: CrayonYellow + id: CrayonYellow # ConstructionGraph: ClownHardsuit. ItemMapper: CrayonBox - type: Tag - id: Creamsicle + id: Creamsicle # Blacklist on BountyFruit - type: Tag - id: Crowbar + id: Crowbar # Storage whitelist: ClothingBeltUtility, ClothingBeltChiefEngineer. ItemMapper: ClothingBeltUtility, ClothingBeltChiefEngineer - type: Tag - id: CrowbarRed + id: CrowbarRed # Storage whitelist: ClothingBeltUtility, ClothingBeltChiefEngineer. ItemMapper: ClothingBeltUtility, ClothingBeltChiefEngineer - type: Tag - id: Cryobeaker + id: Cryobeaker # Unused x2 - type: Tag - id: CrystalBlack + id: CrystalBlack # ConstructionGraph: BlackLight, BlackLightBulb - type: Tag - id: CrystalBlue + id: CrystalBlue # ConstructionGraph: BlueLight, BlueLightBulb - type: Tag - id: CrystalCyan + id: CrystalCyan # ConstructionGraph: CyanLight, CyanLightBulb - type: Tag - id: CrystalGreen + id: CrystalGreen # ConstructionGraph: GreenLight, GreenLightBulb - type: Tag - id: CrystalOrange + id: CrystalOrange # ConstructionGraph: OrangeLight, OrangeLightBulb - type: Tag - id: CrystalPink + id: CrystalPink # ConstructionGraph: PinkLight, PinkLightBulb - type: Tag - id: CrystalRed + id: CrystalRed # ConstructionGraph: RedLight, RedLightBulb - type: Tag - id: CrystalYellow + id: CrystalYellow # ConstructionGraph: YellowLight, YellowLightBulb - type: Tag - id: CubanCarp + id: CubanCarp # CargoBounty: BountyCubanCarp ## D ## - type: Tag - id: DeathAcidifier + id: DeathAcidifier # Unused (Exists on DeathAcidifierImplant) - type: Tag - id: Debug + id: Debug # Exists on various debug / testing entities, but seemingly unused + +- type: Tag # Exists on diagonal walls and windows + id: Diagonal # Used by TileWallsCommand and FixRotationsCommand - type: Tag - id: Diagonal + id: Diamond # CargoBounty: BountySalvageDiamond - type: Tag - id: Diamond + id: Dice # Storage whitelist: BorgModuleService, DiceBag, BooksBag - type: Tag - id: Dice + id: DiscreteHealthAnalyzer # Storage whitelist: ClothingBeltMedical. ConstructionGraph: MediBot - type: Tag - id: DiscreteHealthAnalyzer #So construction recipes don't eat medical PDAs + id: DNASolutionScannable # Used by ForensicScannerSystem for scanning a solution container. Exists only on Puddle - type: Tag - id: DNASolutionScannable + id: DockArrivals # Used by ArrivalsSystem for finding a priority FTL destination - type: Tag - id: DockArrivals + id: DockCargo # Unused x2 - type: Tag - id: DockCargo + id: DockEmergency # Used bv EmergencyShuttleSystem - type: Tag - id: DockEmergency + id: Document # A superset of Paper tag. Represents a paper-like entity with writing on it, but is not necessarily writeable itself. - type: Tag - id: Document + id: DonkPocket # Storage whitelist: FoodBoxDonkpocket - type: Tag - id: DonkPocket + id: Donut # Storage whitelist: FoodBoxDonut. CargoBounty: BountyDonut - type: Tag - id: Donut + id: DoorBumpOpener # Used by SharedDoorSystem to allow entities to open doors when they collide. - type: Tag - id: DoorBumpOpener + id: DoorElectronics # ConstructionGraph: PinionAirlock, BlastDoor, Windoor + # Used interchangeably with DoorElectronicsComponent, sometimes even in the same graph. TODO pick one - type: Tag - id: DoorElectronics + id: DoorElectronicsConfigurator # Used by ActivatableUIComponent on entity DoorElectronics to whitelist a tool to open the UI. - type: Tag - id: DoorElectronicsConfigurator + id: DrinkBottle # Storage whitelist: BoozeDispenserEmpty, SodaDispenserEmpty - type: Tag - id: DrinkBottle + id: DrinkCan # ConstructionGraph: FireBomb - type: Tag - id: DrinkCan + id: DrinkCup # Unused. Exists on DrinkBaseCup, DrinkWaterCup, DrinkGlass - type: Tag - id: DrinkCup + id: DrinkGlass # Unused. Exists on DrinkGlass, DrinkShotGlass, DrinkJarWhat, DrinkShakeBase - type: Tag - id: DrinkGlass + id: DrinkSpaceGlue # Unused. Exists on DrinkSpaceGlue, CrazyGlue - type: Tag - id: DrinkSpaceGlue + id: Dropper # Storage whitelist: ClothingBeltMedical, ClothingBeltPlant, ChemBag - type: Tag - id: Dropper - -- type: Tag - id: Duck + id: Duck # Reproduction key. MetamorphRecipe: FoodBurgerDuck ## E ## - type: Tag - id: Ectoplasm + id: Ectoplasm # ConstructionGraph: PlushieGhostRevenant - type: Tag - id: Egg + id: Egg # Storage whitelist: FoodContainerEgg - type: Tag - id: EmagImmune + id: EmagImmune # Default value in EmagComponent to prevent the emag - type: Tag - id: EmitterBolt + id: EmitterBolt # Default value in ContainmentFieldGeneratorComponent for collisions that power the generator - type: Tag - id: EncryptionCargo + id: EncryptionCargo # ItemMapper: TelecomServer - type: Tag - id: EncryptionCommand + id: EncryptionCommand # ItemMapper: TelecomServer - type: Tag - id: EncryptionCommon + id: EncryptionCommon # ItemMapper: TelecomServer - type: Tag - id: EncryptionElse + id: EncryptionElse # Unused x2 - type: Tag - id: EncryptionEngineering + id: EncryptionEngineering # ItemMapper: TelecomServer - type: Tag - id: EncryptionMedical + id: EncryptionMedical # ItemMapper: TelecomServer - type: Tag - id: EncryptionScience + id: EncryptionScience # ItemMapper: TelecomServer - type: Tag - id: EncryptionSecurity + id: EncryptionSecurity # ItemMapper: TelecomServer - type: Tag - id: EncryptionService + id: EncryptionService # ItemMapper: TelecomServer - type: Tag - id: Enzyme + id: Enzyme # Storage whitelist: ClothingBeltChef. ItemMapper: ClothingBeltChef - type: Tag - id: ExCable + id: ExCable # Placement blacklist on CableDetStack. Placement whitelist on WiredDetonator - type: Tag - id: ExplosivePassable + id: ExplosivePassable # Unused x2 ## F ## - type: Tag - id: FakeMindShieldImplant + id: FakeMindShieldImplant # Used by FakeMindShieldSystem to toggle the action when a chameleon outfit is selected - type: Tag - id: FakeNukeDisk + id: FakeNukeDisk # Exists so that the fake nuke disk can be blacklisted by storages that blacklist the real disk - type: Tag - id: Figurine + id: Figurine # Storage whitelist: BooksBag, BorgModuleService. CargoBounty: BountyFigurine - type: Tag - id: FireAlarm + id: FireAlarm # Used by AtmosAlarmableComponent for syncing devices - type: Tag - id: FireAlarmElectronics + id: FireAlarmElectronics # ConstructionGraph: FireAlarmAssembly - type: Tag - id: FireAxe + id: FireAxe # Storage whitelist: FireAxeCabinet - type: Tag - id: FirelockElectronics + id: FirelockElectronics # ConstructionGraph: Firelock - type: Tag - id: FireExtinguisher + id: FireExtinguisher # ConstructionGraph: FireBot - type: Tag - id: FireHelmet + id: FireHelmet # ConstructionGraph: FireBot - type: Tag - id: Flare + id: Flare # Storage whitelist: ClothingBeltUtility - type: Tag - id: Flashlight + id: Flashlight # Storage whitelist: ClothingBeltUtility, ClothingBeltJanitor - type: Tag - id: Flesh + id: Flesh # Used by FleshKudzu to ignore contacts with flesh creatures - type: Tag - id: Flower + id: Flower # CargoBounty: flowerwreath. CargoBounty: BountyFlower - type: Tag - id: Folder + id: Folder # Storage whitelist: Bookshelf, NoticeBoard - type: Tag - id: FoodSnack + id: FoodSnack # Storage whitelist: CandyBucket, CandyBowl. ItemMapper: CandyBowl - type: Tag - id: FootstepSound + id: FootstepSound # SharedMoverController checks for this before playing footstep sounds - type: Tag - id: ForceableFollow + id: ForceableFollow # Used by FollowerSystem to give entities an altverb to start orbiting the user - type: Tag id: ForceFixRotations # fixrotations command WILL target this @@ -628,10 +630,10 @@ id: ForceNoFixRotations # fixrotations command WON'T target this - type: Tag - id: FreezerElectronics + id: FreezerElectronics # ConstructionGraph: CrateFreezer, ClosetFreezer - type: Tag - id: Fruit + id: Fruit # SpecialDigestible: OrganReptilianStomach. CargoBounty: BountyFruit ## G ## @@ -1070,7 +1072,7 @@ id: ParadoxCloneObjectiveBlacklist # objective entities with this tag don't get copied to paradox clones - type: Tag - id: Paper + id: Paper # A writeable piece of paper. Subset of Document tag. SpecialDigestible: OrganMothStomach, OrganReptilianStomach - type: Tag id: Pancake @@ -1323,7 +1325,7 @@ id: SkeletonMotorcycleKeys - type: Tag - id: Skewer + id: Skewer # Food sequence key - type: Tag id: Slice # sliced fruit, vegetables, pizza etc. @@ -1436,7 +1438,7 @@ id: TabletopBoard - type: Tag - id: Taco + id: Taco # Food sequence key - type: Tag id: TabletopPiece From 326eaad18dc784e66970d0cb04bcd360324f2e9f Mon Sep 17 00:00:00 2001 From: Centronias Date: Sun, 5 Oct 2025 15:00:33 -0700 Subject: [PATCH 011/216] Prioritize spoon mixing over drinking (#40704) * no, I can't use a spoon to drink a drink. * Update Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs --- .../Chemistry/EntitySystems/ReactionMixerSystem.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs b/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs index 3913afbd07..ee99418970 100644 --- a/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ReactionMixerSystem.cs @@ -19,7 +19,7 @@ public sealed partial class ReactionMixerSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnAfterInteract, before: [typeof(IngestionSystem)]); SubscribeLocalEvent(OnShake); SubscribeLocalEvent(OnDoAfter); } @@ -29,12 +29,13 @@ public sealed partial class ReactionMixerSystem : EntitySystem if (!args.Target.HasValue || !args.CanReach || !entity.Comp.MixOnInteract) return; - if (!MixAttempt(entity, args.Target.Value, out var solution)) + if (!MixAttempt(entity, args.Target.Value, out _)) return; var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.TimeToMix, new ReactionMixDoAfterEvent(), entity, args.Target.Value, entity); _doAfterSystem.TryStartDoAfter(doAfterArgs); + args.Handled = true; } private void OnDoAfter(Entity entity, ref ReactionMixDoAfterEvent args) From 526ca2f800b191ff1276f4157c62f191ccc9e7ff Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 27 Sep 2025 20:53:00 +0000 Subject: [PATCH 012/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c30974ca1f..d89cb355b2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: You can now patch holes in the floors of the evac shuttle and ATS. - type: Fix - id: 8501 - time: '2025-05-17T01:54:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36989 - author: Lanedon changes: - message: Multiple head gear now hides the hair ! @@ -3963,3 +3956,10 @@ id: 9011 time: '2025-09-27T17:01:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39914 +- author: SignalSender + changes: + - message: reworked salv instrument spawns to include more instruments + type: Tweak + id: 9012 + time: '2025-09-27T20:51:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40572 From 56cf3f536d3f3296cfe9e21eb0611076095f953c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 27 Sep 2025 21:22:14 +0000 Subject: [PATCH 013/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d89cb355b2..ae9e5dfdd7 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Lanedon - changes: - - message: Multiple head gear now hides the hair ! - type: Fix - id: 8502 - time: '2025-05-17T05:05:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36818 - author: ArtisticRoomba changes: - message: Metal foam grenades have been added to station engineer lockers. @@ -3963,3 +3956,11 @@ id: 9012 time: '2025-09-27T20:51:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40572 +- author: keronshb + changes: + - message: 'EXPERIMENTAL: Tasers, a short-ranged gun capable of causing targets + to become prone, are now added into Warden, HoS, and Security locker fills.' + type: Add + id: 9013 + time: '2025-09-27T21:21:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39087 From 7a6152217ee091802aef53dbefdb86f825245966 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 28 Sep 2025 03:26:49 +0000 Subject: [PATCH 014/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ae9e5dfdd7..b0f07193f9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: ArtisticRoomba - changes: - - message: Metal foam grenades have been added to station engineer lockers. - type: Add - - message: Metal foam grenades have been tweaked to cover more area over a longer - period of time. - type: Tweak - - message: Metal foam grenades now have a 5 second timer. - type: Tweak - - message: Aluminum foam walls now take one hit to destroy. - type: Tweak - id: 8503 - time: '2025-05-17T05:21:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37476 - author: EmoGarbage404 changes: - message: Fixed tetherguns not having a beam when dragging. @@ -3964,3 +3950,10 @@ id: 9013 time: '2025-09-27T21:21:05.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39087 +- author: SurrealShibe + changes: + - message: Vulpkanin now audibly gasp. + type: Fix + id: 9014 + time: '2025-09-28T03:25:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40579 From 424c057c9220744c83d05a38e34f79dcc19b6070 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 28 Sep 2025 03:44:11 +0000 Subject: [PATCH 015/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b0f07193f9..399c7a600c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Fixed tetherguns not having a beam when dragging. - type: Fix - id: 8504 - time: '2025-05-17T05:22:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37510 - author: aada changes: - message: Id cards now have the same max length as character names. @@ -3957,3 +3950,10 @@ id: 9014 time: '2025-09-28T03:25:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40579 +- author: keronshb + changes: + - message: Tasers can now be used by Pacifists. + type: Tweak + id: 9015 + time: '2025-09-28T03:43:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40588 From bcdaae489e7b814ded24f8b2775af146da83121f Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 28 Sep 2025 18:34:40 +0000 Subject: [PATCH 016/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 399c7a600c..78f8cf0e39 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: aada - changes: - - message: Id cards now have the same max length as character names. - type: Fix - id: 8505 - time: '2025-05-17T05:27:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35407 - author: ArtisticRoomba changes: - message: Radiation collector power output has been buffed. Remember engineers, @@ -3957,3 +3950,10 @@ id: 9015 time: '2025-09-28T03:43:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40588 +- author: beck-thompson + changes: + - message: Labelers can no longer add markup tags to items + type: Fix + id: 9016 + time: '2025-09-28T18:33:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40600 From 9d3fde24f42cf09ab36d080f2e02877afd913e43 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 29 Sep 2025 10:29:55 +0000 Subject: [PATCH 017/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 78f8cf0e39..3e525b0ccf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ArtisticRoomba - changes: - - message: Radiation collector power output has been buffed. Remember engineers, - the third level on the PA is safe for long term use! - type: Tweak - id: 8506 - time: '2025-05-17T07:45:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37475 - author: Ilya246 changes: - message: Shuttles can now deal (weak) collision damage. @@ -3957,3 +3949,10 @@ id: 9016 time: '2025-09-28T18:33:27.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40600 +- author: SirWarock + changes: + - message: Fixed Shotgun Ammo Count not properly updating when reloading! + type: Fix + id: 9017 + time: '2025-09-29T10:28:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40568 From f2dcd27ecb820810e89569035388132fc2041dfc Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 30 Sep 2025 03:46:36 +0000 Subject: [PATCH 018/216] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index eba4933919..227040557a 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -731,4 +731,11 @@ id: 88 time: '2025-09-25T21:36:16.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40546 +- author: Absotively + changes: + - message: Updated Elkridge's burn chambers for safer delta pressure handling + type: Tweak + id: 89 + time: '2025-09-30T03:45:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40590 Order: 1 From c031b95f42165b6947c0b1fa75ce94bc64bd823d Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 30 Sep 2025 21:56:21 +0000 Subject: [PATCH 019/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3e525b0ccf..a78c8e387f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ilya246 - changes: - - message: Shuttles can now deal (weak) collision damage. - type: Add - id: 8507 - time: '2025-05-17T17:11:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37422 - author: VlaDOS1408 changes: - message: Fax UI Menu has been reworked and now behaves better on resizing @@ -3956,3 +3949,11 @@ id: 9017 time: '2025-09-29T10:28:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40568 +- author: BoskiYourk, spanky_spanky + changes: + - message: Microwaves can now be picked up when unwrenched, and optionally, used + as a weapon. + type: Tweak + id: 9018 + time: '2025-09-30T21:55:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40618 From f9d9db6cfa38671fd9d9381bddd84f17b153f1f0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 1 Oct 2025 04:06:56 +0000 Subject: [PATCH 020/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a78c8e387f..0a6df6eb48 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: VlaDOS1408 - changes: - - message: Fax UI Menu has been reworked and now behaves better on resizing - type: Tweak - id: 8508 - time: '2025-05-17T17:20:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33825 - author: YotaXP changes: - message: Favorites selected in the construction menu will now persist between @@ -3957,3 +3950,10 @@ id: 9018 time: '2025-09-30T21:55:10.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40618 +- author: leahcat + changes: + - message: moved desoxyephedrine from ambrosia plants to glasstle. + type: Tweak + id: 9019 + time: '2025-10-01T04:05:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40638 From a4b34c6a3c3f38dfd24065e22084af94063d0ba0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 1 Oct 2025 11:47:45 +0000 Subject: [PATCH 021/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0a6df6eb48..93202dfe94 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: YotaXP - changes: - - message: Favorites selected in the construction menu will now persist between - rounds. - type: Tweak - id: 8509 - time: '2025-05-17T17:37:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35867 - author: perryprog changes: - message: You can now link cutter machines to material silos. @@ -3957,3 +3949,10 @@ id: 9019 time: '2025-10-01T04:05:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40638 +- author: SignalSender + changes: + - message: Musicians now have a Stage Name + type: Tweak + id: 9020 + time: '2025-10-01T11:46:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40640 From 3218642e132d44f830e4fb1820a9f08c34c53d38 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 1 Oct 2025 20:24:48 +0000 Subject: [PATCH 022/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 93202dfe94..c417ac17b2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: perryprog - changes: - - message: You can now link cutter machines to material silos. - type: Tweak - id: 8510 - time: '2025-05-18T01:51:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37554 -- author: Spangs04 - changes: - - message: Resprited Telecomms - type: Tweak - id: 8511 - time: '2025-05-18T02:10:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35811 - author: EmoGarbage404 changes: - message: Added the salvage job board! This board allows salvagers to access and @@ -3956,3 +3942,18 @@ id: 9020 time: '2025-10-01T11:46:34.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40640 +- author: Velcroboy + changes: + - message: Shutters, blast doors, and lights can now be linked using the "Link Defaults" + button. + type: Tweak + id: 9021 + time: '2025-10-01T20:22:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37690 +- author: YoungThugSS14 + changes: + - message: The Prisoner Eva Suit now has the same stats as an emergency eva suit. + type: Tweak + id: 9022 + time: '2025-10-01T20:23:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36696 From 7a9cb78a849ad1acc7f399f04515b549debcaf75 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 1 Oct 2025 20:29:24 +0000 Subject: [PATCH 023/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c417ac17b2..90463a8a42 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Added the salvage job board! This board allows salvagers to access and - complete a variety of jobs in order to rank up, earn spesos, and unlock new - cargo orders. Work hard and you too may become a Supreme Salvager. - type: Add - id: 8512 - time: '2025-05-18T04:02:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37549 - author: EmoGarbage404 changes: - message: Lathes can no longer connect to research servers on separate grids @@ -3957,3 +3948,10 @@ id: 9022 time: '2025-10-01T20:23:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/36696 +- author: K-Dynamic + changes: + - message: Puddles now spill over at 50u instead of 20u. + type: Add + id: 9023 + time: '2025-10-01T20:28:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38044 From 6b8f660c8a229f09b2f30fe2098002fd79a1b6cb Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 1 Oct 2025 23:23:45 +0000 Subject: [PATCH 024/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 90463a8a42..5fb3aa1fa1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Lathes can no longer connect to research servers on separate grids - type: Tweak - id: 8513 - time: '2025-05-18T04:04:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36821 - author: 0leshe changes: - message: Changed max and minimum amount of jigger transfer amount @@ -3955,3 +3948,15 @@ id: 9023 time: '2025-10-01T20:28:13.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38044 +- author: Mixelz + changes: + - message: Circuit Totes, a new type of box to compactly carry conspicous chunks + of Circuits! + type: Add + - message: Head Lockers now compact all circuit boards & stamps into boxes for convenience. + type: Tweak + - message: The Surplus Circuit Crate is now a Tote! + type: Tweak + id: 9024 + time: '2025-10-01T23:22:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39868 From 562097abfad4daf7133460f003434c3c70953bf4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 2 Oct 2025 09:03:57 +0000 Subject: [PATCH 025/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5fb3aa1fa1..89fd61b53a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: 0leshe - changes: - - message: Changed max and minimum amount of jigger transfer amount - type: Tweak - id: 8514 - time: '2025-05-18T04:14:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35962 - author: ArtisticRoomba changes: - message: Air grenades have been added! These can fill up a spaced room of ~30 @@ -3960,3 +3953,10 @@ id: 9024 time: '2025-10-01T23:22:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39868 +- author: sudobeans + changes: + - message: utility knife, which can be made in the autolathe. + type: Add + id: 9025 + time: '2025-10-02T09:02:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39567 From cd968bee527c762cc1d2159811e2d4f7ccc98b71 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 2 Oct 2025 20:12:38 +0000 Subject: [PATCH 026/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 89fd61b53a..66814d6822 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: ArtisticRoomba - changes: - - message: Air grenades have been added! These can fill up a spaced room of ~30 - tiles with fresh air. They can be found in Atmospheric Technician's lockers. - Use them wisely! - type: Add - id: 8515 - time: '2025-05-18T04:32:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37531 - author: EmoGarbage404 changes: - message: Various salvage equipment can now be unlocked through the job board and @@ -3960,3 +3951,11 @@ id: 9025 time: '2025-10-02T09:02:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39567 +- author: kosticia + changes: + - message: Anomalies with inconsistent particles no longer shuffle right before + collision with particle. + type: Fix + id: 9026 + time: '2025-10-02T20:11:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40624 From f5566eafe419d7c40aa64e3151af4ac3115fddb6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 2 Oct 2025 22:48:25 +0000 Subject: [PATCH 027/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 66814d6822..913cf7e5bb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Various salvage equipment can now be unlocked through the job board and - purchased through cargo. - type: Add - - message: Space debris and the mining asteroid no longer generate salvage equipment - type: Tweak - id: 8516 - time: '2025-05-18T06:40:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37561 - author: mrjajkes changes: - message: Add Blatantly Nuclear as a Nuke Song. @@ -3959,3 +3949,14 @@ id: 9026 time: '2025-10-02T20:11:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40624 +- author: archee1 + changes: + - message: Material doors now have destruction sounds and will drop a portion of + their construction materials when destroyed. + type: Add + - message: Material doors now have reduced health, resistances, construction time, + and construction costs + type: Tweak + id: 9027 + time: '2025-10-02T22:47:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36597 From c6c7b78e309e11a9894cfbd4870dfacf2465fa05 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 3 Oct 2025 09:54:59 +0000 Subject: [PATCH 028/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 913cf7e5bb..d7a5e2f44f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: mrjajkes - changes: - - message: Add Blatantly Nuclear as a Nuke Song. - type: Add - id: 8517 - time: '2025-05-18T07:30:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35927 - author: metalgearsloth changes: - message: Shuttles now are treated as rooved for daylight. @@ -3960,3 +3953,10 @@ id: 9027 time: '2025-10-02T22:47:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/36597 +- author: PJB3005 + changes: + - message: You can stuff the nuke disk in plushies now. + type: Tweak + id: 9028 + time: '2025-10-03T09:53:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40674 From c703a0a980d3f7e6b15da53478709cf9f14742ff Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 3 Oct 2025 11:32:50 +0000 Subject: [PATCH 029/216] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 3ac6c8e461..c7107c96ed 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1447,5 +1447,12 @@ Entries: id: 175 time: '2025-09-25T21:43:53.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40246 +- author: Kowlin + changes: + - message: Adjusted meatspike admin log severities. + type: Tweak + id: 176 + time: '2025-10-03T11:31:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40604 Name: Admin Order: 2 From e41662866447e66d3b09a2407174f504a15e5c7b Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 3 Oct 2025 20:34:39 +0000 Subject: [PATCH 030/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d7a5e2f44f..581e72d6aa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Shuttles now are treated as rooved for daylight. - type: Tweak - id: 8518 - time: '2025-05-18T07:47:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36112 - author: ScarKy0 changes: - message: Deliveries can now very rarely spawn as bomb-type! They grant A LOT of @@ -3960,3 +3953,10 @@ id: 9028 time: '2025-10-03T09:53:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40674 +- author: Crude Oil + changes: + - message: Returned PDA lights to original brightness + type: Fix + id: 9029 + time: '2025-10-03T20:33:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40687 From 7e5eee302a83ef26b67850e67295a8e32863bce8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 3 Oct 2025 23:36:14 +0000 Subject: [PATCH 031/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 581e72d6aa..39285bf101 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ScarKy0 - changes: - - message: Deliveries can now very rarely spawn as bomb-type! They grant A LOT of - spesos... at a price. - type: Add - id: 8519 - time: '2025-05-18T08:57:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37069 - author: ScarKy0 changes: - message: Aloxadone has been tweaked. The recipe has been altered to be simplier @@ -3960,3 +3952,10 @@ id: 9029 time: '2025-10-03T20:33:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40687 +- author: NoreUhh + changes: + - message: The Syndicate Cyborg Martyr Module can now be used multiple times. + type: Tweak + id: 9030 + time: '2025-10-03T23:35:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40224 From f23287267c9907c3dfbdfa668660cfa07e7d00c3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 4 Oct 2025 01:45:44 +0000 Subject: [PATCH 032/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 39285bf101..db2b728491 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ScarKy0 - changes: - - message: Aloxadone has been tweaked. The recipe has been altered to be simplier - to make and the healing values have been increased. - type: Tweak - id: 8523 - time: '2025-05-18T09:16:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37239 - author: Simyon changes: - message: The Syndicate and Wizard Communications Console now no longer show who @@ -3959,3 +3951,12 @@ id: 9030 time: '2025-10-03T23:35:01.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40224 +- author: K-Dynamic + changes: + - message: Adds smart equip function to pocket 1, pocket 2, and suit storage slots. + Default binds are Shift+F and Shift+G for first and second pocket, Shift+H for + suit storage. + type: Add + id: 9031 + time: '2025-10-04T01:44:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37975 From cf8d3f9cbc6643f81b840c75aadc25a019eae83d Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 4 Oct 2025 16:52:16 +0000 Subject: [PATCH 033/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index db2b728491..62dcc523d1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Simyon - changes: - - message: The Syndicate and Wizard Communications Console now no longer show who - the message was sent by. - type: Tweak - id: 8524 - time: '2025-05-18T09:18:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37567 - author: SuperGDPWYL changes: - message: A Lone Operative detonating the nuke on-station will now end the round. @@ -3960,3 +3952,10 @@ id: 9031 time: '2025-10-04T01:44:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37975 +- author: AwareFoxy + changes: + - message: Added Pride-O-Mat to marathon! + type: Add + id: 9032 + time: '2025-10-04T16:50:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40696 From e7bdec79806325b717733712e44867f044b0b5ce Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 4 Oct 2025 20:28:28 +0000 Subject: [PATCH 034/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 62dcc523d1..3763a8f76c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: SuperGDPWYL - changes: - - message: A Lone Operative detonating the nuke on-station will now end the round. - type: Add - - message: The endscreen will now properly show how successful Lone Operatives were. - type: Fix - id: 8525 - time: '2025-05-18T11:34:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36498 - author: metalgearsloth changes: - message: Fixes being able to grab items through walls. @@ -3959,3 +3950,10 @@ id: 9032 time: '2025-10-04T16:50:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40696 +- author: Moomoobeef + changes: + - message: Evac directional signs now glow in the dark! + type: Tweak + id: 9033 + time: '2025-10-04T20:27:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38545 From 174995bfd32fd9e323070619ab91542e43d527cd Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 5 Oct 2025 07:41:28 +0000 Subject: [PATCH 035/216] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index c7107c96ed..b2ebdecbfd 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1454,5 +1454,12 @@ Entries: id: 176 time: '2025-10-03T11:31:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40604 +- author: Kowlin + changes: + - message: Stun prods are now high severity when crafted. + type: Tweak + id: 177 + time: '2025-10-05T07:40:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40709 Name: Admin Order: 2 From d66609f9c2abeec4072e7aeaf5bf0f749658aca8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 5 Oct 2025 08:07:19 +0000 Subject: [PATCH 036/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3763a8f76c..a14f556fd5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Fixes being able to grab items through walls. - type: Fix - id: 8526 - time: '2025-05-18T14:38:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37570 - author: qwerltaz changes: - message: Water vapor is now dangerous to slime life-forms. @@ -3957,3 +3950,10 @@ id: 9033 time: '2025-10-04T20:27:15.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38545 +- author: NoreUhh + changes: + - message: The Ian suit makes you bark now. Woof! + type: Tweak + id: 9034 + time: '2025-10-05T08:06:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40694 From ebe74e5df2cedcd30239b4575febdf869c834659 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 5 Oct 2025 08:39:49 +0000 Subject: [PATCH 037/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a14f556fd5..d57040d3aa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: qwerltaz - changes: - - message: Water vapor is now dangerous to slime life-forms. - type: Add - id: 8527 - time: '2025-05-18T22:55:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32751 - author: slarticodefast changes: - message: Added a new keybind for swapping hands in the other direction (if you @@ -3957,3 +3950,11 @@ id: 9034 time: '2025-10-05T08:06:06.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40694 +- author: Princess-Cheeseballs + changes: + - message: Incendiary rounds now deal a mix of pierce damage and heat damage instead + of primarily heat damage. + type: Tweak + id: 9035 + time: '2025-10-05T08:38:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39204 From 1b86ba6b506e6db9758c05e966f0e0a1c0597a38 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 5 Oct 2025 22:13:43 +0000 Subject: [PATCH 038/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d57040d3aa..91de817d32 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Added a new keybind for swapping hands in the other direction (if you - got more than two). Defaults to Shift+X. Useful for cycling through borg modules. - type: Add - id: 8528 - time: '2025-05-19T01:17:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37588 - author: keronshb changes: - message: Force Wall timers changed so it despawns faster than it can be cast. @@ -3958,3 +3950,11 @@ id: 9035 time: '2025-10-05T08:38:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39204 +- author: Centronias + changes: + - message: Stirring is once again prioritized over drinking. No longer will your + bartender be very tempted to taste test your drink as they stir it. + type: Fix + id: 9036 + time: '2025-10-05T22:12:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40704 From 8781a95b6c2cb733d8007b56b1e2bc2493e9168c Mon Sep 17 00:00:00 2001 From: Jessica M Date: Mon, 6 Oct 2025 17:48:40 -0700 Subject: [PATCH 039/216] Skeletons are now playable instruments (#40009) * skeletons are now instruments * switch to xylophone * Fixes --------- Co-authored-by: Jessica M Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- .../Entities/Mobs/Species/skeleton.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index 229c2da027..5dc127878f 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -109,6 +109,24 @@ 32: sprite: Mobs/Species/Human/displacement.rsi state: jumpsuit-female + - type: Instrument + program: 13 # Xylophone. Woodblock is 115 (another good option) + - type: ActivatableUI + blockSpectators: true # otherwise they can play client-side music + inHandsOnly: false + singleUser: true + requiresComplex: true + verbOnly: true + verbText: verb-instrument-openui + key: enum.InstrumentUiKey.Key + - type: UserInterface + interfaces: + enum.InstrumentUiKey.Key: + type: InstrumentBoundUserInterface + enum.HumanoidMarkingModifierKey.Key: + type: HumanoidMarkingModifierBoundUserInterface + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface - type: entity parent: BaseSpeciesDummy From 1ca03fe8b1ffb513936e168479e64e1c645d7cc6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 01:00:31 +0000 Subject: [PATCH 040/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 91de817d32..afc2085f83 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: keronshb - changes: - - message: Force Wall timers changed so it despawns faster than it can be cast. - type: Tweak - - message: Force Wall users can now interact while inside of the wall, but also - can be attacked while inside of the wall. - type: Tweak - id: 8529 - time: '2025-05-19T01:30:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37525 - author: Samuka changes: - message: Holy water now evaporates. @@ -3958,3 +3948,10 @@ id: 9036 time: '2025-10-05T22:12:24.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40704 +- author: jessicamaybe + changes: + - message: Skeletons are now playable instruments! + type: Add + id: 9037 + time: '2025-10-07T00:59:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40009 From 561fd493bd81e93a9b8352b984f6983756a5dabf Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Mon, 6 Oct 2025 21:10:35 -0500 Subject: [PATCH 041/216] Marathon improvements Part 1. (#40725) * Marathon improvements Part 1. * Fixed power and added chairs to the phsych ward --- Resources/Maps/marathon.yml | 988 ++++++++++++++++++++++-------------- 1 file changed, 603 insertions(+), 385 deletions(-) diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml index 42df78c970..82a4d668c3 100644 --- a/Resources/Maps/marathon.yml +++ b/Resources/Maps/marathon.yml @@ -4,8 +4,8 @@ meta: engineVersion: 267.2.0 forkId: "" forkVersion: "" - time: 10/04/2025 14:51:31 - entityCount: 23828 + time: 10/07/2025 01:59:23 + entityCount: 23873 maps: - 5350 grids: @@ -213,11 +213,11 @@ entities: version: 7 -1,-2: ind: -1,-2 - tiles: HwAAAAACAH4AAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAAARAAAAAAAAXQAAAAAAABEAAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAQBdAAAAAAMAXQAAAAAAABEAAAAAAABdAAAAAAAAEQAAAAAAAF0AAAAAAgARAAAAAAAAXQAAAAADABEAAAAAAABdAAAAAAIAfgAAAAAAAF0AAAAAAABdAAAAAAMAXQAAAAADAF0AAAAAAgAfAAAAAAMAfgAAAAAAAF0AAAAAAQBdAAAAAAIAXQAAAAACAF0AAAAAAABdAAAAAAMAXQAAAAADAF0AAAAAAABdAAAAAAAAXQAAAAAAAF0AAAAAAQBdAAAAAAAAXQAAAAACAF0AAAAAAQBdAAAAAAEAHwAAAAACAH4AAAAAAABdAAAAAAEAEQAAAAAAAF0AAAAAAQARAAAAAAAAXQAAAAADABEAAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAAB+AAAAAAAAXQAAAAAAAF0AAAAAAQBdAAAAAAMAXQAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAADABEAAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAwARAAAAAAAAXQAAAAAAABEAAAAAAABdAAAAAAIAfgAAAAAAAF0AAAAAAQBdAAAAAAIAXQAAAAABAF0AAAAAAQBsAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAMAXQAAAAADAF0AAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAACAF0AAAAAAQBdAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAF0AAAAAAQBdAAAAAAAAXQAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAAAXQAAAAACAF0AAAAAAQB+AAAAAAAAcAAAAAACAHAAAAAAAgBwAAAAAAMAcAAAAAAAAH4AAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAABAF0AAAAAAgBdAAAAAAIAfgAAAAAAAHAAAAAAAQBwAAAAAAAAcAAAAAAAAHAAAAAAAQB+AAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAgBdAAAAAAMAXQAAAAAAAH4AAAAAAABwAAAAAAIAcAAAAAABAHAAAAAAAgBwAAAAAAEAfgAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAEAXQAAAAADAF0AAAAAAQBdAAAAAAEAcAAAAAABAHAAAAAAAwBwAAAAAAMAcAAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAAAXQAAAAACAHAAAAAAAgBwAAAAAAIAcAAAAAAAAHAAAAAAAgB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAwBdAAAAAAIAXQAAAAACAF0AAAAAAgB+AAAAAAAAfgAAAAAAAHAAAAAAAgB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHAAAAAAAABwAAAAAAMAcAAAAAACAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAA== + tiles: HwAAAAACAH4AAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAAARAAAAAAAAXQAAAAAAABEAAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAAB+AAAAAAAAfgAAAAAAAE0AAAAAAABdAAAAAAAAfgAAAAAAAB8AAAAAAQBdAAAAAAMAXQAAAAAAABEAAAAAAABdAAAAAAAAEQAAAAAAAF0AAAAAAgARAAAAAAAAXQAAAAADABEAAAAAAABdAAAAAAIAfgAAAAAAAF0AAAAAAABdAAAAAAMAXQAAAAADAF0AAAAAAgAfAAAAAAMAfgAAAAAAAF0AAAAAAQBdAAAAAAIAXQAAAAACAF0AAAAAAABdAAAAAAMAXQAAAAADAF0AAAAAAABdAAAAAAAAXQAAAAAAAF0AAAAAAQBdAAAAAAAAXQAAAAACAF0AAAAAAQBdAAAAAAEAHwAAAAACAH4AAAAAAABdAAAAAAEAEQAAAAAAAF0AAAAAAQARAAAAAAAAXQAAAAADABEAAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAAB+AAAAAAAAXQAAAAAAAF0AAAAAAQBdAAAAAAMAXQAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAADABEAAAAAAABdAAAAAAMAEQAAAAAAAF0AAAAAAwARAAAAAAAAXQAAAAAAABEAAAAAAABdAAAAAAIAfgAAAAAAAF0AAAAAAQBdAAAAAAIAXQAAAAABAF0AAAAAAQBsAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAMAXQAAAAADAF0AAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAACAF0AAAAAAQBdAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAF0AAAAAAQBdAAAAAAAAXQAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAAAXQAAAAACAF0AAAAAAQB+AAAAAAAAcAAAAAACAHAAAAAAAgBwAAAAAAMAcAAAAAAAAH4AAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAABAF0AAAAAAgBdAAAAAAIAfgAAAAAAAHAAAAAAAQBwAAAAAAAAcAAAAAAAAHAAAAAAAQB+AAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAgBdAAAAAAMAXQAAAAAAAH4AAAAAAABwAAAAAAIAcAAAAAABAHAAAAAAAgBwAAAAAAEAfgAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAEAXQAAAAADAF0AAAAAAQBdAAAAAAEAcAAAAAABAHAAAAAAAwBwAAAAAAMAcAAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAAAXQAAAAACAHAAAAAAAgBwAAAAAAIAcAAAAAAAAHAAAAAAAgB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAwBdAAAAAAIAXQAAAAACAF0AAAAAAgB+AAAAAAAAfgAAAAAAAHAAAAAAAgB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHAAAAAAAABwAAAAAAMAcAAAAAACAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAA== version: 7 -2,-2: ind: -2,-2 - tiles: fgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHoAAAAAAwB6AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHoAAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAIAHwAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAegAAAAAAAH4AAAAAAAB6AAAAAAAAegAAAAACAHoAAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAB8AAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwAfAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABsAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAGwAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAfgAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABtAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAcAAAAAABAHAAAAAAAQBwAAAAAAEAfgAAAAAAAB8AAAAAAAAfAAAAAAMAHwAAAAABAH4AAAAAAABwAAAAAAEAcAAAAAABAHAAAAAAAQB+AAAAAAAAfgAAAAAAAG0AAAAAAAB+AAAAAAAAfgAAAAAAAHAAAAAAAwBwAAAAAAIAcAAAAAAAAB8AAAAAAQAfAAAAAAAAHwAAAAACAB8AAAAAAQAfAAAAAAAAcAAAAAADAHAAAAAAAABwAAAAAAEADAAAAAABAHAAAAAAAwBwAAAAAAAAcAAAAAABAH4AAAAAAABwAAAAAAAAcAAAAAABAHAAAAAAAQB+AAAAAAAALgAAAAAAAC4AAAAAAAAuAAAAAAAAfgAAAAAAAHAAAAAAAABwAAAAAAEAcAAAAAABAAwAAAAAAQBwAAAAAAAAcAAAAAADAHAAAAAAAgB+AAAAAAAAcAAAAAACAHAAAAAAAgBwAAAAAAEAfgAAAAAAAC4AAAAAAAAuAAAAAAAALgAAAAAAAH4AAAAAAABwAAAAAAMAcAAAAAAAAHAAAAAAAgBwAAAAAAIAcAAAAAADAHAAAAAAAQBwAAAAAAEAfgAAAAAAAHAAAAAAAABwAAAAAAIAcAAAAAACAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAcAAAAAABAHAAAAAAAQBwAAAAAAAADAAAAAABAHAAAAAAAQBwAAAAAAAAcAAAAAADAH4AAAAAAABwAAAAAAMAcAAAAAABAHAAAAAAAAB+AAAAAAAALgAAAAAAAC4AAAAAAAAuAAAAAAAAfgAAAAAAAHAAAAAAAwBwAAAAAAMAcAAAAAADAAwAAAAAAABwAAAAAAIAcAAAAAABAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAgBwAAAAAAIAfgAAAAAAAC4AAAAAAAAuAAAAAAAALgAAAAAAAH4AAAAAAABwAAAAAAAAcAAAAAABAHAAAAAAAQB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHAAAAAAAwBwAAAAAAAAcAAAAAACAB8AAAAAAgAfAAAAAAMAHwAAAAAAAB8AAAAAAgAfAAAAAAIAcAAAAAACAHAAAAAAAwBwAAAAAAMAfgAAAAAAAHAAAAAAAgBwAAAAAAAAcAAAAAACAA== + tiles: fgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHoAAAAAAwB6AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHoAAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAIAHwAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAegAAAAAAAH4AAAAAAAB6AAAAAAAAegAAAAACAHoAAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAB8AAAAAAwB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwAfAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABsAAAAAAAAbAAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAGwAAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAfgAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAGwAAAAAAABsAAAAAAAAbAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAbQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAABtAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAcAAAAAABAHAAAAAAAQBwAAAAAAEAfgAAAAAAAB8AAAAAAAAfAAAAAAMAHwAAAAABAH4AAAAAAABwAAAAAAEAcAAAAAABAHAAAAAAAQB+AAAAAAAAfgAAAAAAAG0AAAAAAAB+AAAAAAAAfgAAAAAAAHAAAAAAAwBwAAAAAAIAcAAAAAAAAB8AAAAAAQAfAAAAAAAAHwAAAAACAB8AAAAAAQAfAAAAAAAAcAAAAAADAHAAAAAAAABwAAAAAAEADAAAAAABAHAAAAAAAwBwAAAAAAAAcAAAAAABAH4AAAAAAABwAAAAAAAAcAAAAAABAHAAAAAAAQB+AAAAAAAALgAAAAAAAC4AAAAAAAAuAAAAAAAAfgAAAAAAAHAAAAAAAABwAAAAAAEAcAAAAAABAAwAAAAAAQBwAAAAAAAAcAAAAAADAHAAAAAAAgB+AAAAAAAAcAAAAAACAHAAAAAAAgBwAAAAAAEAfgAAAAAAAC4AAAAAAAAuAAAAAAAALgAAAAAAAH4AAAAAAABwAAAAAAMAcAAAAAAAAHAAAAAAAgBwAAAAAAIAcAAAAAADAHAAAAAAAQBwAAAAAAEAfgAAAAAAAHAAAAAAAABwAAAAAAIAcAAAAAACAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAcAAAAAABAHAAAAAAAQBwAAAAAAAADAAAAAABAHAAAAAAAQBwAAAAAAAAcAAAAAADAH4AAAAAAABwAAAAAAMAcAAAAAABAHAAAAAAAAB+AAAAAAAALgAAAAAAAC4AAAAAAAAuAAAAAAAAfgAAAAAAAHAAAAAAAwBwAAAAAAMAcAAAAAADAAwAAAAAAABwAAAAAAIAcAAAAAABAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAgBwAAAAAAIAfgAAAAAAAC4AAAAAAAAuAAAAAAAALgAAAAAAAH4AAAAAAABwAAAAAAAAcAAAAAABAHAAAAAAAQB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAHAAAAAAAwBwAAAAAAAAcAAAAAACAB8AAAAAAgAfAAAAAAMAHwAAAAAAAB8AAAAAAgAfAAAAAAIAcAAAAAACAHAAAAAAAwBwAAAAAAMAfgAAAAAAAHAAAAAAAgBwAAAAAAAAcAAAAAACAA== version: 7 -3,-2: ind: -3,-2 @@ -245,7 +245,7 @@ entities: version: 7 -1,-3: ind: -1,-3 - tiles: XQAAAAABAH4AAAAAAABdAAAAAAIAXQAAAAAAAF0AAAAAAQBdAAAAAAAAXQAAAAADAF0AAAAAAABdAAAAAAAAfgAAAAAAAGwAAAAAAABsAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwB+AAAAAAAAfgAAAAAAAF0AAAAAAABdAAAAAAEAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAIAHwAAAAABAB8AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAgBdAAAAAAIAXQAAAAADAB8AAAAAAwB+AAAAAAAAHwAAAAABAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwB+AAAAAAAAXQAAAAADAF0AAAAAAABdAAAAAAMAHwAAAAABAH4AAAAAAABdAAAAAAAAXQAAAAADAF0AAAAAAQBdAAAAAAIAHwAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAgBdAAAAAAAAXQAAAAAAAF0AAAAAAABdAAAAAAIAXQAAAAABAF0AAAAAAwBdAAAAAAIAXQAAAAADAH4AAAAAAAAfAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAH4AAAAAAABdAAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAMAXQAAAAAAAF0AAAAAAABdAAAAAAAAXQAAAAAAAF0AAAAAAgB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAAAXQAAAAABAF0AAAAAAgBdAAAAAAIAHwAAAAAAAB8AAAAAAgAfAAAAAAIAHwAAAAACAB8AAAAAAgAfAAAAAAEAHwAAAAACAB8AAAAAAQAfAAAAAAAAHwAAAAABAF0AAAAAAABdAAAAAAMAXQAAAAAAAF0AAAAAAABdAAAAAAMAXQAAAAACAF0AAAAAAwBdAAAAAAEAXQAAAAABAF0AAAAAAQBdAAAAAAEAXQAAAAADAF0AAAAAAQBdAAAAAAAAXQAAAAACAF0AAAAAAQB+AAAAAAAAfgAAAAAAAF0AAAAAAgBdAAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAEAXQAAAAABAF0AAAAAAABdAAAAAAMAXQAAAAACAF0AAAAAAABdAAAAAAEAXQAAAAAAAF0AAAAAAgBdAAAAAAEAfgAAAAAAAH4AAAAAAABdAAAAAAEAXQAAAAADAF0AAAAAAgAfAAAAAAIAHwAAAAADAB8AAAAAAQBdAAAAAAIAHwAAAAACAB8AAAAAAQAfAAAAAAIAXQAAAAABAF0AAAAAAQBdAAAAAAIAfgAAAAAAAE8AAAAAAAB+AAAAAAAAHwAAAAAAAF0AAAAAAwAfAAAAAAEAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAQBdAAAAAAAAHwAAAAADAH4AAAAAAABPAAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAEAfgAAAAAAAH4AAAAAAAAfAAAAAAMAHwAAAAABAB8AAAAAAQAfAAAAAAAAHwAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAACAH4AAAAAAAB+AAAAAAAATwAAAAAAAH4AAAAAAAAfAAAAAAAAXQAAAAAAAB8AAAAAAQB+AAAAAAAAHwAAAAABAB8AAAAAAwAfAAAAAAEAHwAAAAADAB8AAAAAAAB+AAAAAAAAXQAAAAAAAF0AAAAAAQBdAAAAAAEAfgAAAAAAAE8AAAAAAAB+AAAAAAAAXQAAAAADAF0AAAAAAAAfAAAAAAIAfgAAAAAAAB8AAAAAAQAfAAAAAAIAHwAAAAADAB8AAAAAAAAfAAAAAAMAfgAAAAAAAF0AAAAAAgBdAAAAAAMAXQAAAAADAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAgAfAAAAAAAAHwAAAAADAH4AAAAAAAAfAAAAAAAAHwAAAAACAB8AAAAAAQAfAAAAAAEAHwAAAAACAH4AAAAAAABdAAAAAAIAXQAAAAACAF0AAAAAAwBdAAAAAAMAHwAAAAACAH4AAAAAAABdAAAAAAIAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAACAF0AAAAAAgBdAAAAAAAAfgAAAAAAAA== + tiles: XQAAAAABAH4AAAAAAABdAAAAAAIAXQAAAAAAAF0AAAAAAQBdAAAAAAAAXQAAAAADAF0AAAAAAABdAAAAAAAAfgAAAAAAAGwAAAAAAABsAAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwB+AAAAAAAAfgAAAAAAAF0AAAAAAABdAAAAAAEAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAAfAAAAAAIAHwAAAAABAB8AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAgBdAAAAAAIAXQAAAAADAB8AAAAAAwB+AAAAAAAAHwAAAAABAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAwB+AAAAAAAAXQAAAAADAF0AAAAAAABdAAAAAAMAHwAAAAABAH4AAAAAAABdAAAAAAAAXQAAAAADAF0AAAAAAQBdAAAAAAIAHwAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAgBdAAAAAAAAXQAAAAAAAF0AAAAAAABdAAAAAAIAXQAAAAABAF0AAAAAAwBdAAAAAAIAXQAAAAADAH4AAAAAAAAfAAAAAAMAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAH4AAAAAAABdAAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAMAXQAAAAAAAF0AAAAAAABdAAAAAAAAXQAAAAAAAF0AAAAAAgB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAAAXQAAAAABAF0AAAAAAgBdAAAAAAIAHwAAAAAAAB8AAAAAAgAfAAAAAAIAHwAAAAACAB8AAAAAAgAfAAAAAAEAHwAAAAACAB8AAAAAAQAfAAAAAAAAHwAAAAABAF0AAAAAAABdAAAAAAMAXQAAAAAAAF0AAAAAAABdAAAAAAMAXQAAAAACAF0AAAAAAwBdAAAAAAEAXQAAAAABAF0AAAAAAQBdAAAAAAEAXQAAAAADAF0AAAAAAQBdAAAAAAAAXQAAAAACAF0AAAAAAQB+AAAAAAAAfgAAAAAAAF0AAAAAAgBdAAAAAAAAXQAAAAABAF0AAAAAAQBdAAAAAAEAXQAAAAABAF0AAAAAAABdAAAAAAMAXQAAAAACAF0AAAAAAABdAAAAAAEAXQAAAAAAAF0AAAAAAgBdAAAAAAEAfgAAAAAAAH4AAAAAAABdAAAAAAEAXQAAAAADAF0AAAAAAgAfAAAAAAIAHwAAAAADAB8AAAAAAQBdAAAAAAIAHwAAAAACAB8AAAAAAQAfAAAAAAIAXQAAAAABAF0AAAAAAQBdAAAAAAIAfgAAAAAAAE8AAAAAAAB+AAAAAAAAHwAAAAAAAF0AAAAAAwAfAAAAAAEAfgAAAAAAAH4AAAAAAAB+AAAAAAAAHwAAAAACAH4AAAAAAAB+AAAAAAAAfgAAAAAAAB8AAAAAAQBdAAAAAAAAHwAAAAADAH4AAAAAAABPAAAAAAAAfgAAAAAAAH4AAAAAAABdAAAAAAEAfgAAAAAAAH4AAAAAAAAfAAAAAAMAHwAAAAABAB8AAAAAAQAfAAAAAAAAHwAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAAAAH4AAAAAAAB+AAAAAAAATwAAAAAAAH4AAAAAAAAfAAAAAAAAXQAAAAAAAB8AAAAAAQB+AAAAAAAAHwAAAAABAB8AAAAAAwAfAAAAAAEAHwAAAAADAB8AAAAAAAB+AAAAAAAAXQAAAAAAAF0AAAAAAABdAAAAAAAAfgAAAAAAAE8AAAAAAAB+AAAAAAAAXQAAAAADAF0AAAAAAAAfAAAAAAIAfgAAAAAAAB8AAAAAAQAfAAAAAAIAHwAAAAADAB8AAAAAAAAfAAAAAAMAfgAAAAAAAF0AAAAAAABdAAAAAAAAXQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAF0AAAAAAgAfAAAAAAAAHwAAAAADAH4AAAAAAAAfAAAAAAAAHwAAAAACAB8AAAAAAQAfAAAAAAEAHwAAAAACAH4AAAAAAABdAAAAAAAAXQAAAAAAAF0AAAAAAABdAAAAAAMAHwAAAAACAH4AAAAAAABdAAAAAAIAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAAAAH4AAAAAAAB+AAAAAAAAXQAAAAAAAF0AAAAAAABdAAAAAAAAfgAAAAAAAA== version: 7 -2,-3: ind: -2,-3 @@ -321,7 +321,7 @@ entities: version: 7 -5,3: ind: -5,3 - tiles: AAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfQAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAfQAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB9AAAAAAAAfgAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAAAfQAAAAAAAH4AAAAAAAAAAAAAAAAAfgAAAAAAAH0AAAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAfQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAA== version: 7 -6,2: ind: -6,2 @@ -1105,11 +1105,6 @@ entities: 2601: -13,-19 2629: -29,-16 2674: -12,-9 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerNe - decals: - 2048: -2,-33 - node: color: '#EFB34196' id: BrickTileWhiteCornerNe @@ -1142,11 +1137,6 @@ entities: 2630: -31,-16 2673: -16,-9 3119: -23,-15 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerNw - decals: - 2049: -4,-33 - node: color: '#EFB34196' id: BrickTileWhiteCornerNw @@ -1177,11 +1167,6 @@ entities: 2599: -13,-23 2638: -29,-24 2676: -12,-13 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerSe - decals: - 2050: -2,-36 - node: color: '#EFB34196' id: BrickTileWhiteCornerSe @@ -1212,11 +1197,6 @@ entities: 2600: -19,-23 2637: -31,-24 2675: -16,-13 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteCornerSw - decals: - 2051: -4,-36 - node: color: '#EFB34196' id: BrickTileWhiteCornerSw @@ -1399,12 +1379,6 @@ entities: decals: 2339: 12,21 2340: 12,22 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineE - decals: - 2054: -2,-35 - 2055: -2,-34 - node: color: '#EFB34196' id: BrickTileWhiteLineE @@ -1413,8 +1387,6 @@ entities: 1633: 7,-28 1634: 7,-27 1635: 7,-26 - 2058: -4,-35 - 2059: -4,-34 2441: -40,18 2912: -26,-40 2918: -26,-44 @@ -1464,16 +1436,10 @@ entities: id: BrickTileWhiteLineN decals: 2337: 13,20 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineN - decals: - 2056: -3,-33 - node: color: '#EFB34196' id: BrickTileWhiteLineN decals: - 2062: -3,-34 2228: 8,-24 2230: 7,-24 2233: 10,-23 @@ -1535,16 +1501,10 @@ entities: id: BrickTileWhiteLineS decals: 2338: 13,23 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineS - decals: - 2057: -3,-36 - node: color: '#EFB34196' id: BrickTileWhiteLineS decals: - 2063: -3,-35 2229: 8,-25 2438: -43,17 2440: -42,17 @@ -1611,12 +1571,6 @@ entities: decals: 2342: 14,21 2343: 14,22 - - node: - color: '#DE3A3A96' - id: BrickTileWhiteLineW - decals: - 2052: -4,-35 - 2053: -4,-34 - node: color: '#EFB34196' id: BrickTileWhiteLineW @@ -1627,8 +1581,6 @@ entities: 1639: 5,-26 1640: 5,-25 1643: 9,-26 - 2060: -2,-35 - 2061: -2,-34 2971: 3,-41 - node: color: '#FFFFFFFF' @@ -2477,8 +2429,6 @@ entities: 481: -38,10 636: -1,-34 1003: -19,0 - 2046: -3,-37 - 2047: -3,-32 - node: color: '#EFB34196' id: FullTileOverlayGreyscale @@ -3998,8 +3948,6 @@ entities: 602: -4,-28 603: -4,-29 604: -4,-30 - 605: -4,-31 - 617: -3,-31 618: -2,-31 619: -1,-31 620: 0,-31 @@ -7646,6 +7594,17 @@ entities: - type: Transform pos: -0.39634466,12.638008 parent: 30 +- proto: ActionToggleInternals + entities: + - uid: 9163 + mapInit: true + paused: true + components: + - type: Transform + parent: 23311 + - type: Action + originalIconColor: '#FFFFFFFF' + container: 23311 - proto: AirAlarm entities: - uid: 682 @@ -7926,6 +7885,9 @@ entities: rot: 3.141592653589793 rad pos: 8.5,-35.5 parent: 30 + - type: AccessReader + accessListsOriginal: + - - Atmospherics - type: DeviceList devices: - 14529 @@ -9671,7 +9633,6 @@ entities: - type: DeviceList devices: - 22831 - - 22830 - 11282 - type: Fixtures fixtures: {} @@ -9980,6 +9941,8 @@ entities: rot: -1.5707963267948966 rad pos: 11.5,-30.5 parent: 30 + - type: AccessReader + accessListsOriginal: [] - uid: 10017 components: - type: Transform @@ -9998,6 +9961,8 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,-30.5 parent: 30 + - type: AccessReader + accessListsOriginal: [] - proto: AirlockAtmosphericsLocked entities: - uid: 8604 @@ -10337,6 +10302,11 @@ entities: - type: Transform pos: -11.5,-46.5 parent: 30 + - uid: 8245 + components: + - type: Transform + pos: -2.5,-36.5 + parent: 30 - uid: 9463 components: - type: MetaData @@ -10404,6 +10374,11 @@ entities: - type: Transform pos: -37.5,25.5 parent: 30 + - uid: 1720 + components: + - type: Transform + pos: -0.5,-33.5 + parent: 30 - uid: 3198 components: - type: Transform @@ -11182,6 +11157,11 @@ entities: - type: Transform pos: -36.5,29.5 parent: 30 + - uid: 1567 + components: + - type: Transform + pos: -32.5,-6.5 + parent: 30 - uid: 1603 components: - type: Transform @@ -11803,7 +11783,7 @@ entities: pos: 34.5,45.5 parent: 30 - type: Door - secondsUntilStateChange: -25686.977 + secondsUntilStateChange: -47726.9 state: Opening - type: DeviceLinkSource lastSignals: @@ -12027,11 +12007,6 @@ entities: - type: Transform pos: -13.5,-17.5 parent: 30 - - uid: 8071 - components: - - type: Transform - pos: -32.5,-6.5 - parent: 30 - proto: AirlockMedicalLocked entities: - uid: 6780 @@ -12270,21 +12245,6 @@ entities: - type: Transform pos: -18.5,-3.5 parent: 30 - - uid: 9163 - components: - - type: Transform - pos: -0.5,-33.5 - parent: 30 - - uid: 9283 - components: - - type: Transform - pos: -2.5,-31.5 - parent: 30 - - uid: 9287 - components: - - type: Transform - pos: -2.5,-36.5 - parent: 30 - uid: 10190 components: - type: Transform @@ -13480,6 +13440,14 @@ entities: parent: 30 - type: Fixtures fixtures: {} + - uid: 9911 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,41.5 + parent: 30 + - type: Fixtures + fixtures: {} - uid: 9934 components: - type: Transform @@ -13694,6 +13662,14 @@ entities: parent: 30 - type: Fixtures fixtures: {} + - uid: 23866 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,47.5 + parent: 30 + - type: Fixtures + fixtures: {} - proto: APCElectronics entities: - uid: 15969 @@ -17330,16 +17306,16 @@ entities: - type: Transform pos: 17.5,-11.5 parent: 30 + - uid: 11252 + components: + - type: Transform + pos: 28.5,13.5 + parent: 30 - uid: 11628 components: - type: Transform pos: 23.5,0.5 parent: 30 - - uid: 12777 - components: - - type: Transform - pos: 25.5,13.5 - parent: 30 - uid: 15246 components: - type: Transform @@ -17493,10 +17469,11 @@ entities: parent: 30 - proto: BedsheetRD entities: - - uid: 12731 + - uid: 23833 components: - type: Transform - pos: 25.5,13.5 + rot: -1.5707963267948966 rad + pos: 28.5,13.5 parent: 30 - proto: BedsheetSpawner entities: @@ -18237,11 +18214,6 @@ entities: - type: Transform pos: -7.4440956,34.21304 parent: 30 - - uid: 11253 - components: - - type: Transform - pos: -3.4874916,-33.356754 - parent: 30 - uid: 11795 components: - type: Transform @@ -30568,12 +30540,12 @@ entities: - uid: 16832 components: - type: Transform - pos: -52.5,45.5 + pos: -53.5,45.5 parent: 30 - uid: 16833 components: - type: Transform - pos: -52.5,44.5 + pos: -53.5,44.5 parent: 30 - uid: 16834 components: @@ -34845,6 +34817,46 @@ entities: - type: Transform pos: -10.5,-66.5 parent: 30 + - uid: 23849 + components: + - type: Transform + pos: -30.5,41.5 + parent: 30 + - uid: 23862 + components: + - type: Transform + pos: -48.5,48.5 + parent: 30 + - uid: 23863 + components: + - type: Transform + pos: -49.5,48.5 + parent: 30 + - uid: 23864 + components: + - type: Transform + pos: -50.5,48.5 + parent: 30 + - uid: 23865 + components: + - type: Transform + pos: -51.5,48.5 + parent: 30 + - uid: 23867 + components: + - type: Transform + pos: -53.5,46.5 + parent: 30 + - uid: 23869 + components: + - type: Transform + pos: -52.5,47.5 + parent: 30 + - uid: 23870 + components: + - type: Transform + pos: -53.5,47.5 + parent: 30 - proto: CableApcStack entities: - uid: 1637 @@ -43683,6 +43695,16 @@ entities: - type: Transform pos: -35.5,-2.5 parent: 30 + - uid: 7870 + components: + - type: Transform + pos: -31.5,44.5 + parent: 30 + - uid: 7881 + components: + - type: Transform + pos: -31.5,43.5 + parent: 30 - uid: 7917 components: - type: Transform @@ -44168,6 +44190,11 @@ entities: - type: Transform pos: -0.5,-39.5 parent: 30 + - uid: 11253 + components: + - type: Transform + pos: -30.5,43.5 + parent: 30 - uid: 11257 components: - type: Transform @@ -47088,6 +47115,21 @@ entities: - type: Transform pos: -24.5,-38.5 parent: 30 + - uid: 23847 + components: + - type: Transform + pos: -30.5,42.5 + parent: 30 + - uid: 23848 + components: + - type: Transform + pos: -30.5,41.5 + parent: 30 + - uid: 23868 + components: + - type: Transform + pos: -52.5,47.5 + parent: 30 - proto: CableMVStack entities: - uid: 1638 @@ -53130,6 +53172,28 @@ entities: rot: -1.5707963267948966 rad pos: 15.5,18.5 parent: 30 + - uid: 23858 + components: + - type: Transform + pos: -31.5,-5.5 + parent: 30 + - uid: 23859 + components: + - type: Transform + pos: -30.5,-5.5 + parent: 30 + - uid: 23860 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -31.5,-7.5 + parent: 30 + - uid: 23861 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-7.5 + parent: 30 - proto: ChairGreyscale entities: - uid: 904 @@ -53368,12 +53432,6 @@ entities: - type: Transform pos: 13.5,22.5 parent: 30 - - uid: 8245 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,-34.5 - parent: 30 - uid: 9060 components: - type: Transform @@ -53391,6 +53449,12 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,-27.5 parent: 30 + - uid: 9287 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.4336228,-32.41538 + parent: 30 - uid: 9407 components: - type: Transform @@ -54075,6 +54139,13 @@ entities: - type: Transform pos: -5.5,-7.5 parent: 30 +- proto: ChemistryBottleMannitol + entities: + - uid: 23852 + components: + - type: Transform + pos: -21.209566,-52.691216 + parent: 30 - proto: ChemistryHotplate entities: - uid: 9180 @@ -55016,19 +55087,6 @@ entities: - type: Transform pos: -15.5,-46.5 parent: 30 - - uid: 11246 - components: - - type: Transform - pos: -1.5,-35.5 - parent: 30 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1496 - moles: - Oxygen: 3.4430928 - Nitrogen: 12.952587 - uid: 13346 components: - type: Transform @@ -55187,11 +55245,6 @@ entities: parent: 30 - proto: ClothingEyesGlasses entities: - - uid: 7149 - components: - - type: Transform - pos: -42.51494,-20.530993 - parent: 30 - uid: 8827 components: - type: Transform @@ -55212,39 +55265,13 @@ entities: - type: Transform pos: -23.555922,-31.355957 parent: 30 -- proto: ClothingEyesGlassesGar - entities: - - uid: 7039 - components: - - type: Transform - pos: -41.593063,-21.421618 - parent: 30 - proto: ClothingEyesGlassesGarGiga entities: - - uid: 6805 - components: - - type: Transform - pos: -42.51494,-19.421618 - parent: 30 - uid: 15114 components: - type: Transform pos: 36.506203,30.427496 parent: 30 -- proto: ClothingEyesGlassesGarOrange - entities: - - uid: 7870 - components: - - type: Transform - pos: -40.60869,-21.421618 - parent: 30 -- proto: ClothingEyesGlassesJensen - entities: - - uid: 6989 - components: - - type: Transform - pos: -42.530563,-21.468493 - parent: 30 - proto: ClothingEyesGlassesMeson entities: - uid: 9370 @@ -55257,6 +55284,11 @@ entities: - type: Transform pos: 5.538602,-23.326946 parent: 30 + - uid: 11245 + components: + - type: Transform + pos: -3.4961228,-33.868504 + parent: 30 - uid: 22447 components: - type: Transform @@ -55355,11 +55387,33 @@ entities: - type: Transform pos: -29.37888,29.583 parent: 30 + - uid: 8024 + components: + - type: Transform + pos: -3.4648728,-33.493504 + parent: 30 + - uid: 11426 + components: + - type: Transform + pos: -3.4492478,-33.35288 + parent: 30 - uid: 19401 components: - type: Transform pos: -24.731133,-50.435394 parent: 30 +- proto: ClothingHandsGlovesCombat + entities: + - uid: 9158 + components: + - type: Transform + pos: -8.883268,-35.423473 + parent: 30 + - uid: 9165 + components: + - type: Transform + pos: 9.388684,-26.52471 + parent: 30 - proto: ClothingHandsGlovesFingerless entities: - uid: 15281 @@ -55583,13 +55637,6 @@ entities: - type: Transform pos: -25.477394,-32.340332 parent: 30 -- proto: ClothingHeadHatVioletwizard - entities: - - uid: 19694 - components: - - type: Transform - pos: -21.586058,-27.491894 - parent: 30 - proto: ClothingHeadHatWelding entities: - uid: 1632 @@ -55602,6 +55649,11 @@ entities: - type: Transform pos: -15.49031,-24.471869 parent: 30 + - uid: 11246 + components: + - type: Transform + pos: -3.5195498,-35.314 + parent: 30 - uid: 21731 components: - type: Transform @@ -55765,13 +55817,6 @@ entities: - type: Transform pos: 9.401276,-13.386019 parent: 30 -- proto: ClothingNeckScarfStripedRed - entities: - - uid: 11425 - components: - - type: Transform - pos: -1.4874127,-32.38826 - parent: 30 - proto: ClothingNeckScarfStripedZebra entities: - uid: 664 @@ -56004,20 +56049,6 @@ entities: - type: Transform pos: -9.241632,-47.33087 parent: 30 -- proto: ClothingOuterWinterSec - entities: - - uid: 11426 - components: - - type: Transform - pos: -1.5342877,-32.48201 - parent: 30 -- proto: ClothingOuterWizardViolet - entities: - - uid: 19693 - components: - - type: Transform - pos: -21.523558,-28.023144 - parent: 30 - proto: ClothingShoesBootsJack entities: - uid: 15998 @@ -56083,11 +56114,6 @@ entities: parent: 30 - proto: ClothingShoesWizard entities: - - uid: 19695 - components: - - type: Transform - pos: -21.507933,-28.679394 - parent: 30 - uid: 21672 components: - type: Transform @@ -56120,6 +56146,11 @@ entities: - type: Transform pos: 24.447042,42.46136 parent: 30 + - uid: 23850 + components: + - type: Transform + pos: -21.761425,-52.779373 + parent: 30 - proto: ClothingUniformColorRainbow entities: - uid: 19764 @@ -56920,6 +56951,12 @@ entities: rot: 3.141592653589793 rad pos: -8.5,-45.5 parent: 30 + - uid: 11425 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-32.5 + parent: 30 - uid: 20886 components: - type: Transform @@ -57104,12 +57141,6 @@ entities: rot: -1.5707963267948966 rad pos: -16.5,-1.5 parent: 30 - - uid: 9166 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,-34.5 - parent: 30 - proto: ComputerTechnologyDiskTerminal entities: - uid: 17885 @@ -64670,6 +64701,11 @@ entities: - type: Transform pos: -34.5,-19.5 parent: 30 + - uid: 11254 + components: + - type: Transform + pos: -5.5,-12.5 + parent: 30 - uid: 19437 components: - type: Transform @@ -65026,10 +65062,10 @@ entities: tags: [] - proto: DrinkTeacup entities: - - uid: 9911 + - uid: 8071 components: - type: Transform - pos: -9.146156,-20.479715 + pos: -9.167248,-20.54054 parent: 30 - uid: 10006 components: @@ -67116,6 +67152,21 @@ entities: parent: 30 - proto: Firelock entities: + - uid: 1721 + components: + - type: Transform + pos: -47.5,38.5 + parent: 30 + - uid: 9156 + components: + - type: Transform + pos: -48.5,45.5 + parent: 30 + - uid: 11247 + components: + - type: Transform + pos: -46.5,45.5 + parent: 30 - uid: 22863 components: - type: Transform @@ -67733,6 +67784,12 @@ entities: - type: DeviceNetwork deviceLists: - 21888 + - uid: 3702 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-31.5 + parent: 30 - uid: 4241 components: - type: Transform @@ -68288,8 +68345,11 @@ entities: - uid: 11282 components: - type: Transform + anchored: False pos: -2.5,-36.5 parent: 30 + - type: Physics + bodyType: Dynamic - type: DeviceNetwork deviceLists: - 22839 @@ -68757,6 +68817,12 @@ entities: - type: DeviceNetwork deviceLists: - 682 + - uid: 23845 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,-31.5 + parent: 30 - proto: Fireplace entities: - uid: 4984 @@ -94617,6 +94683,14 @@ entities: - 2333 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 4951 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-34.5 + parent: 30 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 5029 components: - type: Transform @@ -95773,17 +95847,6 @@ entities: - 22840 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 22830 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-34.5 - parent: 30 - - type: DeviceNetwork - deviceLists: - - 22839 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 22842 components: - type: Transform @@ -97707,6 +97770,11 @@ entities: - type: Transform pos: -12.5,-13.5 parent: 30 + - uid: 7149 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 30 - uid: 7215 components: - type: Transform @@ -98262,16 +98330,6 @@ entities: - type: Transform pos: -53.5,35.5 parent: 30 - - uid: 9165 - components: - - type: Transform - pos: -3.5,-31.5 - parent: 30 - - uid: 9167 - components: - - type: Transform - pos: -1.5,-31.5 - parent: 30 - uid: 9185 components: - type: Transform @@ -102842,6 +102900,60 @@ entities: - type: Transform pos: -36.5,62.5 parent: 30 + - uid: 23834 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -74.5,63.5 + parent: 30 + - uid: 23835 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -73.5,63.5 + parent: 30 + - uid: 23836 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -72.5,63.5 + parent: 30 + - uid: 23837 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -71.5,63.5 + parent: 30 + - uid: 23839 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -69.5,63.5 + parent: 30 + - uid: 23840 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -68.5,63.5 + parent: 30 + - uid: 23841 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -67.5,63.5 + parent: 30 + - uid: 23842 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -66.5,63.5 + parent: 30 + - uid: 23843 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -65.5,63.5 + parent: 30 - proto: GrilleBroken entities: - uid: 695 @@ -103348,6 +103460,12 @@ entities: rot: 3.141592653589793 rad pos: -60.5,-71.5 parent: 30 + - uid: 23838 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -70.5,63.5 + parent: 30 - proto: GrilleSpawner entities: - uid: 10007 @@ -104474,11 +104592,6 @@ entities: gridUid: 30 - proto: InflatableWallStack entities: - - uid: 9248 - components: - - type: Transform - pos: 9.443903,-26.334238 - parent: 30 - uid: 21276 components: - type: Transform @@ -104640,6 +104753,14 @@ entities: parent: 30 - type: Fixtures fixtures: {} + - uid: 20454 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-31.5 + parent: 30 + - type: Fixtures + fixtures: {} - proto: IntercomMedical entities: - uid: 7346 @@ -106461,6 +106582,13 @@ entities: - type: Transform pos: -57.51036,-43.24328 parent: 30 +- proto: LargeBeaker + entities: + - uid: 23853 + components: + - type: Transform + pos: -22.407312,13.26424 + parent: 30 - proto: LauncherCreamPie entities: - uid: 16145 @@ -107284,19 +107412,6 @@ entities: moles: Oxygen: 3.4430928 Nitrogen: 12.952587 - - uid: 11245 - components: - - type: Transform - pos: -1.5,-34.5 - parent: 30 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1496 - moles: - Oxygen: 3.4430928 - Nitrogen: 12.952587 - proto: LockerSecurityFilled entities: - uid: 1072 @@ -107724,6 +107839,16 @@ entities: parent: 30 - proto: Matchbox entities: + - uid: 6766 + components: + - type: Transform + pos: -42.446564,-20.600746 + parent: 30 + - uid: 6768 + components: + - type: Transform + pos: -42.634064,-20.350746 + parent: 30 - uid: 17496 components: - type: Transform @@ -108297,8 +108422,16 @@ entities: - uid: 23311 components: - type: Transform - pos: 4.278227,-46.40056 + pos: 4.3357787,-46.395798 parent: 30 + - type: GasTank + toggleActionEntity: 9163 + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 9163 - proto: NitrousOxideCanister entities: - uid: 7289 @@ -108504,11 +108637,6 @@ entities: - type: Transform pos: -9.625428,-38.389084 parent: 30 - - uid: 9061 - components: - - type: Transform - pos: 4.148211,-46.341225 - parent: 30 - uid: 9659 components: - type: Transform @@ -109024,16 +109152,6 @@ entities: parent: 30 - proto: PartRodMetal1 entities: - - uid: 7881 - components: - - type: Transform - pos: -41.20244,-21.437243 - parent: 30 - - uid: 8024 - components: - - type: Transform - pos: -41.20244,-21.437243 - parent: 30 - uid: 19677 components: - type: Transform @@ -109129,11 +109247,6 @@ entities: - type: Transform pos: -31.123026,-0.3196025 parent: 30 - - uid: 11254 - components: - - type: Transform - pos: -3.3156166,-32.950504 - parent: 30 - uid: 11632 components: - type: Transform @@ -109422,6 +109535,24 @@ entities: parent: 30 - type: DeltaPressure gridUid: 30 +- proto: PlasmaWindowDirectional + entities: + - uid: 7039 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,40.5 + parent: 30 + - type: DeltaPressure + gridUid: 30 + - uid: 19695 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,41.5 + parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: PlasticFlapsAirtightClear entities: - uid: 11228 @@ -109493,6 +109624,13 @@ entities: - type: Transform pos: -84.53038,-45.378 parent: 30 +- proto: PlushieHampter + entities: + - uid: 23854 + components: + - type: Transform + pos: 16.566488,-14.522018 + parent: 30 - proto: PlushieLizard entities: - uid: 15217 @@ -109545,6 +109683,13 @@ entities: - type: Transform pos: 40.559143,-53.538166 parent: 30 +- proto: PlushieVox + entities: + - uid: 23851 + components: + - type: Transform + pos: -21.51841,-52.3398 + parent: 30 - proto: PortableFlasher entities: - uid: 2719 @@ -109574,11 +109719,6 @@ entities: - type: Transform pos: 23.5,4.5 parent: 30 - - uid: 19442 - components: - - type: Transform - pos: -23.5,-28.5 - parent: 30 - uid: 19476 components: - type: Transform @@ -109604,6 +109744,11 @@ entities: - type: Transform pos: -59.5,36.5 parent: 30 + - uid: 19694 + components: + - type: Transform + pos: -21.5,-28.5 + parent: 30 - proto: PortableGeneratorPacman entities: - uid: 10534 @@ -110347,13 +110492,6 @@ entities: - type: Transform pos: -17.5,36.5 parent: 30 -- proto: PottedPlant2 - entities: - - uid: 8371 - components: - - type: Transform - pos: 3.5092015,-30.805378 - parent: 30 - proto: PottedPlant21 entities: - uid: 1566 @@ -110571,14 +110709,6 @@ entities: - type: ContainerContainer containers: stash: !type:ContainerSlot {} - - uid: 1722 - components: - - type: Transform - pos: -30.5,42.5 - parent: 30 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - uid: 2124 components: - type: Transform @@ -110645,14 +110775,6 @@ entities: - type: ContainerContainer containers: stash: !type:ContainerSlot {} - - uid: 9162 - components: - - type: Transform - pos: -1.5,-30.5 - parent: 30 - - type: ContainerContainer - containers: - stash: !type:ContainerSlot {} - uid: 11068 components: - type: Transform @@ -110884,6 +111006,11 @@ entities: parent: 30 - type: Physics canCollide: False + - uid: 1722 + components: + - type: Transform + pos: -1.5,-31.5 + parent: 30 - uid: 2004 components: - type: Transform @@ -111050,6 +111177,22 @@ entities: rot: 3.141592653589793 rad pos: 42.5,43.5 parent: 30 + - uid: 23871 + components: + - type: Transform + pos: -51.5,45.5 + parent: 30 + - uid: 23872 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -57.5,46.5 + parent: 30 + - uid: 23873 + components: + - type: Transform + pos: -56.5,41.5 + parent: 30 - proto: Poweredlight entities: - uid: 98 @@ -114822,11 +114965,6 @@ entities: - type: Transform pos: -9.5,-41.5 parent: 30 - - uid: 11255 - components: - - type: Transform - pos: -3.5,-35.5 - parent: 30 - uid: 11421 components: - type: Transform @@ -116085,11 +116223,6 @@ entities: - type: Transform pos: 7.5,29.5 parent: 30 - - uid: 3702 - components: - - type: Transform - pos: -3.5,-30.5 - parent: 30 - uid: 3704 components: - type: Transform @@ -118788,20 +118921,6 @@ entities: parent: 30 - type: DeltaPressure gridUid: 30 - - uid: 9156 - components: - - type: Transform - pos: -1.5,-31.5 - parent: 30 - - type: DeltaPressure - gridUid: 30 - - uid: 9158 - components: - - type: Transform - pos: -3.5,-31.5 - parent: 30 - - type: DeltaPressure - gridUid: 30 - uid: 9234 components: - type: Transform @@ -119222,6 +119341,13 @@ entities: parent: 30 - type: DeltaPressure gridUid: 30 + - uid: 11256 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11270 components: - type: Transform @@ -121653,11 +121779,6 @@ entities: - type: Transform pos: -4.5072117,-10.071463 parent: 30 - - uid: 7217 - components: - - type: Transform - pos: -42.32744,-20.937243 - parent: 30 - uid: 18172 components: - type: Transform @@ -121693,6 +121814,23 @@ entities: - type: Transform pos: -76.5,-51.5 parent: 30 +- proto: ShardGlass + entities: + - uid: 6989 + components: + - type: Transform + pos: -40.321564,-21.272621 + parent: 30 + - uid: 9166 + components: + - type: Transform + pos: -40.80594,-21.319496 + parent: 30 + - uid: 11250 + components: + - type: Transform + pos: -40.634064,-21.538246 + parent: 30 - proto: SheetGlass entities: - uid: 5635 @@ -121743,7 +121881,7 @@ entities: - uid: 22523 components: - type: Transform - pos: 3.361289,-46.49021 + pos: 3.1795287,-46.489548 parent: 30 - proto: SheetPlasma entities: @@ -121908,6 +122046,11 @@ entities: - type: Transform pos: -38.50112,-3.4785028 parent: 30 + - uid: 6805 + components: + - type: Transform + pos: -40.446564,-18.397621 + parent: 30 - uid: 9678 components: - type: Transform @@ -122015,6 +122158,13 @@ entities: - type: Transform pos: -15.342251,-37.568897 parent: 30 +- proto: Shiv + entities: + - uid: 6767 + components: + - type: Transform + pos: -41.290314,-21.444496 + parent: 30 - proto: Shovel entities: - uid: 12092 @@ -125369,6 +125519,13 @@ entities: - type: Transform pos: 3.5163379,42.700695 parent: 30 +- proto: SmallLight + entities: + - uid: 10040 + components: + - type: Transform + pos: -24.5,-30.5 + parent: 30 - proto: SmartFridge entities: - uid: 315 @@ -125509,7 +125666,7 @@ entities: - uid: 16235 components: - type: Transform - pos: 48.50878,41.513634 + pos: 48.418343,41.43319 parent: 30 - proto: SodaDispenser entities: @@ -126898,10 +127055,27 @@ entities: parent: 30 - proto: SpawnMobBandito entities: - - uid: 12828 + - uid: 23832 components: - type: Transform - pos: 26.5,13.5 + pos: 29.5,15.5 + parent: 30 +- proto: SpawnMobButterfly + entities: + - uid: 23855 + components: + - type: Transform + pos: -11.5,23.5 + parent: 30 + - uid: 23856 + components: + - type: Transform + pos: -6.5,23.5 + parent: 30 + - uid: 23857 + components: + - type: Transform + pos: -8.5,23.5 parent: 30 - proto: SpawnMobCat entities: @@ -127025,10 +127199,10 @@ entities: parent: 30 - proto: SpawnMobWalter entities: - - uid: 6768 + - uid: 11255 components: - type: Transform - pos: -8.5,-9.5 + pos: -5.5,-12.5 parent: 30 - proto: SpawnPointAtmos entities: @@ -127128,15 +127302,15 @@ entities: parent: 30 - proto: SpawnPointChemist entities: - - uid: 6766 + - uid: 23844 components: - type: Transform - pos: -7.5,-9.5 + pos: -8.5,-6.5 parent: 30 - - uid: 6767 + - uid: 23846 components: - type: Transform - pos: -6.5,-9.5 + pos: -6.5,-6.5 parent: 30 - proto: SpawnPointChiefEngineer entities: @@ -127666,7 +127840,7 @@ entities: - uid: 9326 components: - type: Transform - pos: 9.666185,-26.444672 + pos: 9.748059,-26.43096 parent: 30 - uid: 23318 components: @@ -127727,6 +127901,14 @@ entities: - type: Transform pos: -16.5,-16.5 parent: 30 +- proto: StationAiFixerComputer + entities: + - uid: 1733 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,13.5 + parent: 30 - proto: StationAiUploadComputer entities: - uid: 22212 @@ -131024,6 +131206,11 @@ entities: - type: Transform pos: -18.5,-18.5 parent: 30 + - uid: 9167 + components: + - type: Transform + pos: -40.5,-18.5 + parent: 30 - uid: 9168 components: - type: Transform @@ -131099,21 +131286,6 @@ entities: - type: Transform pos: -8.5,-47.5 parent: 30 - - uid: 11247 - components: - - type: Transform - pos: -1.5,-32.5 - parent: 30 - - uid: 11249 - components: - - type: Transform - pos: -3.5,-32.5 - parent: 30 - - uid: 11250 - components: - - type: Transform - pos: -3.5,-33.5 - parent: 30 - uid: 11336 components: - type: Transform @@ -132052,6 +132224,12 @@ entities: - type: Transform pos: -10.5,-8.5 parent: 30 + - uid: 4950 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-35.5 + parent: 30 - uid: 5353 components: - type: Transform @@ -132207,6 +132385,17 @@ entities: - type: Transform pos: 3.5,-46.5 parent: 30 + - uid: 9061 + components: + - type: Transform + pos: -2.5,-31.5 + parent: 30 + - uid: 9248 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-34.5 + parent: 30 - uid: 9658 components: - type: Transform @@ -132277,6 +132466,11 @@ entities: - type: Transform pos: 4.5,-27.5 parent: 30 + - uid: 11249 + components: + - type: Transform + pos: -1.5,-31.5 + parent: 30 - uid: 11821 components: - type: Transform @@ -132302,6 +132496,12 @@ entities: - type: Transform pos: -7.5,-35.5 parent: 30 + - uid: 22830 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-33.5 + parent: 30 - proto: TableReinforcedGlass entities: - uid: 2113 @@ -133435,6 +133635,11 @@ entities: - type: Transform pos: -32.56638,31.48925 parent: 30 + - uid: 12731 + components: + - type: Transform + pos: -3.4804978,-34.337254 + parent: 30 - uid: 19180 components: - type: Transform @@ -133477,11 +133682,6 @@ entities: - type: Transform pos: -11.488707,-33.250866 parent: 30 - - uid: 11256 - components: - - type: Transform - pos: -3.5175757,-35.433304 - parent: 30 - uid: 15271 components: - type: Transform @@ -133506,6 +133706,11 @@ entities: - type: Transform pos: -24.487177,31.504875 parent: 30 + - uid: 7217 + components: + - type: Transform + pos: -3.4961228,-34.82291 + parent: 30 - uid: 11271 components: - type: Transform @@ -134341,6 +134546,11 @@ entities: - type: Transform pos: -21.5,-46.5 parent: 30 + - uid: 23831 + components: + - type: Transform + pos: -1.5,-35.5 + parent: 30 - proto: VendingMachineEngivend entities: - uid: 9291 @@ -140369,6 +140579,12 @@ entities: - type: Transform pos: 30.5,17.5 parent: 30 + - uid: 12777 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,28.5 + parent: 30 - uid: 12781 components: - type: Transform @@ -140399,6 +140615,12 @@ entities: - type: Transform pos: -39.5,-35.5 parent: 30 + - uid: 12828 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,38.5 + parent: 30 - uid: 12846 components: - type: Transform @@ -142234,6 +142456,30 @@ entities: - type: Transform pos: 12.5,40.5 parent: 30 + - uid: 19442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,40.5 + parent: 30 + - uid: 19683 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,40.5 + parent: 30 + - uid: 19684 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,40.5 + parent: 30 + - uid: 19693 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,40.5 + parent: 30 - uid: 19784 components: - type: Transform @@ -145061,11 +145307,6 @@ entities: - type: Transform pos: -58.5,32.5 parent: 30 - - uid: 1567 - components: - - type: Transform - pos: -23.5,28.5 - parent: 30 - uid: 1579 components: - type: Transform @@ -145131,21 +145372,6 @@ entities: - type: Transform pos: -27.5,38.5 parent: 30 - - uid: 1720 - components: - - type: Transform - pos: -25.5,38.5 - parent: 30 - - uid: 1721 - components: - - type: Transform - pos: -25.5,40.5 - parent: 30 - - uid: 1733 - components: - - type: Transform - pos: -26.5,40.5 - parent: 30 - uid: 1816 components: - type: Transform @@ -145271,16 +145497,6 @@ entities: - type: Transform pos: 1.5,-5.5 parent: 30 - - uid: 4950 - components: - - type: Transform - pos: -27.5,40.5 - parent: 30 - - uid: 4951 - components: - - type: Transform - pos: -28.5,40.5 - parent: 30 - uid: 4980 components: - type: Transform @@ -148656,16 +148872,6 @@ entities: - type: Transform pos: -20.5,-26.5 parent: 30 - - uid: 19683 - components: - - type: Transform - pos: -22.5,-27.5 - parent: 30 - - uid: 19684 - components: - - type: Transform - pos: -22.5,-28.5 - parent: 30 - uid: 19814 components: - type: Transform @@ -149347,6 +149553,11 @@ entities: - type: Transform pos: -28.5,48.5 parent: 30 + - uid: 8371 + components: + - type: Transform + pos: 3.5,-30.5 + parent: 30 - uid: 11611 components: - type: Transform @@ -149367,11 +149578,6 @@ entities: - type: Transform pos: 7.5,32.5 parent: 30 - - uid: 20454 - components: - - type: Transform - pos: -0.5,-30.5 - parent: 30 - uid: 20455 components: - type: Transform @@ -149404,6 +149610,11 @@ entities: - type: Transform pos: -50.5,69.5 parent: 30 + - uid: 9283 + components: + - type: Transform + pos: -21.5,-27.5 + parent: 30 - uid: 14476 components: - type: Transform @@ -149516,13 +149727,6 @@ entities: parent: 30 - type: Physics canCollide: False - - uid: 11252 - components: - - type: Transform - pos: -3.5,-32.5 - parent: 30 - - type: Physics - canCollide: False - uid: 20998 components: - type: Transform @@ -150094,6 +150298,20 @@ entities: gridUid: 30 - proto: WindoorSecureEngineeringLocked entities: + - uid: 6455 + components: + - type: Transform + pos: -1.5,-31.5 + parent: 30 + - type: DeltaPressure + gridUid: 30 + - uid: 9162 + components: + - type: Transform + pos: -2.5,-31.5 + parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21294 components: - type: Transform From 78748d5c7d67c1787476856d44f107918a2d258e Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 02:22:32 +0000 Subject: [PATCH 042/216] Automatic changelog update --- Resources/Changelog/Maps.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 227040557a..aa47fbf146 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -738,4 +738,15 @@ id: 89 time: '2025-09-30T03:45:17.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40590 +- author: ToastEnjoyer + changes: + - message: On Marathon, added various improvements to engineering, parts of maints, + and some service improvements. + type: Tweak + - message: On Marathon, the security front has been fixed so that power is there + roundstart. + type: Fix + id: 90 + time: '2025-10-07T02:21:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40725 Order: 1 From ee2b38d299c4ecc894f28883f68e57eaaae4b57f Mon Sep 17 00:00:00 2001 From: Huaqas Date: Tue, 7 Oct 2025 15:28:48 +0800 Subject: [PATCH 043/216] Create more Holy Books based off Spacestation 14 Dieties (#39181) * Add More Holy Books * Remove reference of original fork in meta.json * Removed "rich" reagent description for Blessed Bolognese, and replaced with "holy". * Updated Holy Liquids to each have their own minor effects. * Tuned down Nar'sie Blood * Create playtime requirements, and relocate holy water to it's own category. All holy waters created through a bible are now located under the "Sacred" section of the guidebook, as to help maintain clutter. * Replace 'curse' mixing verb with 'bless'. * Update and fix guidebook to have section for 'Sacred' liquids. * Add back in Tanakh and Satanic Bibles so they can be removed in other PR. * Forgot to re-add the prototypes. * Add back the time requirements I mistakenly removed. * Remove Italian Bible * Fix errors. * Remove Carps & Crypts * Relocate .ftl designations to their own sacred.ftl * Forgot to update single_reagent.yml. Updated it now. * Ended the communist dream. (Removed Communist Manifesto option for Chaplain) * Give lamp book a little more pizzazz. * Single line indent applied * test * untest * Update sacred.yml * Remove Unused Bibles, rename druids, moth bibles. * Remove custom reagents. * Error fixes. * Reorder Bibles to Save my OCD. * Flip that pentagram. Bro must of rolled a nat 20 in convincing people this should be flipped. I know its more "accurate", but the layman will probably look at this and say its wrong. Just a personal thought that escaped my brain and will never be read. * Rename Druid Tablet, Delete Lantern Path * Delete icon.png * Delete inhand-left.png * Delete inhand-right.png * Delete meta.json * Update chaplain.yml * Update loadout_groups.yml * Reorder for OCD --- .../Objects/Specific/Chapel/bibles.yml | 49 ++++++++++++--- .../Loadouts/Jobs/Civilian/chaplain.yml | 57 ++++++++++++++++++ .../Prototypes/Loadouts/loadout_groups.yml | 5 +- .../Chapel/codexnanotrasimus.rsi/icon.png | Bin 3363 -> 891 bytes .../codexnanotrasimus.rsi/inhand-left.png | Bin 2992 -> 955 bytes .../codexnanotrasimus.rsi/inhand-right.png | Bin 2971 -> 1036 bytes .../Chapel/codexnanotrasimus.rsi/meta.json | 39 ++++++------ .../Chapel/communistmanifesto.rsi/icon.png | Bin 3522 -> 948 bytes .../communistmanifesto.rsi/inhand-left.png | Bin 3075 -> 857 bytes .../communistmanifesto.rsi/inhand-right.png | Bin 3083 -> 942 bytes .../Chapel/communistmanifesto.rsi/meta.json | 39 ++++++------ .../Objects/Specific/Chapel/honk.rsi/icon.png | Bin 0 -> 1084 bytes .../Specific/Chapel/honk.rsi/inhand-left.png | Bin 0 -> 957 bytes .../Specific/Chapel/honk.rsi/inhand-right.png | Bin 0 -> 1030 bytes .../Specific/Chapel/honk.rsi/meta.json | 22 +++++++ .../Chapel/mysteryofthedruids.rsi/icon.png | Bin 824 -> 1589 bytes .../mysteryofthedruids.rsi/inhand-left.png | Bin 3041 -> 958 bytes .../mysteryofthedruids.rsi/inhand-right.png | Bin 3122 -> 956 bytes .../Chapel/mysteryofthedruids.rsi/meta.json | 39 ++++++------ .../Specific/Chapel/ratvartablet.rsi/icon.png | Bin 0 -> 826 bytes .../Chapel/ratvartablet.rsi/inhand-left.png | Bin 0 -> 1169 bytes .../Chapel/ratvartablet.rsi/inhand-right.png | Bin 0 -> 1247 bytes .../Chapel/ratvartablet.rsi/meta.json | 22 +++++++ .../Specific/Chapel/tomeofnarsie.rsi/icon.png | Bin 0 -> 738 bytes .../Chapel/tomeofnarsie.rsi/inhand-left.png | Bin 0 -> 863 bytes .../Chapel/tomeofnarsie.rsi/inhand-right.png | Bin 0 -> 869 bytes .../Chapel/tomeofnarsie.rsi/meta.json | 22 +++++++ 27 files changed, 225 insertions(+), 69 deletions(-) create mode 100644 Resources/Textures/Objects/Specific/Chapel/honk.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/honk.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/honk.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/honk.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/icon.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index 18995446b1..9016bce6cb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -107,10 +107,10 @@ sprite: Objects/Specific/Chapel/tanakh.rsi - type: entity - parent: Bible - name: druidic tablet - description: "It's the mystery of the druids!" id: BibleDruid + name: druidic tablet + parent: Bible + description: "It's the mystery of the druids!" components: - type: Sprite sprite: Objects/Specific/Chapel/mysteryofthedruids.rsi @@ -118,10 +118,10 @@ sprite: Objects/Specific/Chapel/mysteryofthedruids.rsi - type: entity - parent: Bible - name: communist manifesto - description: "Remove the mask of humanity from Capital." id: BibleCommunistManifesto + name: communist manifesto + parent: Bible + description: "Remove the mask of humanity from Capital." components: - type: Sprite sprite: Objects/Specific/Chapel/communistmanifesto.rsi @@ -140,12 +140,45 @@ sprite: Objects/Specific/Chapel/satanicbible.rsi - type: entity + id: BibleNarsie + name: tome of nar'sie parent: Bible - name: codex nanotrasimus - description: "A familiar book containing the Sacred Operating Procedures." + description: "What could possibly go wrong with a book covered in blood?" + components: + - type: Sprite + sprite: Objects/Specific/Chapel/tomeofnarsie.rsi + - type: Item + sprite: Objects/Specific/Chapel/tomeofnarsie.rsi + +- type: entity id: BibleNanoTrasen + name: codex nanotrasimus + parent: Bible + description: "A familiar book containing the Sacred Operating Procedures." components: - type: Sprite sprite: Objects/Specific/Chapel/codexnanotrasimus.rsi - type: Item sprite: Objects/Specific/Chapel/codexnanotrasimus.rsi + +- type: entity + id: BibleHonk + name: mirth of the honkmother + parent: Bible + description: "Oh great and glorious Mother, Mistress of Mirth, Matron of Mask and Merriments, Blessed is she amongst us jesters." + components: + - type: Sprite + sprite: Objects/Specific/Chapel/honk.rsi + - type: Item + sprite: Objects/Specific/Chapel/honk.rsi + +- type: entity + id: BibleRatvar + name: tablet of ratvar + parent: Bible + description: "A holy relic of the Clockwork Cult, blessed by the Clockwork Justice, Ratvar." + components: + - type: Sprite + sprite: Objects/Specific/Chapel/ratvartablet.rsi + - type: Item + sprite: Objects/Specific/Chapel/ratvartablet.rsi diff --git a/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml b/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml index eb252a0c43..4f501057b2 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml @@ -1,3 +1,33 @@ +# Playtime requirement for NanoTrasen Bible, Codex NanoTrasimus +- type: loadoutEffectGroup + id: NanoTrasenBibleRequirement + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobCaptain + time: 7200 #2 hrs + +# Playtime requirement for Druid Bible, Druidic Tablet +- type: loadoutEffectGroup + id: DruidBibleRequirement + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobBotanist + time: 18000 #5 hrs + +# Playtime requirement for Clown Bible, Mirth of the Honkmother +- type: loadoutEffectGroup + id: ClownBibleRequirement + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobClown + time: 18000 #5 hrs + # Head - type: loadout id: ChaplainHead @@ -87,12 +117,18 @@ - type: loadout id: BibleDruid + effects: + - !type:GroupLoadoutEffect + proto: DruidBibleRequirement storage: back: - BibleDruid - type: loadout id: BibleNanoTrasen + effects: + - !type:GroupLoadoutEffect + proto: NanoTrasenBibleRequirement storage: back: - BibleNanoTrasen @@ -108,3 +144,24 @@ storage: back: - BibleTanakh + +- type: loadout + id: BibleNarsie + storage: + back: + - BibleNarsie + +- type: loadout + id: BibleHonk + effects: + - !type:GroupLoadoutEffect + proto: ClownBibleRequirement + storage: + back: + - BibleHonk + +- type: loadout + id: BibleRatvar + storage: + back: + - BibleRatvar diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 7930b3ff1b..79266b70ec 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -381,10 +381,13 @@ minLimit: 1 loadouts: - Bible - - BibleDruid - BibleNanoTrasen + - BibleDruid - BibleSatanic - BibleTanakh + - BibleHonk + - BibleRatvar + - BibleNarsie - type: loadoutGroup id: JanitorHead diff --git a/Resources/Textures/Objects/Specific/Chapel/codexnanotrasimus.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/codexnanotrasimus.rsi/icon.png index 2f29dff1c7ca3cea1cd5346a4b64d9fab9fa3b77..8b98bf543671896a53ccb78fcd5cca72f2ca12fa 100644 GIT binary patch delta 869 zcmV-r1DgD!8v6#2BYy#YX+uL$Nkc;*aB^>EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N_xJg7o zR9J=WmcL6QK@`V7(T%&Ha$s0ArEuL9VqtY22p94vxWU#RjfI>C5^Oy1;A-!xO?#)f zwU9>q2W%DW(k?Qj6PYy|)WIsrNDx_6g4T#yMHCSf1UCpm6&H{wC~E=)$m@LsJMEmqInK-o!2LR)_8&>&l^!1$qXs{1}u~6th2MhrM zHBtbg*U2B`ce(+B0u&A>KtZ8S&L!;{{Z40%=;S=aKyPO+)D1>-ISCCm+VDfv5ih{F zCEmW?a3gYa_#zsBC!iS_QH>}xDwRs7(-dSn=-8?v#qTrTUy#onKjME zcBY-BC3oKRnGTLFE-vh8eAoF-3uigIIFUvWI-PD}Y+^BHjD-`&lH>GmH=-Dr(MU`v zVhaq+5Y!AIZUZ*NNkN92o(f46HKZ6(X>^7$oS+y7pr=p+LzF@>G=!rfI1UWWDC0Sf z?ndT#IMwzmrc+`{2F=dn{7qKi!;UG=>$fM-851U2Oqx9PvuWJvGhF7(oj0Gqz|#x! z_F3$^WO>kvmBFi4heUj_VdJLFTOwn2e7*CVZ)4+jf466E^7s2BKOX%1q13}ijvkX` zp2|9%os*k);irp=ONE!OT)kCtyYx<3`Q3Yu9zUt6Rn|SNfBEWlQ}de^)!TQSUEMuu zO>bYnmgGh9{Mhu&{)Lwr=;?)B{5)QkOxhORu48w2HuPK8upT}1 z(ah^5fN3A+{owvc$=l7D1AiJIK=R-?jm~Edw&Nl`vYr+%wmT-f8p74x(GlP!0SsMl zq>wu>#Svn02LY0-8_VD1$Rr(A2{H*6j3Q`Oc1;}bgI(aWu}0EtmHY@-ewYBk1bEv* z+Weqx=?#!?mLJH;(-jjSJ3V>OOcY(N)kyjo61M_3{j5cWO`>>AxF@j2C%K&fv)xSl zY_*Lk>QYvhE0X{v+PCQJc{~Ed~M;OUOs2}fq_U#pG?xCyQN1uzUX|DNRA0{j9n+_ z=_Y-`Ue&coDJ$Zh3vnyBF#;Y=+Jgz>F}F6h9_QIub~rAuhM_PWS~%$TBDr>xu6vBNJD!GKWQrb5Ak5B>zsJauoV3xF6`_u&mm%%jHO@ILC zXpUNH*EWOqN-}-K3{4bKz5xq-vZA%JlpUrlSF1~fQUSlDv8%gTd;CaI@*IpAoVp6f zm|zq^9t0^^eu8K;Q7V(v-fro+Cla*<@Q+=@u}GVbus_zoe+yrs zsS)}Kwg&%voB$O!(p51J-U;Ic;lZUW&GoQ&0?g8hPZkV$6mjJ+nr?_xn?3L6_=a%=ai#!cf1D>mTgZtsNwQXSV4R7{-CHB5tNF0S>3ne&T3l6tuz~ z3%gc{tKY*Qh6b0byVFK;?dd1wnmr3fGG#G^Vb((2 z8yl(K1tvLpA(HE{M>1RM`>l&E%Trog=Ev*8gg2J|H1Pp>AazwRxUz)NWC1L*+^F|2 zwmGWxIFuaNt^1{|v4ArgIyA<9ZAIwrajZ(j^fm);y2!CqIJ);~+65HOc>Gm+geYp%yPWL>%(l^`JTSd}DcQDqJY2GXU2K(lC*I~LP}56OqB%XA=~?MyD`eq8M;J^BC-9b$^3 z2oTdrfCTHZN)owu{dxk0CAtei}H5>Xkk}^ z3V^R20C=|!fCWbYn7A$ND!vd77_Im7@d5<-oV=cW5cbfwEnXc1FX`r_AmCV<1?;5m z@Lh^g-%=SAz_?@C8wC+e_4RTOT2&IU&VrJ;E&;J~lzf|&JvdF7R2>l0QGe6phi2la zm&JbjzVc$&Z0xf=E;cj9D(QI~Rf3y%k+Xw?aHE4XX&EN^<{dq?t<_Km+^u0|I| zo;dZW8o6xgez5+)%f@ME_nEn-+^P#;Kg&3Q7EJZ>_}u#iTiKG$Z}e#x%3SvV1!q== VRUMNbJOzCSd@+Boe2;ZWzXG%BY@h%D diff --git a/Resources/Textures/Objects/Specific/Chapel/codexnanotrasimus.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/codexnanotrasimus.rsi/inhand-left.png index 0d7d9cf676dfc449715c1d31444dd00700641df5..1dcacda0e37362eee68f5ec5e78a94385567919f 100644 GIT binary patch delta 934 zcmV;X16lmA7rO_LBYy#YX+uL$Nkc;*aB^>EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N__(?=T zRCt{2+COVkQ5XjB=bV$+t+)uC6?4WaolY5%lKfp7(V~E#e>0!_4*}DO&!9{&PP0Zybk>4NBs?vh-){l?B{mc zYewS^m=#duz5dE_M*#<@0M6$YxxLT1JbJL|;XR;=SoV$o1Vl8>Oixw+!ml2qqdr-_ zXMc7QtST0edVtheKIh8HoOI~Vwx#Qp*03SsxW9pHJh^TVD0!s$1{U3FWqW}N^07*qo IM6N<$g6~zlz5oCK literal 2992 zcmeHJX;f547OtlE29$;-4G!3VVk6)Jv|))1qHHY(5e%SA0&#(sMcE|mJ|MUeGK^b5 zKv@j7>mWfShz&vnT!M(8*dR6#0TqxPrI+_oPc-p(=FFJMIr)|Q&R6eN-CMWrSKE6B z)~|C`Wz1s$095%d4xaG63I~k>%d z;6V7`u)sRO8bG5^s1!1dN~O~2G=>UGRYh4@MO$5CE=zYFXTI({9UZ-eOSyUmrVDg* zj4T(ME;r-xcpR>^t(E!8r4~GMJP3hKr>iKdXsN1dnd|H5oBwXXt^pt)^$o=t7Gvk*RdXM{F(ad4`L)MvIMkD?YZgvbI^{;OOM+!e6`L zQ!j6yjhlS8ZVLz$Y!3>K+7Aww;eBXZ3Hxo-ONrVT z$d)KBVxZ$_ue4EKih&el?Q{gEz5#h;ccUqhg$91k^6)b&@Ni^-Hz17UQ;>d3420TE z7spn^KBh>w|2@&k|1?C|esrk?+JicUbPFfUpBAN$ee)rEYL2WnUmXKIOj($G?cdv{ zOO~O2iK40)}9mzB$hD<<~@Y^#E^yD`J4 zC>^}T$W`sJWhj#a7w!7VVI+7Q1APOxJ1b&jTppYbvuGqwPlbVxScRs67UTPGca=63xfJ_*@JG__;q={E}TEeAIWkDE(pE z+r9C7-qH=zNf%95Gb z@ynqS^fvD5F-Glq35{aO7!Nl}W@4aGjJCdxGl#RJt|eryr_E$c{8YTZYut+!i%z}> zjl;l!u-)Qm|E{6Vn(C-LZ`I(CHy6{=tBE@pyG(8!HQat~x6|Zq63fFeGH1`bSJDUQ z^F{wHXCIBvM4B(0t?_A?LlLcZ6Wz;QCC{P?&qv z5m_%fnac9bWLVeR>f#BV;upc+x-V1RiSat5LwNNw4v3|O_L+uMn&x`#Y4AWk5H_V@X%>M!n&t7NN@7zN3Rri>HR*&eXZz734wly9O< z_{T%#9lBYDas1{(b8?$Ue*U~UyYx=Nh+^anQzG4dB(ODTN!8=T68}q*O?1(}rnV6M~xJ%vf_lh(reil-DSe8np0_N?a7WTuBfIgU%T4N gFsQCs7lfbSTsvo*dLqz19nXaCxX$6ClmH+?% diff --git a/Resources/Textures/Objects/Specific/Chapel/codexnanotrasimus.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/codexnanotrasimus.rsi/inhand-right.png index 6e5e4cd27a298a533d6e7d06aff4d5a9ad3f61c0..20c3c84cb285acf216d7c5c81b04ea5cdf1988a9 100644 GIT binary patch delta 1015 zcmVEX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N`Nl8RO zRCt{2+P!NOK^O+`=bgPxs^kJOl1@l*f{ixjnu{l>7!^gZu@J1xA8-VO*xCpd{sVp# zD!D?gNOgrD(FmdZ#}vp2iBiRS%PSIi6#4==k1vw#pn z2qA6kh>kL=~SS{;w>UNRP;ObbYPTr3vQ@5d+>w}Uf_ zoGnrwY;qbW01Ql5E+Xa}6i4uLeW}B)3(K6w0)L1Y&j17v0j>kMw&@EHLI@#Jm^d)a<%4H?erbGuW(MafmDJ~?{vR-TbRXJb zJ9Ut5eQq}K?B%P}=U5f6V|aW{%W`I=B9|KDRU*LaS11^ayy`)9vq7#J4dxjD0E~HozM=4U4FLuXmS^IVdI4Y##BJnl7%{TkiC)y#Tm;D@oKIvC~6BAaTF#URE+ zMr;6yg^*bYUJp2MoK)n6y_7--B~z$0I)iCo2ph=e0ytA-5`|2qQYeu94Dx`&qM9sl z_NJNgH`8sB*e;o06*CsDm0mLoZ5g$76(nad4c<1lu$*W2j=jU8#cs=2xUckB<>Tw; z9}vh3dOvJKc*MrYsMsxWTZJFRC#3BBbeAYKEq&kq&ktlD{37S@k*|;D9Xoy^zohhZ z**E3ies|`4#RXYq)x}HI*X!zUC>k1XHnskEzpcIFCuOIq|KY%+!Ji*Lc{(<(o|x23 zJ)fQ-bP+mV*-K@=)5U_iNE8a0LML<~BoQH;MWHTmrkQy2>6?>GZCo-L?6qGNORq5( zx`vLL36fh3-nMm9*^Lp>UMPDrVOjr^vi}JCO;;x{A|r6|$SlAG(^!tfDbk;Sb1=D- zmg6%j?Hcc4kdeEVYT|fU7Z34L)qAUiTSI4 zU&ye;!SO!*4>;&N+CS5vlj0x~4bmiWZYa=hZew!>8{4{x&5w3I#rI=_S%8d)Y3QIk z4nF2;%2KbuzMRkpF|DU3FA0;^z*H*Dv{RSqh}_qw_li^UN@QHP!Jf!54;*xqYB^W|4jzj2>67yFQuO9?iJDWHow6jyLE?FDwoUMR z-f?$bggjOoF+4S_?6XiL(qwMvG(3g~CTq(o4yjFTJtHwk8=I=G*8P@uN=)yOo09O-n-_{iW$pIl!?(53xv)pH28 zLf#)iu=4RS$X4i&609Vam8VK{&n};zUQ@g3+|qNp%4Nyhy|4z;XrNPQ#^&|$Q7Sn613PEEG2i4?eSt)+#r(y&%|RL_kfo7m66?!Zf#N#B$n7wvT-tkrvvljt&W({#@sVLp5q)=CgNO6G zaS{HFk0bHkgywOQbIz0N0?Ve0F;n}N?@LWNeEOuFFmG5idKQFEy6n2B9XYfTnR`{( zp4VnJjuCIv7q;f)`x6I3?j_r8uwX;naaKBG>pOf9&Cf1ry%KIm7e^S|5{zUZP?A*E(a juzOEI;3~np0Q_qVgfo0x`@5gC5LtPCA->EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N_@kvBM zR9J=Wl|f4zK^(<@Yl4;>5~xb(DF>xqR%k-MLJnf-M-VKu6au9nNTA@MP!LL?1mdAN z1Ok2m5j^x0v)3c!yp~(ZK#Lf0 z+U%`WRF+G;+Wy#gjgkR@2T{k;gt#4JK+XkDqW8CI0Kok8l2kImbfZZsnE;^PXfm5j zP;WE=uvXNQ(lU@H#9FBkkA+OO;Slh;?n|Y;t$%O8#gO8&mAA5Tq7;6ve$k=RHz33T zzPw(e<|~69mARB#}GyA)NC?K zb5|<&{D3qejv}Xa0zw?%xN6JG$nyifmkv0t+A@jLf33cJS_xc4d;Yg`0ryheE(UJt z0DwR4-@cq$37ilrKLCeEb@r`A^?&mSBN*HT&Hyeb%Kej{?_2-?002ovPDHLkV1gXV BvzPz? literal 3522 zcmd5<3s6(n7Cj*e;afz5zlQ`wB}T1?Sd~grkPxF48VW={5)^+(v6lD?5~EbbrdS?D zlu{%mlwygPhZGcrq|}zL5>OEVE1(Ht0KrIr1d`ixp}*-o-uOE6X5P88@7-sg-(G9) zbMC#LyywTTwwP-H0I+6m@CkrVM^wyA;hh^FKLmhf&CV^%T}&ngm_Zu=Z$L2zMt}nt zsG$NdlR8?#{7E;#U;!33ABTd4I@%YV*Yr=i-LE>@4`VVp&uOTe{Hl9f!U`;A6BqIj z=>*d@`Z9gtLg?b~hO~qAz|7Q?V2U>*5D4bxW)@aNYb#4jt2xtW*bwKmPDT;xJtOmScJ z*6KBDJ=XiseHj~=8{ZEM3TAH!360vZbJy-Y(R;ZE4jwvugctwu$y2A3&U_;LJndZi z`3o6eWQudY&if|+(zgXyi@z%=y>`9q#t*lC{HdzCrnc_xz5C4%S{}Bxbv=2iRCPb= zd9Hq`c{QXR9vRi?QCuj_-^wJizu>ZkxJ+<3ERKNU!k8RJf!pHnPAg2Od$9=HKAJJ# z?SvW8J2j`M(%gAvz@XjsxF(C43*5UFzC@u-AbUMviGK^(@4)`R)dsAv7#KXPEuaCN zQAqyE~nqjW}v^U27qTK^lh#{(`&sb|jKo3- zPV3Ad5-)e+qUWKro1a#JB_O5ISj##->j+U?dIt`3ZZ; zxxEfvhBN~LZW+yMo3`#G@}p{KR|WD>LFHNxviOFLJy|RSQ%Nr+o-AEa-2e0+q<2^x zS`({|Cu$WvhTe$$Ssd4<_xr}{j19&S)LnhNPagoPbYLq=< zp;mFxf-F8hmAvgS<|bPyzP|XrQkK;GbU!ClHBuNeM7=GB))KuUwbJnE1bQ=eYx>KJ zcIh5j7a9kuI%OsG1EDQF{4eMUyV(+k@Y?#%=ggvwm!ocQSRBWuO})o_Md}g5y5B8~ z2jd?bA`p--g5>wAM;n9`O5n57)1ymgHS;QZAOCEVFHsff&&xuu#C!UEVAH0vzer?7 zl)cKK6W_y3A%xwWUF@m@Y&`0hzI>l$Z@5fbcr2;)9JB_@Lo{n>MHA7QKqR@JP5If{ zDV2+WdIgNAR%@rRCd#fUqm5F*y+17c4{K=619~2eGF65$A?c+uXv51VX-A151_x2N z?d#?EM7?x%#nJYhA#FklC!nQ1NWu8_&WSOObDCJVq=kB5s?k}o&pK3D7Z%JQV=3&`4a$*;>H-7dcTn?8P@Qv;Dj-*xa5pT==zMfgRh z8w6<`DwTZGz=x|IKBW9h)BMHVVnoCjb2?dVRbsRQhd#CwWMayq?Tw>P+X=Cj)A;B>Q zk>UlH8&+5=U>o;{g)dX?np|q4?@9lR zsmRio3UwQ0h0=ys;gT_0T1R)cd{gX)s~_pceMt}7!yYYBQI@FNvbM+&!~DPINu@QswiZ!?D~*G0w*3%*5#sgc{ugl-y(RGuW(7-#_Gon30<7vCi=0% zncZ^8&@)I-$5Gy!)ru!89NOAKtLp;U%_We=LqVAc*ux#mDlhHj4=8UsWRq&rYGYxdK&qV)FyBVc>!qhoD%F?l@{8+|EjWcQkP)u)-c=vhBv0Q zcBueXaJ#)WdjU|CVmZDI59^Lm8v-^15Wfh1x}O9<4^78=066FhfI1QYj|>22?a#Ww zS_d0Uw{K$j00h0hs>n}+7W4fZLb&j^VFoG~keM|b8VLuOo9Tq-1PeUI@)8&>haR{w zeY^s<+=_~vjn9odj&WWgq?DB*X)#`7Ez%?Xkxo@{w!XfmNeg#cp+$IA>=X7lmhJtX zwHM)xtM|J7j^9{%N3n9N5~Gu~j}M9MYrT`jVuh%yj~Wp{q`uWyU0)x$c?a26bsQQl zCwxGaYoFOLqfaWQIaXH&+FvTEX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N_mPtfG zRCt{2+Pg{vK@`UEZ)Oc*A;uel#2e8%t#6S+f~AdJD)m9^v=p?`!n}Y!hIVSRK?$gV zEo5&q$08cURK`Ov`28N>zi@V#W)46^L_|bHL_|dNuNbY+?p!gRE*2+^u@G^vHo)QC zgIa%oy?-hq9#Is@$@8n#>P~2dGVg;@eIB!=33NL-!d6G6+gw?a<*ib``*PY<8!9vh zV62t<^AJJc;eCKYp`ew;ieU;G{4fj1d}-Pt{~S(j{rQZNTShAlh`K-?A7rT3^I>y@4UGL$&>YQA^WrdjpPp14KmhQ}2rFv11e83p)S+ N002ovPDHLkV1kQ;g!BLa literal 3075 zcmeHJc~p~067O8(;2Lg3luIBY19EtPKo;Z*u5#!Q1tfzk1n@ux6j1R~JWyuQr{ai; zpg5!Ag$#sK2rMYeAR>puKvobL2(Uyh4T*&GbkuQO-kYbpe^2$R{;InA>#kpQRlh#& zx6VtMrbhz+C^Nm?1JL&`a;7Mt{$_Ms4*)c?h>grhCes2?&=>$Jh^asZhyaHqIRo4~ zS+3wdlJPhKARzMr!~`VE=gQYr_(;}zFU#lQ@bA_+ie&tI`7#wLh$wFx`~^M-U-)=3 zJ<&$;%~1#WU^Sp9D3BFM6f&7irBY~0n#xLwic0g;HB>bh=ou_rpr@~IxX8-f(Ad&M zU!T5WvE@=5dwY8Wa|h>@woX=d_O|jxa8xQ)Nl{5xSy|WCNZ-ize?|-;< z{YL)HAB&2)C8cHM75}KKfAFy3pN&7YwRb%Ix$~EyswNw+k zfN`xY-?Y-S7uoljPROCXMfQ2XQvWYxAAtP_S2s{1;Lza_)BpoWWa;$F_&<403|<$I z#SED`uLOeYDd$G{jDZug{8FsgW*Q5c5@NE=5IkqMmG`l8LQ0&SJlT4FnVB#9w}06? z81C<(^(6VAho&Fy1MlfPBsGA5%I0J3)lH)9xswh1g?wJO?hNlvvWN$P6$Inf!y)4Z zEmpw`b4;u==srG)aV6i4P1)SYOCNHo$xEk$PcUJ~`mn*&JP1k*W&-X9vmrQ#iFIBT zM2lS^u*sbXgMho_0T%*EA_NC9pQ(EgJdjlytj-WG!T8sfY5IpApQ`=fv!);U37f(g zw1Z$9L-a#Z$p<$>+s6;d!Wp7E2x3^@ZiQfS3>#m>T%3X-OOkbd9C-d`3oUSLw=-0ct?XLMJ$7s*0*Z|7Ie9?GqH z!_vVp(U|pg@N$m0D7&BEo$tTtVWzRDvCQQJ3kThPaVpi_D?77 zAIGQ!yT=$7Kwt#H>mgYUs>NJs8U&rUtBO}$>g_5k7?83gSskqP5Kv-g84&zxAp7a0 zcr`W*0R)B+h&EIg`j!vw-IMY-2pwmJ+h-&rI`{v&3{$bb)&fvlMoD?JYTtcOmx(y^!44b=jPH!1|lIUwV1TpSjh>DuR5F0W@LBfr`0$X zU;3UWSyYkhEueo@Kp%UVed1ET^}XcWp@orBtZ7>~s$EV`UYm;|79;7M@JkL2?Ulqo z%NEQQ4zq+iczxvF$&^xI*4V&kmqf6N=kroZ>f?#Mc*Tr1S*t*TO}0cntE_swr&A^D zLf{qG3iSat$6dl@J&TTYejHThWN$Q6)|K$|-@R=OEi!ufjBl6A+RDV~mg%iIcP{;Y zrxo5BiNcf@?za6qJ@Bk!Ok?mQjh@GKNSzavxlx*{t45BiohA4W(yLBLn7ibS$3DZxh;_nx5Les`Le33s=Zp-;}zHl4uUhevq$_pTr5*~P3U*C z=JV(>yDeA=L3sClmGsH*x+F?QK;cP6X&4FVhT+}; zYXR6}h8~880eFLk4h#XXYbgLDUjyKn1%S@Z>*XLD{7akuAf08)Scd& z;sH?9kTVWk$ks)Jt{alNh24cdb$*%;Cwzk~j;z0u zx-!UIkg94Z9I`AMu~2Cy97|9;oX}|aa>u3xw_*+BcG1eTN1v$ZE$wu*XlvY%Sue%f zo$H+cH4|5|*A#7p=(*RvqWIoNl1Os$=(G;5Ofa)XaIxG;bg?uEX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N_>q$gG zRCt{2+OcaCK^O(__s!e}EH?4HTMx8|9Fj&z>wl3-EK?-^fLs|{!A`q$_NMSk5d=lh zRuBy~xrpwm>>(U#&dcrX%vcB(B2F^9xg_|0_3ZHYn4K-&0z^baL_|bHL`44;@hw#Z_70w}=36i=3|cD<)LS(SvjS;1D;@SI z5R1VEaKI#@e!3k4#8T z?;Vg&_F+wg$D5x4v5*t`22An^tf~FV2@A-H`%n=P5fKp)5fKp)5fPnoH`4{bTuO zz<-Ly!dZi@dy9DZ^a^@kMtJ_{*`fCdI{`MVi?7mnl;eD3gr)WnNn;PD2rEN_1|TY| zi?7l&|Bm+`6TEuc#JjYCC^A9&gq;9){QnG$$75)%@Z`l3lnBIxoq(V_U^4xqi&wMn v;(Kw1s9!*aa}YPcSJ|6+1|lLl?S2B$O%llU#<9#p00000NkvXXu0mjfA0)7{ literal 3083 zcmeHJdsvKV8^7n&94e_M$C#87rBuUW(}zS!1-%%>_xe5W{T$xsxqtV4Klk;f zE?eSd$Qj2007H?tryqXL*MX&n+f!ki9|Le4)~^z65Q(M%3y%Sez+eLjbf92O2cQh; zx(;QSPNmR*hNpL7(6FvstJ_y^m~Qr7*R7*ahxXZxb?SRPpN%_MSnnS606l?`J_|() z@j<%7af4*A09bl@Og#pR$z-zGERF%!&_G|`V62I$5qH8k-oy#x%*`z(J4~^#w6`)h zxBYCY{R}5QpU;~zXWndQR|glqvu+a#o6R=RHyC4RIL3LB`6TC07IXoOSvs3&6ic8Q zQ)tE%bOm_WP6p+j3{lY$rO_FBOctA?j~7&o1nemql}=+Y=yW`rfaig3%rKecPp|ULTUDRB ze?Z4e$MX*vV)kFWj4>}Nolc`Ob-XClSRHX=I%ATPo{76JbKPcBOXoxu*WE?y7q3<@piyw}XvQFbesZsE4)t$fAG|GL zss*Hpv=TvnLdGkZ;Q4ohvMQq7sgDRy$_a7}f+ylT)lbDIzO0<*x==iBS$g{K?UB>l zIzoJfX1BH_3c1TDA4L59WGxQ?TP!1*Y8zCM*}e5U%@On@Wnn0fEA?`%6Vh zqeI}t6IPCCwmv?wn=6mJRyq~r?(K5Dkh|9w-hIZWew@km4N6sB{GiR;Wz1V*mY~B0 zL4-h+7gzbGnL$m8WHLmcx{M&)f8Qnqy{{2a$-|xafct{|=;Pz&8;2uz5Ig#1wL`B$>4SPfIK{Y|k0i9r5X{Cj0YV^8Ru`l<@Q+_E%V zq0+kWw(FX(!m0D*2@(d^H^BVq$5@}E7Ca-gmf4XAQU$HGO=V=z)=1g8!Q||k0sqki zp?dAu7dR_aU3R=()>`Phx-Q+a|KQ!O6AtBf(@&^sAK?p9G$Lx4b^Jc=gb~m$cK~z!_FC+hbUQ;h256ut|9O4+oFQ2^+cW^L9;hTUf0I{Q0Z2AZTkef6o~{uN_*%vmE+k?X_l0D{%z#o zrst*FI~DQl`x(xf0PBXIDjNd(BjWjI;=(TX9gw{Isi~^yI>}dvwU#`5uTuB4lFc1N z1JCj6M^d?YXKeSHwt8uQ2EH)ZGhr)?(gaExE(r)UOG>oc5o8hMV?uQ}_N(R>!815T z{@VnksCbXx@%)u3dD8PcZVI{nw|KL-zC!pEn3d%a4fR^)z`dDfF8lcr|J+^lYTBtI zHT!ook@gA6H?W~LgKAunPKV$E74o=*xP(Jpz$BLtDl=t~+0#Y46(&3Gd{ zpOOXP{K?&G_d`$8$AtXYu7Pw z-y+1@Z!ti;4gNt)0T{qTySf0j%m8??7GQ2B!04#s5?@z5p%=W!%M;%O{N&W+AHpN- zDDTzL0Q#mnP~hnCF?f&}BU&tEb~D)~O#Xr=8_cl(oRXB3=K;f}#ptPs-~c{Q@u7Yt9oeZmnr8xKs6v3A=RafSa(@7Ohx zxH;?W`FnF&bzXypWvbWir1|X|tjvifRE= z^&x)gcEhf=p-*s|>2G)LWKC6;cerFD z=TL`4KC^raKhVT3a&TMhnidj=4t7ZZa<11xU7_!dqHoVl P)!8KyF7Yh(Sex`8W6G^) diff --git a/Resources/Textures/Objects/Specific/Chapel/communistmanifesto.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/communistmanifesto.rsi/meta.json index c0dd9096bc..2240b862c6 100644 --- a/Resources/Textures/Objects/Specific/Chapel/communistmanifesto.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Chapel/communistmanifesto.rsi/meta.json @@ -1,23 +1,22 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Originally drawn by @Trosling (Discord)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Sprites created by Davyei (Discord) for Spacestation 14.", + "size": { + "x": 32, + "y": 32 }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } - diff --git a/Resources/Textures/Objects/Specific/Chapel/honk.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/honk.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..caa8572835007acde512fb1549122f9402afff03 GIT binary patch literal 1084 zcmV-C1jGA@P)EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0(nV9K~z|U?Uv7L6G0rsKU>l?#$;=31F@x0JZ!zG z2Yawy6lw`pq<0Us_2Q}6tI$KCe?XDq#b1bb4~n1>Do9ZpJa|x=6oSyQEwss`*`$q0 z>3Z07P3&%W6LT{UmSJYT`+aZTcXoE5g%d+oY%Cn%^H>EQ zlAr$j~xBiL6nFNIFkO}^Cg%yQgPz*cdSurGo-3b0;z8i$gK+Rj-DFkeheRP_$s z)9WHn4m>?}zRf9t9P0)ocV4_>K9R9wXLKHHn>2>bjzx7vqGaayj zC}aTm_IZ`t*B@BM=px%Z0aNXNtev@I95Ny+5Lx4MwG&|n_a&%czO0($qL4vk1ux&v z)tkn>04a6G+;AT+M>)}En05nr=)Z7;ygJ?u97|B0tgL$p4Gj|ToCL63c|GJfIq;@$ zhESW2urGp=m;^xm^aa3l!V1ZOCu|ir5eG#Se}CfwM%QL*?kxHJT>>7z(K#s9275E+ zQLH2;Q2@{#|AvkZDE@x)elV7Z*#}q14_6=dMM&=cMDh3YOIvG9fZ+g@)!^!2Q4$ko zyi&Oj?B^4W32?H{Eq=t)TwI)$IJeN0d@Z!lRQv`u-QMLm%LPpU0000EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0s2WqK~#90?bY4nev&oXL+a zKA#uxz2kSsfBF9a5fKp)5fKp)kw?W@M4F`<0e~c&b0CQ*3i0ZE$E1JvjJrMnyg2<} z)*jheu}U5n_^ttRC1n2SmS1PLY0*BJ-DdvimRt!3{o?}9idB;~0A#E}zV9Q*0==6q z{B9r4jhS?v8-w5Npm&o&&>1|(lF3^#0qU(yOzm%=kz0i~e*qYMBNFiDFVM)XVrqW_ z_0}es*tB6b03=viT)^@~4(*nQ_U<0wY$o6w(caxdyX9edB8R2L1rT-9Nf&oHxIvB(bE0A|()-RZRok|YLcb_Cd*0j|&J_vEX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0z*keK~#90?b@+x6JZzz@aIi(Z72;2HP%5WI3!9H zx>s;21a1F-HiBJR=u&VrL+KE8>)_Bu1fhfN(4mE{c5-bgZR{k$YJ#SfkmSm>N$y^U zfFOu>UXCQ-^P9i#yN8$WZn*~_A|fIpA|fIp`mc!Ff`jC;8b%*P1gZ*=)|NYm&s_I* z%JIFI3gB11K(p;7mNd3=sX9~Fr#YzZCiQ4EtARZr07s)))!k$(-%MR&JD0kjSn`xH z;@{3R> zfW!e(2UyE5VsLW-x#%p4<0nv$chr3VqA0AcqmVCRx<87k$q6WWYXS-fQz?vJ97 zFQTxz4iRq?@N`dx=hL_`aue~nG#tlZohg9+p*g{>Yo%#CF~vM+CInE0QQs1D(}8& z_0gGjt25w87+0>^*myI7CyyWEe(Hg*b9@azd!RF5o!4=F=p2b#WyFU}*iC2)B(Dyf>+noW+vJei3@cu&rArXk}?*_Q`1OCKm{@xjY zC?Za{qn&|IvF|XxHX-Fch?Y>1-s~3BYy#YX+uL$Nkc;*aB^>EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N|a!Eu% zR9J=WmCbM4WE{soj-5D7TE|YD_qyz*-Pi;Z6KS>eu+vT;p$%yljtDOMEB0q_;6Io& zZU~7BXrgQ)0#VS=mUMJU-{!cr+ca6?B{qjFX4AH$tw0>u@8rk!^ZdTg=l2HxcN31f z@zO%c2Y+xJ8-V2pD@QtO?51;P&!SGo{NdW!Zwu;V%r_Qg06J!mO4%Zz>FhR}FP*o1 z@7~DsL*oPtof(TV=~)qaU0+f}I%bdhQkO=x4?sK?Tj$<=d()~uYABaB^0aewoYJ>PXj!k-27pRmiBt@iA?FWf^C;^uiO1`lu;}Jp(g#sEKv&XlM zRevgF3&*j^<)`ro1(dFzU&NVF`Sip*S_ULV97*7{UlZ|(8;L}e>G!61wEURl8JX>s zCLt-t+8-AAf`Ou_Oy~1#Zmuy`(%E>pgERev6Ki3<-1q^f?$X|Ek1Www61cQb@~@v? z3^H6*HHycz;HJ6!G=d;7Q!F9~0`u=L(0{1*nJeius(o&`ztYU0)z z2A|EJ8F_m~^#N7YsFW?{N;*q79}l`zT;P$bJ2|Uk35CpQhB9Ck9eAADObv{zS z@`DxO9Qaf57_y|2D?z1fkb=lq9qwBgf_xFQmqfj8BC>)=eIS_%d({N~3&7x48A%7By@TAj0 zjzmZ(3i7k{L^K-EIE;-QMhQ*Fs##=nMF5T&267}45J)Hr8C|FAx`%eoK?x*N833~B zbbxwyZ;y#+^o4b&`*-K-^+r#@p^YV=sVbAP7*Sb9lB588LQw(&!*wJa=6>ZqnwC0{ za}JXO0KV_zx-O<=5ebI_=YOVU;kqt&f4YODh}ib_zaya2?G6%9mS3m>S(byIFzlYy zht+>xKvRe+~YpAr(oRLUmFRE7^PUlwlPy&iiI7jNv1{de{k Xm;?WgFior*00000NkvXXu0mjfYR&aH delta 802 zcmV+-1Ks?!47di6BYyw^b5ch_0olnce*gdg1ZP1_K>z@;j|==^1poj5AY({UO#lFT zCIA3{ga82g0001h=l}q9FaQARU;qF*m;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^ z000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2k8e04Kf;%!G9`E0007fNkl zKS&#K6vsbz%|WdVWO3+r33ibdTrDkb3Jxw28tJ77B8Ac|2X%;34q73u1u0HBG=;hf zx=FFwicoN==x=gy354>iBwV`q`*G)=dNo(NtWOwmDgCQ+oJLzc=>wy5YOmA@w(OEtShU;-zvKAp}AQR;txYdOr>iv9r0} z83-dBb;a|j`91(8*QMmTG@DH=JIDQh!hjG09FS5XrGKR8I9KZ(A0?ZDisxx#D*D+% z0VyS)H#fCjrkVl3&gOpJROmN4U}tkY9eU2%>9RI1rDV2H&^nf7F_X_TFfb6gD~^wP zuYvGKYQB$@63enMO_Pm!osD`O(=@Rx3n?Wv->2ldu~|*UY}Eju=s0vb9RPwL&@2Q& zpqVH-4u7Mgqcoe%WV*o4=0;R+*L3da%2k|9^lG0^7F9WHMS7W=BoQPz~JO+1@(q zDFqXgQ{C_EM)C`=Qmsb%eW_dy?*LT;7I4-R0}rML^*mplU%xi;s}QFPOm2ZV#*>_c z06ab$=f(Lh7<=+8B5Qp8a^-m_qqVTzTKhKY8e3ObULzTTdkInPNxkuvM3t^zkSB23G(St~uaB#sB~S07*qoM6N<$g7=GDvH$=8 diff --git a/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/inhand-left.png index 4be96c20708ae8c27935918c37a6dd1f9e314b89..f27ffd7038ef853dc3024beaac17f91b4ce9d3ff 100644 GIT binary patch delta 937 zcmV;a16KUu7rqCOBYy#YX+uL$Nkc;*aB^>EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N_`$OT>1bk3$j!C9!1 z;LycIh#(as#KeS?J2>vVJfB0GAX0=TKcWZU&vwg~cRzUV4etvO5fKp)5fKp)UD`o& z&;0HCe}866gt%8NJblnGUvFJQKkA{LdT?7c(`k2=L_W@kdVBL8c0P>o_+>{dS7ZR4 zc2}iMZ4iA#G){2rPY|6Z64AK-@UGePONhn^`sks5T_kp)AQ5uV+%xsmgAOVH06i^Z z7Hp%@s;#sY8m*d{1>4Zm@>y(mb@S`fPd%D-l~&X6*{)D;p{*sF7~%}vFaA+ zw7Y75YZp3k&vIiMC$p-=k{3h<005aYgt9E?(4bgya1;(ia*x6RiX{g+G*Fg>%o&R0 z&WQ~`7gM-?3|KY_O2G)-1I7Rar2xx@>&MW=R3`YG$RP*-pL*jT)jL<5$q)uVGsIDp zNq^*yzYI(qg~})!UKyCYPjYj`5)ly*5fKp)5fKp)txU3iAoeu2PV+v(lf%Q62O;(} zwobqI5mqJEv{zg`j%5#`P=LfpKBoR77;00000 LNkvXXu0mjf3XrSx literal 3041 zcmeHJYgAKL7Tz}x^5CIJqKJqh5J6PRLqSC%kO;v+4blp=yo`d6iUNxGzzb-#P%Xt5 z*f15rSF0j|h;4^PKv6)9wN?dcL8_vTAc!Uel6&S{t<~vrtr_RX{OZp7?%ijfopbj0 z-FBfTDsX<+q%88p>tr)rE6jm zV}M~!FwF^c9!B9h*~ANbNrfiLWU-AnTpr&TCzKBctQ3>MVzSvR7M@MT^T0A^53zOi zHL{S$aKo;%tWb3w1GqZN?+P!CQZr;8x3yTgO zI(+2l*WZ+uoi0C9arWEqs%y?)sJ(cpuKwCj*MGio^Hx*yo%Y}E-n-xN;Nhd5r@haf zYqWj3ewr7}^Oe11_9tHEm=}Y^VzM|iFM_d_CT`AR+qxPJ@s)F85-i5JrE>*-IR{Qv z@$B3~x`hi9f8-Cf_qgNGLsNUf?7t(H@jo&9gV<|c&0xYL@WW%8gBWyFmSX|qFZ@Y^ zC+Zq+@^Tac2i3sT4t?;Q{e1zO8mL@NwwTnHHC4nndwtu`Ye_8eHx_!Il(j`j-aw!Pr2P5EaGlwNlq*S{B=Q;xd<^6cd^la^P^@%vEtGh~L6OQqwiDKna;ei6VQ~+-Q@r=~WF?b@l zDDHoLAA#_MPlF++x9fIC@!nB3M+sKLSB6**EN2v7$Xr zUyY#iBvls{lC}MAZq5#`qgQ0>tW5>-1xi{bn=&#+#1iTh5 zDz6&rW>$~&SFL!8pnXAEEP3yTqnof%m{ zPLl^RrJ`H7hT0eXK=;I7`2T1yKNSIAO%>wKn1G<^=LM~hnjNSAo3=}>FR69S)>J-P z>>x~bl1U@-BZSuxRFA+19A|Uz2`{1sxAv0=E{P3$;+|)vUN%(vbWD&6KBzq)70e~x z5uEED_^B^U*+4~-ZQ>jM=$+jcp+VqIjkSrqOg5ZJ%12Pq8Ce;+x^voNo46+%8~Z40 z#c-{*IAz}7eZo$Zf4jxjG4aBR6KbcvT}AkGB8c6Dps{yjYg^0qkF`GKRr8N-j6sm+ zVyHmSyyo8X(+dla?#_Kcq?7rM1*QlrQk2vXmr?|UsrxUrBADRWbvrxe^F8Trf2+OiP4}N-1ZrBGJue0S zXcI{x0e(bN-FOlYSaH6=z5u7PjrB2XJRYqG3<(BUFT#J}wgB|wP}&24HSYmDiUydP z2QX|^{&#Y3JYlqOR)7SY0Ri;X=WN3f-m1XxBmiRz8U%cqZ;6AP)v{nI=OKq@ZfSCm zikIRFWHO0wXi9Tuv+Jyy8J4v@q<__%x$Po95yyAc*PoenX_$f21ix5k1s(}qDmtK4 zwtdkSd7<3jT;l2bi}%&`f@{*MI=}WYBl$tcZrXPCw(LAtb9=+eM1M2MD?1!in;c!z zF}5;qa(CpQjB2uXXvO`m^oi#><#87@DI;6bD=pI|Mc0HJdW_@4v4ZnIuu#W9b3~MfXwGVy2`^0VOh*gbR zj=a kh~M?i1%-_f63NzHw%a7x>J93aAgnXUq_ZW(e$g5K0;P^ervLx| diff --git a/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/inhand-right.png index bdf1c5e363c1997dd91da08825b8a5d7e66a6b3a..d345671051727aeccf2beee4c01df701c0bdffe6 100644 GIT binary patch delta 935 zcmV;Y16cgB7`z9NBYy#YX+uL$Nkc;*aB^>EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^ zVhXiV5EZf1Cc z!(vwBzCX)nY&bed3NWQ-?How!z{F-QD|inG=t?QO8;x>q*-Lc^v3BOv?Z{T46(QL9m(5>(zIP4LdfhvQ|Jr+=E?5B-^Pc&kZOqW}N_`AI}U zRCt{2+P!bnKo|z_=i;v@B#j~xw;)(yVPK4iAQB4;5=d>Q%-y4|{1cHFnY$ICj*JYc zI&@$pEEHNP)Jh17Q`c^DJqFZ;O7S%@kps_fvwSB%dUbam-UEn;h=_=Yh=_=;Slg(o zNzaSSjDH)@Xx3EqM+w-ds{4gUSowU6y&DJfNp}sepEuO^d&}tfyV!oSCv@k<4t)0F zp(?mp_+E&Dn+1StePCWLSLJ0+-wW}6=VNTn%%qo%W=%!CB_;cL0Dv46QIE>0+yeEe z3^^zQ0AxRp@t}l8vlg3kVga^VZLwOqD`e;(XMe9i1}65$l~k^P{c!~{Fn{L^9lTt+ zjjdLDwiN&X?|yz&R@R0bDhR{Cx!p}Hbdt{PE`(t~4i&7djh*44*1XsP00J2y0KnNjqdPO>%}`*ggXN|rYgYO;WsS8odF$F zo&kT{8OX?_bIr|E1@O8@I310kgb6o)0U+;SypX>@A|m?V{Q^;ivnMS8Qn>&C002ov JPDHLkV1mtZt^)u7 literal 3122 zcmeHJc~p~E7QZ2ZEP#lFiVPS8(a2^=plnKHiLw-HprFElf>jEgiU=Yi^uq-iabYMT zC^@3IprWE8i(&!6qG$zNijXK#5Cc{k0yb>P_xi=9?aUlI%b7F(%-rw%-n;j{ciwxy z``&%u+qq=%B3*_t0|0b=eY^vSdVv}=EuuUf6W;~Euvxv#ca5*F70?JDz$5~6z<~lJ zLQ?}sZ*;Xm`i-tZA_JLdPA5Pnbah|#xLUu_4d3eOek6@IS$~0Oq*h$$22u&O*b_*F)^EI zH`~nI#=^ve?KH>cLwg4Y2i9zt`Ochqc3cOJdJqzwPS?@aG1ApF;><9a!TFa3)q_4w zy(Tir95nPvWPK944lH7wnxxnAhKiafnWCvhrO_GMM2CvWKtzhHK_P2uQYb`g8qp3E zea$H|>^-y$1d&wpcqV5{&Jmi0=Y?yAfp-UIa--I7r87R5YBbH*a@K7294iOMkDQ!c zT)n*c3m5tL`UQO&9I|xT^3YYEtzHxTc}#3V;)bM+$(vHPZO_<|`RAQkU+3=2+n--> z;9&95W5-XFoIG{*9P{QX zIqcF4etuRjyZg?S;FBfe7=oKTRo?msM*_K{%k72HgBeUg$T9(+3GYSth|-!jz6-&# zDg@ENaj7K5{31D5Qo|c+G-~3BMo#V97u<2&(l9ALacKYoTBeGJJ)4W)64vUqD(kRk zEc{ma__yxQzY>|YL}ang?(uxLm$gUA@=ISB!yUXC!3hMTQUnoaM4@TYRSQ;bR*fFoQYphVNbZ+9xWD%R>nfS^&g#$aG7FhQo7>FB>M39Z(r&1|{ zO@0*j(p}t(53l(S!K4HsmJv&YD<5kn;@Dlgsrc)xfZA?>Z)F-wbr!+LJUIfqA{pCx zmDn-*)K2WKd+W0}1p5m|*4{XO!>_)$pyAyvy{FbYilCydKNII6Xg@j;h8JKx2vo6S z4OuYqhY7vPG3;t*Ij>PDWjzh8%*R$shSombJ6d+=^JB%ian<_*zbwRO$(@ulSFA?h zJ;BSV!$ad9*Gz9Twbsa*vs+E`|M(Ba;ID1~*5D2V_lYy$L0l!JtTRDBt{&(gaf!9Q zba9X>c0zEybSXf#nu5%FZm;9qs@^|-k zjbw+2r>IgC$&_W*w{YFg76kGA>LY(mHns;7>#0r!u}@js`&s#Ycl@N%Zi1SRz#yCZ z71k>zt{d@4nU`EoS%cNr9S?tyD61O7z8O+Pk0uCvB%-nqZi%b#?&g?P(;9-F?-KiK zG6msU(%TPyCzs!s>y_+Z$QA`|PQ80?IW`Ze*}9 z?TpT!wrXEY4EoV_l0)bAjDfiYX_2(zfb%J4QO5a{Z5(G?FWceA2U4pfC8jdj{NzKM zlgqA}nZFgzQch*M3&VXOo&3bo;e=A69V!k>fvEI}T_piwUFDh!=@3@G*MjvuHLEwZ z!a2bCi?l+So8!IS)V!|qZX3D^N4WK_q>_hs%34~?;|}I%*lpQj;rJL@>+|sVceAML zA=})f#&JB0Y6G$!RkV0l-jp`#ey>$Y;js%o`cl48noS>UA4p^jR6CyOHKz9T1|OD+ zD92(Kr1gycWzuZIJ!kz7q2zmAdTeFt$zJ1@A`*7ROz!_Q@4(sxOn#*gcA_=CtssR< kn`N7yzEri0?|t30C`&xQx>%xHK?E0k`HQ{Jd9K|0Gx1o;fB*mh diff --git a/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/meta.json index c0dd9096bc..2240b862c6 100644 --- a/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Chapel/mysteryofthedruids.rsi/meta.json @@ -1,23 +1,22 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Originally drawn by @Trosling (Discord)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Sprites created by Davyei (Discord) for Spacestation 14.", + "size": { + "x": 32, + "y": 32 }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] } - diff --git a/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0e294639fa9e12afe627b5fc9f04df6a768d78b4 GIT binary patch literal 826 zcmV-A1I7G_P)Px%^hrcPR9J=WmOp3{Q5?rVms~H2Nj(LP^l~+72n77s$#P4<#i0(;p<5NH&?Vp| zNa>&;F1pxBglf@l9i$)~G8oA0&?<$>VKp`l*ajtf*EVgF=g?kg71Nh4F8OZv-tYb1 z_x--V`@RP)w9vwThH}t_Q;(8j_xH6s_JMM#vVo&RhKMJ__096OOEy;q;N~skFH*9E zqzM3wj}_}=vbi$n62bcT)T5;E<~>3(@HIoAiTmRZ32U{@y5g+oh1nVB5Ax zCX)yAn}LCWJtr6)GDKf0EC#y|i+6Vs=SPHCTovNoUBqDbVbPZgi_sxNG|JIb1uV+~ z5SI?UC7uj3K31gUR5+?1;?oQi{CRpG#(A+5UvesBbLF~eP0n^>Sr!u$6aU~?epcK!zZ8MKR9FCbM&xW%S^9nwWmo+S z{VS1xzivc;lo?5Pr|18suHuXM2x>ljy9lhV*Qhx)3gswqo(hInI)G*BE($Y zVBwp|mz7RFd^SiVLd-0=l$;8A+m+7Q)NR<`8wDVnD|4j>R+cKXX$nViIf#(;gD?@t`~MdUT+9|T%xp@pXL8)$EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0?tW9K~#90?b^XhlW`o!@z1l(shdm4V~ht2OHi=3 zrLMV^P!~a@OV@S@!m&dKAH-YGLFO?BJH?J2^DppVG@F~Qp{0z72dPL8&e`L$o^8*s zLk#RT_k4+p@9PhE@5h(lp6Bp<0mc|(j4{R-V~jDz&TVCBK&&hch=1|792AkGLj#3v z7gBMr$YkpXjyjMnn0T@FS)%9zz@vyP{39k-R~@)Md`guC*#XmvEV9K;7}YAe-ER1Y zP7zJ0miuW%7O%5FcTX3z$|)k_Hj-|WjUtjvCPh^@p;eCYaPj~r+WLg%B#iXikLXv=21urD&*B9zo zEOzd_0g?fH^n9bpv@EU2Vq?dKyOBC7WdpuJ4R5v@ZS4(^450WjN0Dh+RW}h1;J1B* jTQ~mfgP1YK{tG_=DjO!uBeOJs00000NkvXXu0mjffE^X( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfac241cd5c5d6cc79d08718b788a3c47c34ec1 GIT binary patch literal 1247 zcmV<51R(o~P)EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0~|?2K~#90?b^?4(_k0}@bBBS-Rztb>%2$_Dw_j` z$~vp1`{6)A1|nWO2@X%P(u0Cw=t=M}x}yseMCjF<`v)9sXy?}Mhd7-S*}~N6Ca&ui z)1^&b4>AxBO}o}^%JVseB=4JV9^Sl{JOCkt5JCtcgb+dqA$biAH1MH;2ENldepgB+ zyVVUh+YfW!X&YkWIrx2c3=i9Jy7|Ypg8nV5D>|m%xDW|>cw)we$0G_Wbgbo#QAy;9 zSr;@_g|oUEzLT5i2^ao=N{LD$9~m=Iv(E)>BZD>{3d(8AcTtvQp3zLKr&e*JYZ+>K z4H?aZEX%v<6WGdW|(mSgi4z-a12XTXN>SQ>+N7vd8t{N5Z?Q7UKtlBuGE z^KEv-CsYjDT^Nt0aj~l!MpK{VSj%rD67ulGtbo1yoLFDmL~FB&TaOlZ-5wALd3gMd z4YhSu*huT}o-hi^nRf+5C6UJxIRsic(kUI6yPb%?W{67SuG#~llE}wr7%q1^kxuCd zv~t7}MnO6A761VJUORfi3TyXqT)CTMZD$!Wnpw8+<&e=#bevDXP{7)KSr!XLLNRj?Z)bgUY{R(_rP~@sp35YpO=?0uPl~4PthwtmSr9ZdHC(C$NA`kYVL6I9qAb`nSi?e2A)0< zapQV7+Aei&Yo4MDAk6h6@vaKTjsU$`4M#jWIBzLMtFDiTvf1ftDr}>6DHO9XU+Q+A7{N z@S*lAly3`o`|&##Ru-_d`K2-sj!Ghrggkuf_|J2M5JLVTKLK;~M~78b8f*Xn002ov JPDHLkV1mp|IL`n8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/meta.json new file mode 100644 index 0000000000..2240b862c6 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Chapel/ratvartablet.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Sprites created by Davyei (Discord) for Spacestation 14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92a2b5e1388a6e3dc5ee006983f624c868a518b3 GIT binary patch literal 738 zcmV<80v-K{P)Px%oJmAMR9J=WmcMJ%U>L_g$)!o&KOAyN?<~E%Cj|%ZyW}PBljr+=zE7UK zfe9w~$IyxbK7M$^+S0ouj3VWvyITpa&~Zfxap&7ejzR&qF5gVTDB|GLeT?!Atjf%A zg7fE2efDsFfs3=>M{*cN0>UW5D3!Q(cMsSb8N0I?=9SyGx9NCsQTk#58EjJ&#w^8V9$P?(n1=7uv~4`y9NH7HO!o{)i{ds7La7BV z5zl++y5akXSe_uy_RIlS&P>3IUcib|0btds<{~okRi~QoZG=hw+?8vU!rWs`fvf3= zShDI=dDT72NkuGiwX~LY6oO%JxW7O*Fbgt{F$DlMQ9iW=HIcr6YuBq>nsJzaX0r2I zj>z^G0Z2%tI#b?GKl&4_Dsqi-Ns9UL!%z?UXBVx&VAgMW3=&AoVj3t16rLVe2 zxSEdD_ijCqbdoqF{{y>Q30EJSp#b`GZv`y^>-Zxx)$@j8b~ZzT)=ykf+~KhVgnfJU zM9b>z6}*O)qM&tV%J#1pg_11E;(S UVd}PAEdT%j07*qoM6N<$f}@yVFaQ7m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc27ac3c5cdd5f5dfca92bab6d7f762cfd275fc GIT binary patch literal 863 zcmV-l1EBngP)EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0h~!hK~#90?b@+Q!%!H-@pF?<1(g<@bkM=2tAfzM z!9@pMbny*DoE$_tb}q%)>PvLgv4gH6PA(2E3W8`&a%0ovUIz)-Zq|=V@cbU&Px6s1 z2OuIMA|fIpA|m=%lvL=URklaR3s8;&YYpBzZ@9R<66 zP@jX=?{GaAFcxtVi*(l(m#s?2VPhBmM}Yl$Nu--`%;B;0z^n`~psG5z4V5-KQk# z>l&vk(#^;nAWfl^Lc^bdQVKG!4_KhTt5Tuz7qJ60YtQ)50dy2141IKUDAMg}jYx-x zv_^^$C)F2`E)fwC5fKp)5fKp)5#_~0t88~xHh=vGPHbo}YFm|ct91m|b8&v%9{N4R z1`?z9ZI7_DY9o`NeRKKaLkJEeMr&}7;F#e$xjn$(9>ET|N67C12KETU4ia*EfM)F( pIt~!_G=exlH_?CnNJK=GJD)@grku=?*h&BZ002ovPDHLkV1oG*enS8N literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..98151112f46bc1bd7fc21723f213efb2cceca9a9 GIT binary patch literal 869 zcmV-r1DgDaP)EX>4Tx04R}tkvT{MQ4~ebOw@=Pf*3@^VhXiV5EZf1C)8X(u4eRS3Nt}1XVpik6Kg(xqI66oQFr{bh97yZH#AYrl zcn=8ZN!0-992l~ru@#UWg|1cjO>m;jvX~jLmm)JD2LL5e$66ihN!tW@9OySp%K$lA zVMB01u$j*5)pv>wJ2tH4MWF+IgqUN2FbW!ZQl!Z-ObQDHhX^5p4g9@jf0#TPX;SDY z%#y)GE&CCF@H<;4J~mpJ)DeW{7uWq50PhZzimv;8?7F2B@I1qnRr6<#VDb|@#hTWC z2>va&xUOm1E?jOy&r?>l)w1LPjj{=kx)V3NU{I`v)+X0RLKp zy<6*Z`?sf>-w*wna(JsrRigj^0isDnK~#90?b^Fa13?%C;4_=BF%eC`$}|=>!9qk3 z0;UL7UMd^kKzsm^l-3fgy}U%MEc68e7PdAPX(9+gLv}Z}-TCdrAh<&=y210+bKvkZ zQ_T+$5fKp)5fKp){VOW$!1n5<%%?L@%7SQ(^6@j4_Mbv?zpYlu$;tUL9KV6vYSp-3 z=)tX(4N2H3z)}eO0I5_GH`Tky4PZB)7wIHEdrGW>`^SgSo>tfav24InD5dL&#bYKj z`x6T~G0;=@ZKGW104%L=q?(wU?c-415CnQ0eaG%y?17%y_>57`;06e;B#mav#x*j~ z+8;;XvC~#}py!LO{80JC;&~sh5ZVO)9MaOe+ zdHOnf+X=WRH4wl>+w#0Yr9Z vz{F5DpzC{ZdJf#a2d@|1odF^uqMv;LKis6Q6KP-400000NkvXXu0mjfLDhyQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/meta.json new file mode 100644 index 0000000000..2240b862c6 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Chapel/tomeofnarsie.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Sprites created by Davyei (Discord) for Spacestation 14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 2212b690e0bda304eaa869574a6e04c1fab5ceeb Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 07:40:45 +0000 Subject: [PATCH 044/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index afc2085f83..74e3a22e24 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Samuka - changes: - - message: Holy water now evaporates. - type: Fix - id: 8530 - time: '2025-05-19T16:14:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37611 - author: aada changes: - message: Pepper makes you cough. @@ -3955,3 +3948,10 @@ id: 9037 time: '2025-10-07T00:59:20.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40009 +- author: Huaqas, Davyei + changes: + - message: 3 new Holy Books have been added to the Chaplain's loadout. + type: Add + id: 9038 + time: '2025-10-07T07:39:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39181 From b9f2fd4e6738a63d5af624f967246e75fddc5966 Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:43:54 +0200 Subject: [PATCH 045/216] Replace all time requirements with bats (#40751) time requirement format update --- .../Loadouts/Jobs/Cargo/quartermaster.yml | 4 +-- .../Loadouts/Jobs/Civilian/janitor.yml | 2 +- .../Loadouts/Jobs/Civilian/passenger.yml | 4 +-- .../Loadouts/Jobs/Command/captain.yml | 2 +- .../Jobs/Command/head_of_personnel.yml | 4 +-- .../Jobs/Engineering/chief_engineer.yml | 2 +- .../Jobs/Engineering/station_engineer.yml | 6 ++-- .../Jobs/Medical/chief_medical_officer.yml | 2 +- .../Loadouts/Jobs/Medical/medical_doctor.yml | 8 ++--- .../Jobs/Science/research_director.yml | 2 +- .../Loadouts/Jobs/Science/scientist.yml | 2 +- .../Jobs/Security/head_of_security.yml | 2 +- .../Jobs/Security/security_officer.yml | 8 ++--- .../Loadouts/Miscellaneous/glasses.yml | 6 ++-- .../Loadouts/Miscellaneous/trinkets.yml | 34 +++++++++---------- Resources/Prototypes/Roles/Antags/nukeops.yml | 10 +++--- .../Prototypes/Roles/Antags/revolutionary.yml | 2 +- Resources/Prototypes/Roles/Antags/thief.yml | 2 +- Resources/Prototypes/Roles/Antags/traitor.yml | 4 +-- Resources/Prototypes/Roles/Antags/wizard.yml | 2 +- Resources/Prototypes/Roles/Antags/zombie.yml | 2 +- .../Roles/Jobs/Cargo/quartermaster.yml | 6 ++-- .../Roles/Jobs/Cargo/salvage_specialist.yml | 2 +- .../Roles/Jobs/Civilian/bartender.yml | 2 +- .../Prototypes/Roles/Jobs/Civilian/chef.yml | 2 +- .../Prototypes/Roles/Jobs/Civilian/lawyer.yml | 2 +- .../Prototypes/Roles/Jobs/Civilian/mime.yml | 2 +- .../Roles/Jobs/Civilian/service_worker.yml | 2 +- .../Prototypes/Roles/Jobs/Command/captain.yml | 10 +++--- .../Roles/Jobs/Command/head_of_personnel.yml | 10 +++--- .../Engineering/atmospheric_technician.yml | 2 +- .../Roles/Jobs/Engineering/chief_engineer.yml | 6 ++-- .../Jobs/Engineering/station_engineer.yml | 2 +- .../Jobs/Engineering/technical_assistant.yml | 4 +-- .../Prototypes/Roles/Jobs/Medical/chemist.yml | 2 +- .../Jobs/Medical/chief_medical_officer.yml | 6 ++-- .../Roles/Jobs/Medical/medical_doctor.yml | 2 +- .../Roles/Jobs/Medical/medical_intern.yml | 2 +- .../Roles/Jobs/Medical/paramedic.yml | 2 +- .../Prototypes/Roles/Jobs/Science/borg.yml | 4 +-- .../Roles/Jobs/Science/research_assistant.yml | 2 +- .../Roles/Jobs/Science/research_director.yml | 4 +-- .../Roles/Jobs/Science/scientist.yml | 2 +- .../Roles/Jobs/Security/detective.yml | 2 +- .../Roles/Jobs/Security/head_of_security.yml | 8 ++--- .../Roles/Jobs/Security/security_cadet.yml | 4 +-- .../Roles/Jobs/Security/security_officer.yml | 2 +- .../Prototypes/Roles/Jobs/Security/warden.yml | 4 +-- .../Roles/requirement_overrides.yml | 8 ++--- 49 files changed, 108 insertions(+), 108 deletions(-) diff --git a/Resources/Prototypes/Loadouts/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Loadouts/Jobs/Cargo/quartermaster.yml index 60fc1834fb..602b2d36fd 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Cargo/quartermaster.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobQuartermaster - time: 72000 #20 hrs + time: 20h # Jumpsuit - type: loadout @@ -53,7 +53,7 @@ - type: loadout id: QuartermasterMantle - equipment: + equipment: neck: ClothingNeckMantleQM effects: - !type:GroupLoadoutEffect diff --git a/Resources/Prototypes/Loadouts/Jobs/Civilian/janitor.yml b/Resources/Prototypes/Loadouts/Jobs/Civilian/janitor.yml index d9c4faed8c..d902481f9c 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Civilian/janitor.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Civilian/janitor.yml @@ -5,7 +5,7 @@ requirement: !type:RoleTimeRequirement role: JobJanitor - time: 187200 #52 hrs (1 hour per week for 1 year) + time: 52h # 1 hour per week for 1 year # Head - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Civilian/passenger.yml b/Resources/Prototypes/Loadouts/Jobs/Civilian/passenger.yml index edb9c8d1fc..1ed5e8aca0 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Civilian/passenger.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Civilian/passenger.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobPassenger - time: 36000 #10 hrs, silly reward for people who play passenger a lot + time: 10h # silly reward for people who play passenger a lot # Head of Greytide (for grey mantle) - type: loadoutEffectGroup @@ -16,7 +16,7 @@ requirement: !type:RoleTimeRequirement role: JobPassenger - time: 72000 #20 hrs, fun mantle for the most experienced greytiders + time: 20h # fun mantle for the most experienced greytiders # Face - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml index 9043354a31..2951678968 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Command/captain.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobCaptain - time: 72000 #20 hrs + time: 20h # Jumpsuit - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml index 45223bea14..17a84b7386 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Command/head_of_personnel.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobHeadOfPersonnel - time: 72000 #20 hrs + time: 20h # Professional HoP Time - type: loadoutEffectGroup @@ -16,7 +16,7 @@ requirement: !type:RoleTimeRequirement role: JobHeadOfPersonnel - time: 54000 #15 hrs, special reward for HoP mains + time: 15h # special reward for HoP mains # Jumpsuit - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml index 13b72e0af4..55f184a168 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/chief_engineer.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobChiefEngineer - time: 72000 #20 hrs + time: 20h # Jumpsuit - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Engineering/station_engineer.yml b/Resources/Prototypes/Loadouts/Jobs/Engineering/station_engineer.yml index 82955fccfb..64bfe79a4d 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Engineering/station_engineer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Engineering/station_engineer.yml @@ -6,17 +6,17 @@ requirement: !type:RoleTimeRequirement role: JobAtmosphericTechnician - time: 21600 #6 hrs + time: 6h - !type:JobRequirementLoadoutEffect requirement: !type:RoleTimeRequirement role: JobStationEngineer - time: 21600 #6 hrs + time: 6h - !type:JobRequirementLoadoutEffect requirement: !type:DepartmentTimeRequirement department: Engineering - time: 216000 # 60 hrs + time: 60h # Head - type: startingGear diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/chief_medical_officer.yml index 43bbc42f46..1444247083 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/chief_medical_officer.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobChiefMedicalOfficer - time: 72000 #20 hrs + time: 20h # Jumpsuit - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Loadouts/Jobs/Medical/medical_doctor.yml index 3b43df4d4b..b5e5cc10e8 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Medical/medical_doctor.yml @@ -6,17 +6,17 @@ requirement: !type:RoleTimeRequirement role: JobChemist - time: 21600 #6 hrs + time: 6h - !type:JobRequirementLoadoutEffect requirement: !type:RoleTimeRequirement role: JobMedicalDoctor - time: 21600 #6 hrs + time: 6h - !type:JobRequirementLoadoutEffect requirement: !type:DepartmentTimeRequirement department: Medical - time: 216000 # 60 hrs + time: 60h # Other Timers @@ -27,7 +27,7 @@ requirement: !type:RoleTimeRequirement role: JobMedicalDoctor - time: 108000 #30 hrs + time: 30h # Head diff --git a/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml b/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml index 2e607aca69..3717c1c67c 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Science/research_director.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobResearchDirector - time: 72000 #20 hrs + time: 20h # Head - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Science/scientist.yml b/Resources/Prototypes/Loadouts/Jobs/Science/scientist.yml index e89802e9c1..080015f0da 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Science/scientist.yml @@ -6,7 +6,7 @@ requirement: !type:DepartmentTimeRequirement department: Science - time: 216000 #60 hrs + time: 60h # Head - type: startingGear diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml index 1f40d5e044..e85e1c8ccb 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobHeadOfSecurity - time: 72000 #20 hrs + time: 20h # Jumpsuit - type: loadout diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml b/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml index 6cc0dedf72..482e3ab896 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml @@ -6,12 +6,12 @@ requirement: !type:RoleTimeRequirement role: JobWarden - time: 21600 #6 hrs + time: 6h - !type:JobRequirementLoadoutEffect requirement: !type:DepartmentTimeRequirement department: Security - time: 216000 # 60 hrs + time: 60h #Security Star - type: loadoutEffectGroup @@ -21,7 +21,7 @@ requirement: !type:DepartmentTimeRequirement department: Security - time: 360000 #100 hrs + time: 100h # Head - type: loadout @@ -67,7 +67,7 @@ - type: loadout id: TrooperUniform - equipment: + equipment: jumpsuit: ClothingUniformSecurityTrooper - type: loadout diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml b/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml index 1ff3f1533e..8a474d359a 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml @@ -6,7 +6,7 @@ requirement: !type:RoleTimeRequirement role: JobLibrarian - time: 3600 # 1 hour of being the biggest nerd on the station + time: 1h # for being the biggest nerd on the station - type: loadoutEffectGroup id: JensenTimer @@ -15,7 +15,7 @@ requirement: !type:DepartmentTimeRequirement department: Cargo - time: 36000 #10 hours of being a space trucker + time: 10h # 10 hours of being a space trucker # Basic options # Glasses @@ -41,4 +41,4 @@ - !type:GroupLoadoutEffect proto: JensenTimer equipment: - eyes: ClothingEyesGlassesJensen \ No newline at end of file + eyes: ClothingEyesGlassesJensen diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index ccaf3abe42..ad58f9c58d 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -6,7 +6,7 @@ requirement: !type:DepartmentTimeRequirement department: Command - time: 3600 # 1 hour + time: 1h # Flowers - type: loadout @@ -308,7 +308,7 @@ - !type:JobRequirementLoadoutEffect requirement: !type:OverallPlaytimeRequirement - time: 36000 # 10hr + time: 10h storage: back: - TowelColorWhite @@ -320,7 +320,7 @@ - !type:JobRequirementLoadoutEffect requirement: !type:OverallPlaytimeRequirement - time: 1800000 # 500hr + time: 500h storage: back: - TowelColorSilver @@ -332,7 +332,7 @@ - !type:JobRequirementLoadoutEffect requirement: !type:OverallPlaytimeRequirement - time: 3600000 # 1000hr + time: 1000h storage: back: - TowelColorGold @@ -345,7 +345,7 @@ requirement: !type:DepartmentTimeRequirement department: Cargo - time: 360000 # 100hr + time: 100h storage: back: - TowelColorLightBrown @@ -358,7 +358,7 @@ requirement: !type:DepartmentTimeRequirement department: Civilian - time: 360000 # 100hr + time: 100h storage: back: - TowelColorGreen @@ -371,7 +371,7 @@ requirement: !type:DepartmentTimeRequirement department: Command - time: 360000 # 100hr + time: 100h storage: back: - TowelColorDarkBlue @@ -384,7 +384,7 @@ requirement: !type:DepartmentTimeRequirement department: Engineering - time: 360000 # 100hr + time: 100h storage: back: - TowelColorOrange @@ -397,7 +397,7 @@ requirement: !type:DepartmentTimeRequirement department: Medical - time: 360000 # 100hr + time: 100h storage: back: - TowelColorLightBlue @@ -410,7 +410,7 @@ requirement: !type:DepartmentTimeRequirement department: Science - time: 360000 # 100hr + time: 100h storage: back: - TowelColorPurple @@ -423,7 +423,7 @@ requirement: !type:DepartmentTimeRequirement department: Security - time: 360000 # 100hr + time: 100h storage: back: - TowelColorRed @@ -436,7 +436,7 @@ requirement: !type:RoleTimeRequirement role: JobPassenger - time: 360000 # 100hr + time: 100h storage: back: - TowelColorGray @@ -449,7 +449,7 @@ requirement: !type:RoleTimeRequirement role: JobChaplain - time: 360000 # 100hr + time: 100h storage: back: - TowelColorBlack @@ -462,7 +462,7 @@ requirement: !type:RoleTimeRequirement role: JobLibrarian - time: 360000 # 100hr + time: 100h storage: back: - TowelColorDarkGreen @@ -475,7 +475,7 @@ requirement: !type:RoleTimeRequirement role: JobLawyer - time: 360000 # 100hr + time: 100h storage: back: - TowelColorMaroon @@ -488,7 +488,7 @@ requirement: !type:RoleTimeRequirement role: JobClown - time: 360000 # 100hr + time: 100h storage: back: - TowelColorYellow @@ -501,7 +501,7 @@ requirement: !type:RoleTimeRequirement role: JobMime - time: 360000 # 100hr + time: 100h storage: back: - TowelColorMime diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index 5e464c1116..e2018b91a6 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -6,7 +6,7 @@ objective: roles-antag-nuclear-operative-objective requirements: - !type:OverallPlaytimeRequirement - time: 18000 # 5h + time: 5h guides: [ NuclearOperatives ] - type: antag @@ -17,10 +17,10 @@ objective: roles-antag-nuclear-operative-agent-objective requirements: - !type:OverallPlaytimeRequirement - time: 18000 # 5h + time: 5h - !type:RoleTimeRequirement role: JobChemist - time: 10800 # 3h + time: 3h guides: [ NuclearOperatives ] - type: antag @@ -31,10 +31,10 @@ objective: roles-antag-nuclear-operative-commander-objective requirements: - !type:OverallPlaytimeRequirement - time: 18000 # 5h + time: 5h - !type:DepartmentTimeRequirement department: Security - time: 18000 # 5h + time: 5h # should be changed to nukie playtime when thats tracked (wyci) guides: [ NuclearOperatives ] diff --git a/Resources/Prototypes/Roles/Antags/revolutionary.yml b/Resources/Prototypes/Roles/Antags/revolutionary.yml index eeef73b2d5..172876040a 100644 --- a/Resources/Prototypes/Roles/Antags/revolutionary.yml +++ b/Resources/Prototypes/Roles/Antags/revolutionary.yml @@ -7,7 +7,7 @@ guides: [ Revolutionaries ] requirements: - !type:OverallPlaytimeRequirement - time: 3600 # 1h + time: 1h - type: antag id: Rev diff --git a/Resources/Prototypes/Roles/Antags/thief.yml b/Resources/Prototypes/Roles/Antags/thief.yml index 4b333ac495..740a7e217f 100644 --- a/Resources/Prototypes/Roles/Antags/thief.yml +++ b/Resources/Prototypes/Roles/Antags/thief.yml @@ -7,7 +7,7 @@ guides: [ Thieves ] requirements: - !type:OverallPlaytimeRequirement - time: 3600 # 1h + time: 1h - type: startingGear id: ThiefGear diff --git a/Resources/Prototypes/Roles/Antags/traitor.yml b/Resources/Prototypes/Roles/Antags/traitor.yml index 572adea1e4..edc130ef8b 100644 --- a/Resources/Prototypes/Roles/Antags/traitor.yml +++ b/Resources/Prototypes/Roles/Antags/traitor.yml @@ -7,7 +7,7 @@ guides: [ Traitors ] requirements: - !type:OverallPlaytimeRequirement - time: 3600 # 1h + time: 1h - type: antag id: TraitorSleeper @@ -18,7 +18,7 @@ guides: [ Traitors ] requirements: - !type:OverallPlaytimeRequirement - time: 3600 # 1h + time: 1h # Syndicate Operative Outfit - Monkey - type: startingGear diff --git a/Resources/Prototypes/Roles/Antags/wizard.yml b/Resources/Prototypes/Roles/Antags/wizard.yml index 0ddf90ef2b..8ef9bda367 100644 --- a/Resources/Prototypes/Roles/Antags/wizard.yml +++ b/Resources/Prototypes/Roles/Antags/wizard.yml @@ -13,7 +13,7 @@ objective: roles-antag-wizard-objective # TODO: maybe give random objs and stationary ones from AntagObjectives and AntagRandomObjectives requirements: # I hate time locked roles but this should be enough time for someone to be acclimated - !type:OverallPlaytimeRequirement - time: 18000 # 5h + time: 5h guides: [ Wizard ] # See wizard_startinggear for wiz start gear options diff --git a/Resources/Prototypes/Roles/Antags/zombie.yml b/Resources/Prototypes/Roles/Antags/zombie.yml index 4629e6b509..fa6561aa5e 100644 --- a/Resources/Prototypes/Roles/Antags/zombie.yml +++ b/Resources/Prototypes/Roles/Antags/zombie.yml @@ -7,7 +7,7 @@ guides: [ Zombies ] requirements: - !type:OverallPlaytimeRequirement - time: 3600 # 1h + time: 1h - type: antag id: Zombie diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 5a62c1dc8e..92b9b93671 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -6,13 +6,13 @@ requirements: - !type:RoleTimeRequirement role: JobCargoTechnician - time: 18000 #5 hrs + time: 5h - !type:RoleTimeRequirement role: JobSalvageSpecialist - time: 9000 #2.5 hrs + time: 2.5h - !type:DepartmentTimeRequirement department: Cargo - time: 36000 #10 hours + time: 10h weight: 10 startingGear: QuartermasterGear icon: "JobIconQuarterMaster" diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml b/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml index 9bab10529b..7756f8dde9 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Cargo - time: 9000 # 2.5 hrs + time: 2.5h icon: "JobIconShaftMiner" startingGear: SalvageSpecialistGear supervisors: job-supervisors-qm diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml index 8881fb0d41..2d32b87f68 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/bartender.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Civilian - time: 1800 #0.5 hr + time: 0.5h startingGear: BartenderGear icon: "JobIconBartender" supervisors: job-supervisors-hop diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml index fd3941d4e0..734f22597c 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/chef.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Civilian - time: 1800 #0.5 hr + time: 0.5h startingGear: ChefGear icon: "JobIconChef" supervisors: job-supervisors-hop diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml index 81c8b71050..11f07252a3 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml @@ -5,7 +5,7 @@ playTimeTracker: JobLawyer requirements: - !type:OverallPlaytimeRequirement - time: 9000 # 2.5 hrs + time: 2.5h startingGear: LawyerGear icon: "JobIconLawyer" supervisors: job-supervisors-hop diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml index 293df524e9..8ff045173d 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/mime.yml @@ -5,7 +5,7 @@ playTimeTracker: JobMime requirements: - !type:OverallPlaytimeRequirement - time: 14400 #4 hrs + time: 4h startingGear: MimeGear icon: "JobIconMime" supervisors: job-supervisors-hop diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml index f98dac80ed..0c83971827 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Civilian - time: 1800 #0.5 hr + time: 0.5h startingGear: ServiceWorkerGear icon: "JobIconServiceWorker" supervisors: job-supervisors-service diff --git a/Resources/Prototypes/Roles/Jobs/Command/captain.yml b/Resources/Prototypes/Roles/Jobs/Command/captain.yml index fa02e160a8..54251b263b 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/captain.yml @@ -6,19 +6,19 @@ requirements: - !type:DepartmentTimeRequirement department: Engineering - time: 14400 # 4 hours + time: 4h - !type:DepartmentTimeRequirement department: Medical - time: 14400 # 4 hours + time: 4h - !type:DepartmentTimeRequirement department: Science - time: 14400 # 4 hours + time: 4h - !type:DepartmentTimeRequirement department: Security - time: 14400 # 4 hours + time: 4h - !type:DepartmentTimeRequirement department: Command - time: 14400 # 4 hours + time: 4h weight: 20 startingGear: CaptainGear icon: "JobIconCaptain" diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index ac052e5cdf..4dfafb97d1 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -6,19 +6,19 @@ requirements: - !type:DepartmentTimeRequirement department: Engineering - time: 9000 # 2.5 hours + time: 2.5h - !type:DepartmentTimeRequirement department: Medical - time: 9000 # 2.5 hours + time: 2.5h - !type:DepartmentTimeRequirement department: Science - time: 9000 # 2.5 hrs + time: 2.5h - !type:DepartmentTimeRequirement department: Security - time: 9000 # 2.5 hrs + time: 2.5h - !type:DepartmentTimeRequirement department: Command - time: 9000 # 2.5 hours + time: 2.5h weight: 20 startingGear: HoPGear icon: "JobIconHeadOfPersonnel" diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml index 5dda67f25d..20a6dc7ace 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Engineering - time: 9000 #2.5 hrs + time: 2.5h startingGear: AtmosphericTechnicianGear icon: "JobIconAtmosphericTechnician" supervisors: job-supervisors-ce diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index 264e31a3ae..561d026020 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -6,13 +6,13 @@ requirements: - !type:RoleTimeRequirement role: JobAtmosphericTechnician - time: 9000 #2.5 hrs + time: 2.5h - !type:RoleTimeRequirement role: JobStationEngineer - time: 18000 #5 hrs + time: 5h - !type:DepartmentTimeRequirement department: Engineering - time: 36000 #10 hrs + time: 10h weight: 10 startingGear: ChiefEngineerGear icon: "JobIconChiefEngineer" diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml index c67e3067cb..c99140b095 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Engineering - time: 9000 #2.5 hrs + time: 2.5h startingGear: StationEngineerGear icon: "JobIconStationEngineer" supervisors: job-supervisors-ce diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml b/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml index 24cef50e1a..afc0182c0f 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml @@ -5,10 +5,10 @@ playTimeTracker: JobTechnicalAssistant requirements: - !type:OverallPlaytimeRequirement - time: 3600 #1 hr + time: 1h - !type:DepartmentTimeRequirement department: Engineering - time: 18000 #5 hrs + time: 5h inverted: true # stop playing intern if you're good at engineering! startingGear: TechnicalAssistantGear icon: "JobIconTechnicalAssistant" diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml b/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml index e14fbd5b84..784ba81403 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chemist.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Medical - time: 18000 #5 hrs + time: 5h startingGear: ChemistGear icon: "JobIconChemist" supervisors: job-supervisors-cmo diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index b6698091df..f67041a713 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -8,13 +8,13 @@ requirements: - !type:RoleTimeRequirement role: JobChemist - time: 9000 #2.5 hrs + time: 2.5h - !type:RoleTimeRequirement role: JobMedicalDoctor - time: 18000 #5 hrs + time: 5h - !type:DepartmentTimeRequirement department: Medical - time: 36000 #10 hrs + time: 10h weight: 10 startingGear: CMOGear icon: "JobIconChiefMedicalOfficer" diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml index 4b43df2004..a41e95d400 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_doctor.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Medical - time: 9000 #2.5 hrs + time: 2.5h startingGear: DoctorGear icon: "JobIconMedicalDoctor" supervisors: job-supervisors-cmo diff --git a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml index d313d12d9b..0517d318e1 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Medical - time: 18000 # 5 hrs + time: 5h inverted: true # stop playing intern if you're good at med! startingGear: MedicalInternGear icon: "JobIconMedicalIntern" diff --git a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml index 5526e63f24..da71ac0367 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Medical - time: 9000 #2.5 hrs + time: 2.5h startingGear: ParamedicGear icon: "JobIconParamedic" supervisors: job-supervisors-cmo diff --git a/Resources/Prototypes/Roles/Jobs/Science/borg.yml b/Resources/Prototypes/Roles/Jobs/Science/borg.yml index 84ded8ed48..da84441e31 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/borg.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/borg.yml @@ -8,7 +8,7 @@ requirements: - !type:RoleTimeRequirement role: JobBorg - time: 18000 # 5 hrs + time: 5h canBeAntag: false icon: JobIconStationAi supervisors: job-supervisors-rd @@ -23,7 +23,7 @@ playTimeTracker: JobBorg requirements: - !type:OverallPlaytimeRequirement - time: 36000 # 10 hrs + time: 10h canBeAntag: false icon: JobIconBorg supervisors: job-supervisors-rd diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml b/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml index e824368cb7..96b95c3d58 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_assistant.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Science - time: 18000 #5 hrs + time: 5h inverted: true # stop playing intern if you're good at science! startingGear: ResearchAssistantGear icon: "JobIconResearchAssistant" diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index da41d9f3e0..a7b057dc1b 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -6,10 +6,10 @@ requirements: - !type:RoleTimeRequirement role: JobScientist - time: 18000 #5 hrs + time: 5h - !type:DepartmentTimeRequirement department: Science - time: 36000 #10 hrs + time: 10h weight: 10 startingGear: ResearchDirectorGear icon: "JobIconResearchDirector" diff --git a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml index e2e31f8dcf..5e8e1b6e14 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Science - time: 9000 #2.5 hrs + time: 2.5h startingGear: ScientistGear icon: "JobIconScientist" supervisors: job-supervisors-rd diff --git a/Resources/Prototypes/Roles/Jobs/Security/detective.yml b/Resources/Prototypes/Roles/Jobs/Security/detective.yml index e5c9fdf2dc..f59e1bf836 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/detective.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/detective.yml @@ -6,7 +6,7 @@ requirements: - !type:RoleTimeRequirement role: JobSecurityOfficer - time: 18000 #5 hrs + time: 5h startingGear: DetectiveGear icon: "JobIconDetective" supervisors: job-supervisors-hos diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index 7db7429263..1f73f48988 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -6,16 +6,16 @@ requirements: - !type:RoleTimeRequirement role: JobWarden - time: 3600 #1 hr + time: 1h - !type:RoleTimeRequirement role: JobDetective - time: 3600 #1 hr, knowing how to use the tools is important + time: 1h # knowing how to use the tools is important - !type:RoleTimeRequirement role: JobSecurityOfficer - time: 18000 #5 hrs + time: 5h - !type:DepartmentTimeRequirement department: Security - time: 36000 # 10 hrs + time: 10h weight: 10 startingGear: HoSGear icon: "JobIconHeadOfSecurity" diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml index cac79f4822..8dc5815fcf 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_cadet.yml @@ -5,10 +5,10 @@ playTimeTracker: JobSecurityCadet requirements: - !type:OverallPlaytimeRequirement - time: 36000 #10 hrs + time: 10h - !type:DepartmentTimeRequirement department: Security - time: 18000 #5 hrs + time: 5h inverted: true # stop playing intern if you're good at security! startingGear: SecurityCadetGear icon: "JobIconSecurityCadet" diff --git a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml index 432c6b0d3c..141801e4ff 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/security_officer.yml @@ -6,7 +6,7 @@ requirements: - !type:DepartmentTimeRequirement department: Security - time: 9000 #2.5 hrs + time: 2.5h startingGear: SecurityOfficerGear icon: "JobIconSecurityOfficer" supervisors: job-supervisors-hos diff --git a/Resources/Prototypes/Roles/Jobs/Security/warden.yml b/Resources/Prototypes/Roles/Jobs/Security/warden.yml index 42964ee134..566b0da6d1 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/warden.yml @@ -6,10 +6,10 @@ requirements: - !type:RoleTimeRequirement role: JobSecurityOfficer - time: 18000 #5 hrs + time: 5h - !type:DepartmentTimeRequirement department: Security - time: 36000 #10 hrs + time: 10h weight: 5 startingGear: WardenGear icon: "JobIconWarden" diff --git a/Resources/Prototypes/Roles/requirement_overrides.yml b/Resources/Prototypes/Roles/requirement_overrides.yml index 62041f42d7..752249e90b 100644 --- a/Resources/Prototypes/Roles/requirement_overrides.yml +++ b/Resources/Prototypes/Roles/requirement_overrides.yml @@ -4,13 +4,13 @@ Captain: - !type:DepartmentTimeRequirement department: Engineering - time: 3600 # 1 hours + time: 1h - !type:DepartmentTimeRequirement department: Medical - time: 3600 # 1 hours + time: 1h - !type:DepartmentTimeRequirement department: Security - time: 3600 # 1 hours + time: 1h - !type:DepartmentTimeRequirement department: Command - time: 3600 # 1 hour + time: 1h From 0bb1ede5ee112dcdd00afde8c1a0432378a83e6d Mon Sep 17 00:00:00 2001 From: Huaqas Date: Tue, 7 Oct 2025 17:04:05 +0800 Subject: [PATCH 046/216] Remove the Tanakh and Satanic Bible from the game. (#39698) * Remove the Tanakh and Satanic Bible from the game. * Update migration.yml * Renamed to Space Bible --------- Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> --- .../Objects/Specific/Chapel/bibles.yml | 24 +----------------- .../Loadouts/Jobs/Civilian/chaplain.yml | 14 +--------- .../Prototypes/Loadouts/loadout_groups.yml | 2 -- .../Specific/Chapel/satanicbible.rsi/icon.png | Bin 366 -> 0 bytes .../Chapel/satanicbible.rsi/inhand-left.png | Bin 314 -> 0 bytes .../Chapel/satanicbible.rsi/inhand-right.png | Bin 2806 -> 0 bytes .../Chapel/satanicbible.rsi/meta.json | 23 ----------------- .../Specific/Chapel/tanakh.rsi/icon.png | Bin 3027 -> 0 bytes .../Chapel/tanakh.rsi/inhand-left.png | Bin 2967 -> 0 bytes .../Chapel/tanakh.rsi/inhand-right.png | Bin 2951 -> 0 bytes .../Specific/Chapel/tanakh.rsi/meta.json | 23 ----------------- Resources/migration.yml | 4 +++ 12 files changed, 6 insertions(+), 84 deletions(-) delete mode 100644 Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/icon.png delete mode 100644 Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/meta.json delete mode 100644 Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/icon.png delete mode 100644 Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/inhand-left.png delete mode 100644 Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/inhand-right.png delete mode 100644 Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/meta.json diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index 9016bce6cb..1545594b11 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -1,5 +1,5 @@ - type: entity - name: bible + name: space bible description: New Interstellar Version 2340. parent: BaseStorageItem id: Bible @@ -95,17 +95,6 @@ - type: InstantAction event: !type:SummonActionEvent -- type: entity - parent: Bible - name: tanakh - description: "For God's chosen crewmembers" - id: BibleTanakh - components: - - type: Sprite - sprite: Objects/Specific/Chapel/tanakh.rsi - - type: Item - sprite: Objects/Specific/Chapel/tanakh.rsi - - type: entity id: BibleDruid name: druidic tablet @@ -128,17 +117,6 @@ - type: Item sprite: Objects/Specific/Chapel/communistmanifesto.rsi -- type: entity - parent: Bible - name: satanic bible - description: "What could possibly go wrong?" - id: BibleSatanic - components: - - type: Sprite - sprite: Objects/Specific/Chapel/satanicbible.rsi - - type: Item - sprite: Objects/Specific/Chapel/satanicbible.rsi - - type: entity id: BibleNarsie name: tome of nar'sie diff --git a/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml b/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml index 4f501057b2..0bfc99d41f 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Civilian/chaplain.yml @@ -132,19 +132,7 @@ storage: back: - BibleNanoTrasen - -- type: loadout - id: BibleSatanic - storage: - back: - - BibleSatanic - -- type: loadout - id: BibleTanakh - storage: - back: - - BibleTanakh - + - type: loadout id: BibleNarsie storage: diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 79266b70ec..085fcb5bbf 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -383,8 +383,6 @@ - Bible - BibleNanoTrasen - BibleDruid - - BibleSatanic - - BibleTanakh - BibleHonk - BibleRatvar - BibleNarsie diff --git a/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/icon.png deleted file mode 100644 index 2c0a574d58afd9436bff22363673eae4dd32694d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP)C_j_gyOiWyvV62l%Y1~@GNn*Qs0st%*G%MdfJf5vNn*hnI)4y+D)WF~b z(8TBxFKJK7WWckbm+S=8)Ty=644m3`^Czf7=m@8zDR{|B zAQe1j$b&h7L*bOZWJZCc2;h21%GcXkVEB!j643cB$<8#S?`e$(a}VfJYLo zB3Bb0n{zetFIVvpp*~zw;Njyl;(0!wUCqF9!MoS}{`*qCcGjpVY*4FCWD M07*qoM6N<$f;>*4Bme*a diff --git a/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/inhand-left.png deleted file mode 100644 index 1e6043fb41e806d0b1812a3d25d621fa8f56c9bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}W@kaSW-L^Y)gZ*AWMiV;|4E z26y^?Iw_QM#Epg3KjE>W&Nr@mN6sCpvTZ9D;Lg73HtlG`)KG!>SG)AgcB}O@|Bs(8 z`Rwstc12e=CZMT6P?xe_M}1rJ`c?0CpRv|CJzMWnRl4=O{Pl;*{v6%o+HB`ke25`P ze1a773(fBfAMZKd_ZgxONPc*~W~p96WcPQLvU6tUDtkR|P5M$)ZdvIYbR&PGtYYii z4YKOu?9Hz~{>a!@U$bxbyiNP=)yg?|7_NG4v38Zj)vw2Y8CBl=FE@Yd+BVmPk+;{C z*!^ZaGh1HlsMqt&b@AJBZGD%=&znB=Z}mdK II;Vst07EH;lmGw# diff --git a/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/inhand-right.png deleted file mode 100644 index 60aba34bbbb01803a70b22334bb4849b4d7db692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2806 zcmeHJdsvKF7=ORHPnWH!sm5#?rIgz;Ny)OKG}UOu%x0)va@i>CCZQA!En!4k%IM-r z*(hzSOGerZQVFZoQYuNPuxwPCnwjR?^SSK$W1qFRXaDk^=XcI~-t(UK{eJKHZrf)1 z`xqN=4FJGckzjR0UTbz*|O zp_4E&kkRr61TxYIUm`B;4c+3EPWWM@mvIu1PI{%EeVG*HCK`SdzXPVzyhYw95s@5q zcoR$o28~9iQ5kePoylYv7_p6w3=NG2nVFlg2XlEggSpn$L+n3r9AYW4bBeOsN{d&36KGHj&8uZK{N58K(7btPKQ1w{$ zc^3|CThdi=oxKTs<@3Xq>OKKC&Av(AY+RAIvWP7X7?LY@g14f~{OoNS4x4J8;P8yE zbAi_DH|x5 zH#%0w+YvkCY)gNVtVyN6e#Da4{M|uapiVV3a2=~ZEi_kt>*DLZe>VQxxWBA3erBaN zts#n4_#}H7QLKBH8;(b59o?HXv#nfiuW3@A>2 z-U;8TdYZ6arFRHkt_@b;Fve!y51Fb4_p6F&6+&e}SrV+pB zrImR>|Ku1Ne;hyNap#G+jw{`+I9T!%wXt=hgO2G1=MRV_(uJu3Y3T)#tw)Zd2gt9v zRM1t!t1HcHv6h7`$6;HPqOC*!X@`52_M;n{3w>189h~NYk!}Mr?F8MjovF=1e%YVm zklwTQ%-n=L`Cg9aHEC_k3Cb)Cm5B+-UMI5!d@Qf`Eits+Gp8XdDT__bv zpBlYIKUZ}pxHdPd&0UhJRPWR+=I-Y1{%D6q=#h|+zULD(PPt{~_u~KV>$50O#%rAw zy6?Rt|Lbw*+T(t{(vozylAj$OQ;GxAWMCo=_h;yfBYLFf<&vzDZ;B^><{Fh$E(r*| zenNWba{Zz4OMCa{52!8=)GLk)DzZ9kZr`{n4mu^Q7X7l58=Z0Dp?_j<>4$TpP8Mp= zBR7jfWs9f$AK>8)p$>lN0}oiF#K#kBs2(Ll6Uq{g=^g+_lMHnWsAxW9k*{PrK+G`o z8nK3h4hDXrkNc#s-n~dnI4F|JOZK{pEUB9mQP`CYE2#+OPXQ&sP=R>^VWUN z>G<%J#=}oW+!@(tP$C>_7atHdijnEITT7xFCy0CHo6yS!vi zfWJ3GlcNa$V2FIY0^!pHhXw`SqvPU+0HDRJ3Kp#viTFSR>HyG&pn)+!0tl3F0AyUo zUy#pa0zw2txSa$+gfec6`=xv)vwoLxJA^RqCk@Jk-{pbvL*d!@rM|Cz1ay7pi{`_F z@WbIv{R{8}8WakZLe`*CsWh5~rWTW-MW<^S>Ko`VjXB&Y#vCIf6ASC5k5GZ0A|q+1uhy5E_l9Mb~087;IZpBU9Tyz0?KZUM`dAG}y{g*>h8e8EVU}y#!v`N+A7u~A&HFim?tb3b&*LU8imrH1;WtVl zcibYq<^2BQ2zgHNvG;S|KTQ9it7;v0!Ax9}xZ{-?q;O?}E`{>UXU}}!Ssx>g)P@wl zHrC?vuygxDF_Z@;0I{M}A}y14ky*=8N-$R1=r)O0G88~Y`AQ}dj>?4~xI__IatDU@ z&bszA^nc^xM|n>FmT)I_kXX3Ys7}ZXKqde+Oj=SVE4wCWE-953v&BM50X;|};}M!! z(y{@tz@5TU)XRmu(N`Dh5CL-}3g*$ zL>#xl&=LNVt1Dc}ZoYUh+P~I6-+9={mxt9_4C@??kcZ2S7;kvF{_5I;}X)LCAS%ZyO$OIDrxi5jtN~3gk zU}yXL1aJD9x}CS3`+HHV!?LLc=_bMsp4|1gF40Qx@uH+VITs$f;Ep6D z7WRqzqhmW2&m|Bm)nH?{D)0WjRJ0V=I&=)E-7)|89r6e@m66BU=9$9LWZ+bkt0p^au z^eEzqmcH`EV@OEZPQ5p4a9R9X*df`;??YzXdww|vAH5fjDgWW)pT0pI1Zp^_RSS|FtMQML7^u;}c? zH86r4k(YZ=@TCFi1;0yf?D+NaE?G%TMXsUjWb8GregKI|*Xz0UgssbG@_+u`D??jb z+xpkb*AojotM6*Z-mN>~>Ypo1&uA&O-zw5E9yIB?HfsH{``nC&#=7QLx#o4Afz^B8 zR1kI+jrlU_&1;X`?o@rP0|J8R9ZysnoHGm}LRa`*F}nD;PkATDb-DD+wq5B5Z>~(e zoSrq)A?KC;L-s>I7Jv1j-5GXm9XH;toX4~d)c@h+1v=SqNvZ{R{g~&6k$Po)!r21k zLdN>aD|Q==T1cb%9eE3LvNB`d$=BVRJon_(RRvAC$req$L#sj3>YMJTx<7ETGLs{B z)>pA(zQx+2HjO@75F5&24p@6C+zSKt%rYT%7*_l(Ey^-=OHSd*V_;L$MhDw@#>~-Wek-gF6omr=6d{Oh%x~h8QrqrsEa(>^aRO;KfB#YYj@tJdCX>ys@WW6L(dpn ZJtf~%9Pft7qwHbTfJo@?Rqhd*@*B_Ohb#a9 diff --git a/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/inhand-left.png deleted file mode 100644 index 94fdcc0f20eb819202eebf2a2d6e90da98005eaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2967 zcmeHJdpK0<8h__v#<)}%B~1+?qaEcEA;xWDbP$Q`Q%Y*P)+Uro43eVuW0z2!o<_Df zvXO*NF2jx_?R_2;VYh{&F}duaa+@*he3SM$p8hyb=bS(GKl@$J?_0n3``-1f_xG;# zK5M1za&=UcQ3RFb}d3lA^$|}pLYt`xN)~eHJ8rlZB8d{sy z(`XDcy-iyTO-xMay5?5fjJ6vXn;1zq!BHp_1$hNEMMX6uO`4|Be{EO;D9K85BH*+D zuY@Bg;jkv4qdaABA8b*IR49QcLn6ykDFY*V~mhs(Q2wwT%xQPo~JNT&1>JU1x(XLvN$WR#UTW<`(u2tR0R{ zZ0Fscd%V2&`h4ks_{diQfkD9$kx?g3M#sdSPC1i$_FP)}rOeA&**RCPUd#I~|5ica zUyE+vt+-cNRek?&4}N&q)cmOBaqE+g&S%fNx?lA44h#g~Jt(=)Sk z^HN<>oxjZ+QrNWhnGMa`YWm|W$U$}~vQIagx?&8hzM#_3) z525OzSHr%B3?-hKaDxuEg>&3YL9iq=2qN|f2z*NOO*QzSf8EU ziGg8;$RC4>?(@-^lKq@loQ}G}fz9Ga%<&A#-+lE5-R7b&NW#GRCwgo(@dXb)%Rea%&Cko3=r3a_En!0k(qJtN;i8vkII?G?5*#tkoZ;| z?WFL{45B7%P=igLy>`zW-6lmn7GvE*WPBo}v z-r))O7|<{nZC^Npfg5ucxxU3&=_4(954f}T903LxXkaky$@yUo3cz5FjKSSf&iA_~ z0>%Y1=E01-s;!^XAfLuq1~ShJOMe|$DD36kONg&IRoWwYANDP0)qrnhUI<5+9fQFL z21i7u{X_jVC*o7Be;wWDbB|B6WCzZ~S9*1p{J2G69_*4Al;F)3jq$%0F2s*EVlaTx zEaZvLV$fX{Bh$Cu1++~Y1{6#9$3!kjPbb$WS;T~(T94g`rdw^kpM%t^*0-j|o6t9WAhc`vKj z>*?#pP8cS$eNbcAE^Un88stBn$pN(a^mvxV+CUbz^9cLywg?889cbZGUob>-_w zclRCN@7qv%C2MdZBcx_FW4eSpxv{UBIW@^$$i833T;O)yzxIU%RnM=}^Sh8a-m{`7 zyJxR1NssDP^73aVMqauN)tv?ZFF05aT(St(MxR?;gomRYuBUYq2RXz5TNhh^@(g*g zpA7Of{GB{p0Ae?wpRW{vc{G(c0uZ$Y;LSk*iz@)D!mdAX-;NeYhjuzTpmz)%xpjq^ zXoeEz5#BJOy}R+IsY?O^K}-8sYtdjq2-}%h*s=@M84yT z>?FQpL_q%J+AuS*oEsP%`=<3WE(N%W#clf?91{3sox6^Lth9CdsK&r%xjK~E9Zdcw De%@k- diff --git a/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/inhand-right.png deleted file mode 100644 index 56c5a517f138a0ceb86f46adeea71489d4388919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2951 zcmeHJc~nzZ8ow_ISy&qgf|MFSfzYBzz(LCr14IZ&fD}P+1QBJiq9C#;g|MlB(j25U zE*udm0+yu+l2#U3M0Bua0NDpn5Rpw#XxKvD+^Eyx%=}SiPXFw8&+oq9UCzDV@4Mf9 z@1?kK>=a}*WB~vQY0i(kc6KXB_k-_2MXbc<&II@hgwlNd0 z;_6G#38m2E)3b>itxM}vxvevsOb(t%Ajz&%Q(v#4tEW#h_|$aUU(B}e_}s>pwad<) z?eK-$9(Rwuo?d>34*LfL1|11I86FWCb?S6t(wVd8l2cMIW_Uf7;R6)!ozkd}#Q^$ji}JW8-h$&d&WRnqOF4 zlIoJ`{Fl8~_8+>)P!|S=!{P{1T?i&pDx8dy(Kf~_GhGS3p(;A`cp}9*J-f7yw9$k+ zqk8Z}tL(Z>rq6ZXNTt0~wl-l2|Ch4gg#BArFObI~@bIu?zyOPqRN4*9pMWtCQAtsb z66LH4US5n~vX3!xX{ApXeIaJBvugH1*4qgbU?typn*~|Ac=lMmRG_%-lvxW@C#{rc z1Y%vrQ50~Nje070&6}5n$L7_S?-!jKO<|05NeC;ns$*@ZZwHv(WIyj2udO=oxsmuGV~Q_n@!mY-ycmvxcoaDNLTxN~D?Tr%qh3j5 zQQVW(;vv;Wtc!xnO)I4+=$UA&VxwTo{TarXcl(S$;zt!Vp&+1S-5Y)JJrvZUAU8m1 z=;>lCtN9uKNnK9rXV$B;N6BVJ&`4ci)%2i1nRhoPFF;&T( z=|2^1BKG_xbZW|tcJrcB^Yih5?q;$mF39hIkiFnI#24!f!f>WAdTZLtB;FOl zeU&STS=CD(Y6VApdN+8yuByHwF&y1465Xb7*?J=#X%%hz6H;lnv~p5u;7|O4F}Rnt zV8a_j0SdHGAadi?e~bcW6f6=@aHlY~)cGfYFz+8D`9=Imqoq?QXkskQ@qBshEs`B5 z=qmo&J?NxgD@%3b>Xcs-e`R4DE;@eqt82oe)BI@<#y$--aTTwYSEQL5J6WL@w9VfM z1;oJ>OBB3dNUEbB3Ue20?50c81{>z)i&YxDVa_K-PWimb3Y-=3nw_pijCPL}gFTR#mI%uHp@@LY(G8N0k>T;5_oNwE*_%&P&p8KoWDNvsxD+_``^?Z|wY*{k%jTo~ zl|N7MUw4rhGm>o+UIRk7bym8BFDfa2EwQ{7G2A^m9sBKzG88Bc?;A16{9$ZcPS1SD zAm@_2wS$+Y6UBA^E#Kcs{QtTbzbW=>buu?kG(XN*$?B}!=bVg!!-Mep74^XjZKMt_ z^_Pvb!tei{o6O#mHuVw(%zEy*`j*|DV%AFO3trBmmHYH!Q00!MALa^!HVuAloH|S^ zGRSXBO;Ww6=aEqfk0bufTHbVjz#J;t15Wr*qTt6C3FF#XBR!7|d9Z;CU^+1YDCNtE zePv)<%g>(c1i)!M`0JGfz!L0=dj&xFRshBi0Py)`0MtS<@3~sQ0sKKnJ6o8au-vH5 z%YZ$k5PQ!s0OVApK)}^Zb=XNb$#!B9#t4e!4f4ms-kgRWn6Yh{Zc)8cJ;sg=E|jy+ z&9d#wwG(L^W|AQ%`v!Mx$Z&gS(T{S9316}%#}6^}31j}EV_ViSL-IW{F)LV(viADh ziaAdo-^vigwp`5!X^9LwaV{?TgY8zEC`mXHyo}Gs@|EWM)6fBz)?a)5EXoEf2a&yI zhrW<2>bfo>y8zjp$OT<`VF{7E%F=xbbIjZn-H#r?KSDm6UTjEjZk=uKFJ>d%tZUOk z!t{zr%lxnAo^LM&FgWujRd>#NL?9Krqp=RG)Ybi^ZxqU^_x9SH^-&K z@*}+rLNA6!RPW3@bkeJ!bTBRj6KHxrLJ~NAW@|{GY5$lk(BjbRYqdG_@0{bgbxVC+ s!g9x8jLDnvpBZJ)&~;)31b9BS^xk5 diff --git a/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/meta.json b/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/meta.json deleted file mode 100644 index c0dd9096bc..0000000000 --- a/Resources/Textures/Objects/Specific/Chapel/tanakh.rsi/meta.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Originally drawn by @Trosling (Discord)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "icon" - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - } - ] -} - diff --git a/Resources/migration.yml b/Resources/migration.yml index 299fcfeefc..ea991259ed 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -721,3 +721,7 @@ ClothingUniformJumpsuitParamedicNT: ClothingUniformJumpsuitParamedic # 2025-08-29 PrefilledSyringe: Syringe + +# 2025-10-6 +BibleTanakh: null +BibleSatanic: null From c2c9d7c784986c54fad988e614a1bf56df49a110 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 09:15:57 +0000 Subject: [PATCH 047/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 74e3a22e24..1fa73c9c67 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: aada - changes: - - message: Pepper makes you cough. - type: Add - id: 8531 - time: '2025-05-19T18:23:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36358 - author: Entvari changes: - message: Hyper Capacity Powercells are now available as Tier 3 Industrial Research. @@ -3955,3 +3948,10 @@ id: 9038 time: '2025-10-07T07:39:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39181 +- author: Huaqas + changes: + - message: The Tanakh and Satanic bibles have been removed. + type: Remove + id: 9039 + time: '2025-10-07T09:14:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39698 From f1e5d1eb07d0cf943f8addfff21371c13a056d7c Mon Sep 17 00:00:00 2001 From: Jessica M Date: Tue, 7 Oct 2025 02:21:08 -0700 Subject: [PATCH 048/216] Let gorillas pull things (#40700) gorilla pull gorilla bring gorilla Co-authored-by: Jessica M --- Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index e6b761d515..5aedad4596 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1215,6 +1215,8 @@ true NavSmash: !type:Bool true + - type: Puller + needsHands: false - type: Prying pryPowered: true force: true From 46aa3bbc41fd583f3baee222cbfbd35bc6e55ff9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 09:32:54 +0000 Subject: [PATCH 049/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1fa73c9c67..c1cabeb390 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: Entvari - changes: - - message: Hyper Capacity Powercells are now available as Tier 3 Industrial Research. - type: Add - - message: The Tier 3 Industrial Research 'Portable Fission' has been renamed to - Optimized Microgalvanism to better reflect this. - type: Tweak - id: 8532 - time: '2025-05-19T22:35:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37619 - author: RedBookcase changes: - message: The Salvage section of the guidebook has been updated. @@ -3955,3 +3945,10 @@ id: 9039 time: '2025-10-07T09:14:49.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39698 +- author: jessicamaybe + changes: + - message: Gorillas can now pull objects. + type: Tweak + id: 9040 + time: '2025-10-07T09:31:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40700 From e1c03249fa0d73f528f8b988f00bb64530278002 Mon Sep 17 00:00:00 2001 From: Prole <172158352+Prole0@users.noreply.github.com> Date: Tue, 7 Oct 2025 02:39:51 -0700 Subject: [PATCH 050/216] Golden Plunger General Fixes & Tweaks (#40619) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Plung Plunges * C# solution replaced with yaml solution, made sprite in-line with normal plunger, & alt click works now * Update Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/meta.json Co-authored-by: āda * Chameleon Tag Added * a TODO --------- Co-authored-by: āda --- .../Objects/Specific/Janitorial/janitor.yml | 4 +++- .../Structures/Specific/Janitor/janicart.yml | 6 +----- .../janitorial_cart.rsi/cart_goldenplunger.png | Bin 650 -> 638 bytes .../Janitorial/janitorial_cart.rsi/meta.json | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index fb740f1cd6..0117ec1255 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -278,9 +278,11 @@ parent: Plunger description: A plunger with a plastic suction cup coated in a thin layer of gold given as a token of appreciation for years of service. Still used to unclog drains. components: - - type: Tag + - type: Tag # TODO change Plunger into a tool so we dont got to layer Tags like below. tags: - GoldenPlunger + - Plunger + - WhitelistChameleon - type: Sprite sprite: Objects/Specific/Janitorial/golden_plunger.rsi state: plunger diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index a24a03da3e..90893cd432 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -190,11 +190,7 @@ whitelist: tags: - Plunger - goldenplunger_slot: - name: janitorial-trolley-slot-component-slot-name-goldenplunger - whitelist: - tags: - - GoldenPlunger + - GoldenPlunger priority: 8 wetfloorsign_slot4: name: janitorial-trolley-slot-component-slot-name-sign diff --git a/Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/cart_goldenplunger.png b/Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/cart_goldenplunger.png index 13988bf1c404e5e08a76bacfcf7898b7266d582a..4829eb6c7b68a41596b505f462f9f4d6bc56f639 100644 GIT binary patch delta 613 zcmV-r0-F7b1^xt(B!7BoLqkw=Qb$4{Nkv08F*!CiEix`K001bFb&$;~1aTP0KQlw* zZ572qnuOD?7PWD4*v(tvuvXdSGCMo7tM+A@8A-0nb&C=gZwLMYuF6>{A|+SO#D#4% zyIU*S=kojXeSY7k=lOydNvj#F#t)gSZH6a<@?tb5*S#RoLVpJ%bStW5%+60ls9K-* z2=069b7xim_ir^OG)o1c9vD*%(*|J*m|3$8mv?}6HKim#I0L-qVl)QAovX)7{OWSD z#NRHPk#GpaRzObv;`lFCQ)UK4KhT>=ud3yJ+)J9Y?7}?I19V{#W|AN>(~J`$z#yXp z2;gIg0S2Lp-+y29&yhn$C5OQ}CMzUKVdF(+6$=d+9TN?WH0y5ue{;3;;i1y>rXbWl zJI;F_)NMl{?>Jvaj#D@W=?N~g6@Ts!Mm|8wSG3*(@NB~QRYi;M!o?PJJ{pRt6eS4| zbsgSLp*ad|H_)(D%B+=C{-jR#}O}f{;!Ob=Jvq7%?h>90RR91000000BlrC zd&}8c*2&5&8E`ni9tDH7EcsA&)$S5z%4JS9A{mQ_vO7VcCMp@{IQ@Sr9a6uvd}aEV_` zj+gk$WG(3Tf~8&97O&uN1uF?HB`hz;o=WDF-}{&^X^y7n0}}hhd(iRY!-I`!Ch+27 zgfW?24B=#0R)18}{qOr_E3<@$Yo9=vq>)8u)Y3qa%*!pFfOZ+H>bMVE5S0en!&)lt2L14Ok-p>jtb5fOP`^0Km)>XQD>#r2%&h00000 LNkvXXu0mjfQR*VH diff --git a/Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/meta.json b/Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/meta.json index 7e5a11d313..eda0e5aa7b 100644 --- a/Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Janitorial/janitorial_cart.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428, cart_goldenplunger modified from cart_plunger by TiniestShark (github)", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428, cart_goldenplunger modified from cart_plunger by TiniestShark (github) and tweaked by Prole0 (github)", "states": [ { "name": "cart", From ce7558f3d294ab80f503ef531999ab209da5cb52 Mon Sep 17 00:00:00 2001 From: GeneralGaws <122978178+GeneralGaws@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:49:21 +0300 Subject: [PATCH 051/216] Change Discord round restart text (#40584) * discord-notif * grammar --- Resources/Locale/en-US/discord/round-notifications.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/discord/round-notifications.ftl b/Resources/Locale/en-US/discord/round-notifications.ftl index a9a3d5fb50..ce5045452b 100644 --- a/Resources/Locale/en-US/discord/round-notifications.ftl +++ b/Resources/Locale/en-US/discord/round-notifications.ftl @@ -1,5 +1,5 @@ discord-round-notifications-new = A new round is starting! discord-round-notifications-started = Round #{$id} on map "{$map}" started. discord-round-notifications-end = Round #{$id} has ended. It lasted for {$hours} hours, {$minutes} minutes, and {$seconds} seconds. -discord-round-notifications-end-ping = <@&{$roleId}>, the server will reboot shortly! +discord-round-notifications-end-ping = <@&{$roleId}>, a new round will start soon! discord-round-notifications-unknown-map = Unknown From 84f994f296e7a88bcbf10dbce46669e61cd2ffc4 Mon Sep 17 00:00:00 2001 From: SurrealShibe <77357653+SurrealShibe@users.noreply.github.com> Date: Tue, 7 Oct 2025 03:08:00 -0700 Subject: [PATCH 052/216] Give mimes their french bread back (#40601) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add the nutri-batard * i missed this file smh * add the proper accenting to "bâtard" --- .../Catalog/Fills/Boxes/emergency.yml | 6 +- .../Objects/Consumable/Food/Baked/bread.yml | 58 ++- .../bread.rsi/batard-cotton-inhand-left.png | Bin 0 -> 338 bytes .../bread.rsi/batard-cotton-inhand-right.png | Bin 0 -> 329 bytes .../Food/Baked/bread.rsi/batard-cotton.png | Bin 0 -> 409 bytes .../Baked/bread.rsi/batard-inhand-left.png | Bin 0 -> 336 bytes .../Baked/bread.rsi/batard-inhand-right.png | Bin 0 -> 319 bytes .../Food/Baked/bread.rsi/batard.png | Bin 0 -> 238 bytes .../Consumable/Food/Baked/bread.rsi/meta.json | 332 ++++++++++-------- 9 files changed, 236 insertions(+), 160 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard.png diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml b/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml index b5b2fb90d8..29f561c1b8 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/emergency.yml @@ -213,7 +213,7 @@ - id: EmergencyOxygenTankFilled - id: EmergencyMedipen - id: Flare - - id: FoodSnackNutribrick + - id: FoodBreadNutriBatard - id: DrinkWaterBottleFull - type: entity @@ -227,7 +227,7 @@ - id: EmergencyNitrogenTankFilled - id: EmergencyMedipen - id: Flare - - id: FoodSnackNutribrick + - id: FoodBreadNutriBatard - id: DrinkWaterBottleFull - type: Sprite layers: @@ -247,7 +247,7 @@ - id: EmergencyOxygenTankFilled - id: EmergencyMedipen - id: Flare - - id: FoodSnackNutribrick + - id: FoodBreadCottonNutriBatard - id: DrinkWaterBottleFull - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index bce7ace58a..6edff6e98a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -731,7 +731,7 @@ name: crostini parent: FoodBreadSliceBase id: FoodBreadBaguetteSlice - description: Bon ap-petite! + description: Bon ap-pétite! components: - type: Sprite state: crostini @@ -753,7 +753,7 @@ parent: FoodBreadBaguetteSlice id: FoodBreadBaguetteCottonSlice name: cotton crostini - description: Bon az-zetite! + description: Bon az-zétite! components: - type: Sprite state: crostini-cotton @@ -1001,3 +1001,57 @@ damage: groups: Brute: 1 + +- type: entity + parent: FoodBreadBase + id: FoodBreadNutriBatard + name: nutri-bâtard + description: bon 'pétite! + components: + - type: Sprite + sprite: Objects/Consumable/Food/Baked/bread.rsi + state: batard + - type: Item + size: Small + storedOffset: -1,0 + heldPrefix: batard + - type: Tag + tags: + - ReptilianFood + - type: FlavorProfile + flavors: + - nutribrick + - peppery + - salty + - bread + +- type: entity + parent: FoodBreadNutriBatard + id: FoodBreadCottonNutriBatard + name: cotton nutri-bâtard + description: bon 'pétite! + components: + - type: Edible + requiresSpecialDigestion: true + - type: Sprite + sprite: Objects/Consumable/Food/Baked/bread.rsi + state: batard-cotton + - type: FlavorProfile + flavors: + - peppery + - salty + - bread + - type: Tag + tags: + - ClothMade + - type: Item + size: Small + storedOffset: -1,0 + heldPrefix: batard-cotton + - type: SolutionContainerManager + solutions: + food: + maxVol: 45 + reagents: + - ReagentId: Fiber + Quantity: 40 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ffbf40198b1391debeaefcbb05798b84fe08a8 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zc|2VlLn`LH zy``9U*g>H6;q+CLd~3Sy96EF1LeNqfm8W4l9M4bS7IAY--Ra7`_>h;H*{!B)flQb8 zb&CA_&u0*KeqGy{$v{IH7-r0ET^$fT-E&fx&E?OpXRpoM!k)fS>HL;B-K(adMb~;$ zvJa${M|?TFqW`@9*TXNgs*B8hb6*?XJ)5}L=d(lG?C!i}rEETCyPHcn_U*T6HC0@~ zIC-1i<@)E2_C2@W^=~s~1X}|n&V-$i+n>GavfGKhYLhLy6XJVIeWzYqy|l}wc>2Bv zr<86;7t9mv*ik!kGe`fn;J;d*d~W|WeDhr0{_AOxzn9jP&Ewti^?RE9nIGQFPM;aK hKRKZUG&I3)ALF#O8GNP-vx-3$dAjgn~l`J>(SULUbk&lvq@6AvBOUhi&e?Bx&` zW)-_m>(r^AuhKnZqB(cX^4rD#X47>azK;)m{hKaoKlrt=zC7l95BE1iM%PH*O`j%h zxjFahpN$~%!QjJ%T~AZ1^A^1HYi(TrwCsLm&Ek6x)N9Z3wluCkYP0Fmue_-ZcF))@ z{durAZh7`&v)P9aTu&?CcF%U-@%dN$d{+D^$~(}Rw{@!E6!~Ajqz#_zWCR-f;3eB4 V&TKx{2q$NdC7!N+F6*2UngChnj3xj8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-cotton.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b3f0162f567f52db3ad4101d62ed56dd49d7ce GIT binary patch literal 409 zcmV;K0cQS*P)Px$Q%OWYR9J=Wls`*CQ5c6GHIVKQ8V%A7AqQ~~8Vb4yQHxTvHQaBYw6rwnX0-MN z?hrIYeuV-X0|%q6L4yPZ=?qdAjNlG(8bqrhxaZo|dA4&7ywC5v=MQK!8qI$v^jC!( z+md1!2H^Cj;k)k40UXgiCKA5nbUs z#9UB$CT+5ljnlcipznE5I3rar11_TLzg9SiJYT7@c6<&%DiOnI)`-{33^$AP22!b> z(h)eeB@Yj>06Zr5F*Dn|U6!Wns_h4esL0ogC5){j=AUnQZ{PD8U0``*mydQMkQ~1q zaBNE!ax0_~v0r!Idg>#FVI?^#mvDTxE{3Sl2aInmcfC;{xl#bp6+mJz%ewChcF1&NEBinNx1;n|?s2>|_bYwC!`Fh2!>cz5cA~6FKS9 zBdK6MsZA=ey#659gTV$Tz3M+3!)KZwxt47tnJ##yyg7OOrhazQub)b9lt-iro{|1A zL-50nT9BOdg)5$iQ(u4ky!pn`tQ|Rb<8SrbrZLz3u3pWbrjyy=?eIwd&Ss8pH&uW} a{|Pr|F-ltII&EzO$RbZyKbLh*2~7YiIg394 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/batard-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..664a6cda2b912c0efef6a23b1c2bc00f881af5f8 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|etNn%hE&XX zd&`io$v~p*A-}m2C*R#3^ABu$r!Qt!F8^Rr#KacEak-(ff9Sq0kWn4rbjY4IBUezkfz$>zz9>({sZOnhfp!u_^UQU143VylGj6 z@WHUKZncJ(tFt_XJKn{q?qpqYHRu*w!1?k!q6@yrY&grh!$a=RXUBwU`(yXq|9+G< YKhVW^zrgeScc5Jip00i_>zopr09JHg)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json index d9142f7cf1..6a74ec1684 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/bread.rsi/meta.json @@ -1,158 +1,180 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380). Cotton baguette and crostini variants by JuneSzalkowska", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "alpha" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation and modified by potato1234x at https://github.com/tgstation/tgstation/commit/0631fe5bde73a68b4c12bdfa633c30b2cee442d5. Crostini created by Github user deathride58, baguette taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380). Cotton baguette and crostini variants by JuneSzalkowska. Batard by SurrealShibe (GitHub)", + "size": { + "x": 32, + "y": 32 }, - { - "name": "alpha2" - }, - { - "name": "alpha-filling" - }, - { - "name": "alpha-filling2" - }, - { - "name": "alpha-slice" - }, - { - "name": "alpha-slice2" - }, - { - "name": "alpha-slice-filling" - }, - { - "name": "alpha-slice2-filling" - }, - { - "name": "baguette" - }, - { - "name": "baguette-equipped-BELT", - "directions": 4 - }, - { - "name": "baguette-inhand-left", - "directions": 4 - }, - { - "name": "baguette-inhand-right", - "directions": 4 - }, - { - "name": "baguette-cotton" - }, - { - "name": "baguette-cotton-equipped-BELT", - "directions": 4 - }, - { - "name": "baguette-cotton-inhand-left", - "directions": 4 - }, - { - "name": "baguette-cotton-inhand-right", - "directions": 4 - }, - { - "name": "banana" - }, - { - "name": "banana-slice" - }, - { - "name": "buttered-toast" - }, - { - "name": "cornbread" - }, - { - "name": "cornbread-slice" - }, - { - "name": "creamcheese" - }, - { - "name": "creamcheese-slice" - }, - { - "name": "crostini" - }, - { - "name": "crostini-cotton" - }, - { - "name": "cotton" - }, - { - "name": "cotton-slice" - }, - { - "name": "french-toast" - }, - { - "name": "garlic-slice" - }, - { - "name": "jelly-toast" - }, - { - "name": "meat" - }, - { - "name": "meat-slice" - }, - { - "name": "mimana" - }, - { - "name": "mimana-slice" - }, - { - "name": "moldy-slice" - }, - { - "name": "plain" - }, - { - "name": "plain-slice" - }, - { - "name": "plate" - }, - { - "name": "sausage" - }, - { - "name": "sausage-slice" - }, - { - "name": "spidermeat" - }, - { - "name": "spidermeat-slice" - }, - { - "name": "tofu" - }, - { - "name": "tofu-slice" - }, - { - "name": "two-slice" - }, - { - "name": "xenomeat" - }, - { - "name": "xenomeat-slice" - } - ] + "states": [ + { + "name": "alpha" + }, + { + "name": "alpha2" + }, + { + "name": "alpha-filling" + }, + { + "name": "alpha-filling2" + }, + { + "name": "alpha-slice" + }, + { + "name": "alpha-slice2" + }, + { + "name": "alpha-slice-filling" + }, + { + "name": "alpha-slice2-filling" + }, + { + "name": "baguette" + }, + { + "name": "baguette-equipped-BELT", + "directions": 4 + }, + { + "name": "baguette-inhand-left", + "directions": 4 + }, + { + "name": "baguette-inhand-right", + "directions": 4 + }, + { + "name": "baguette-cotton" + }, + { + "name": "baguette-cotton-equipped-BELT", + "directions": 4 + }, + { + "name": "baguette-cotton-inhand-left", + "directions": 4 + }, + { + "name": "baguette-cotton-inhand-right", + "directions": 4 + }, + { + "name": "banana" + }, + { + "name": "banana-slice" + }, + { + "name": "buttered-toast" + }, + { + "name": "cornbread" + }, + { + "name": "cornbread-slice" + }, + { + "name": "creamcheese" + }, + { + "name": "creamcheese-slice" + }, + { + "name": "crostini" + }, + { + "name": "crostini-cotton" + }, + { + "name": "cotton" + }, + { + "name": "cotton-slice" + }, + { + "name": "french-toast" + }, + { + "name": "garlic-slice" + }, + { + "name": "jelly-toast" + }, + { + "name": "meat" + }, + { + "name": "meat-slice" + }, + { + "name": "mimana" + }, + { + "name": "mimana-slice" + }, + { + "name": "moldy-slice" + }, + { + "name": "plain" + }, + { + "name": "plain-slice" + }, + { + "name": "plate" + }, + { + "name": "sausage" + }, + { + "name": "sausage-slice" + }, + { + "name": "spidermeat" + }, + { + "name": "spidermeat-slice" + }, + { + "name": "tofu" + }, + { + "name": "tofu-slice" + }, + { + "name": "two-slice" + }, + { + "name": "xenomeat" + }, + { + "name": "xenomeat-slice" + }, + { + "name": "batard" + }, + { + "name": "batard-inhand-left", + "directions": 4 + }, + { + "name": "batard-inhand-right", + "directions": 4 + }, + { + "name": "batard-cotton" + }, + { + "name": "batard-cotton-inhand-left", + "directions": 4 + }, + { + "name": "batard-cotton-inhand-right", + "directions": 4 + } + ] } From b78eecfb936900bfe8fd36ccbcde3bad803ce634 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 10:19:57 +0000 Subject: [PATCH 053/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c1cabeb390..798b4f3465 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: RedBookcase - changes: - - message: The Salvage section of the guidebook has been updated. - type: Fix - id: 8533 - time: '2025-05-19T22:39:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37593 - author: SpeltIncorrectyl changes: - message: Kammerer now has a tighter spread to compensate for its lower rate of @@ -3952,3 +3945,10 @@ id: 9040 time: '2025-10-07T09:31:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40700 +- author: SurrealShibe + changes: + - message: Added the nutri-batard to mime survival boxes in place of the nutri-brick. + type: Add + id: 9041 + time: '2025-10-07T10:18:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40601 From 101b9ffb257b451a2220baee5531f565ead3833e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Tue, 7 Oct 2025 06:15:11 -0500 Subject: [PATCH 054/216] Cleanup material_doors.yml (#40666) cleanup Co-authored-by: iaada --- .../Doors/MaterialDoors/material_doors.yml | 156 +++++------------- 1 file changed, 41 insertions(+), 115 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml index 26db89ed32..e9faaece39 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml @@ -1,8 +1,8 @@ - type: entity - id: BaseMaterialDoor - parent: BaseStructure - name: door abstract: true + parent: BaseStructure + id: BaseMaterialDoor + name: door description: A door, where will it lead? components: - type: Anchorable @@ -63,31 +63,31 @@ - type: BlockWeather - type: entity + abstract: true parent: BaseMaterialDoor id: BaseMaterialDoorNavMap - abstract: true components: - type: NavMapDoor ### Metal doors ### - type: entity + parent: BaseMaterialDoorNavMap id: MetalDoor name: metal door - parent: BaseMaterialDoorNavMap components: - type: Construction graph: DoorGraph node: metalDoor - type: Destructible thresholds: - - trigger: + - trigger: &DamageTrigger200 # Overkill threshold !type:DamageTrigger damage: 200 - behaviors: + behaviors: &OverkillBehavior - !type:DoActsBehavior acts: ["Destruction"] - - trigger: + - trigger: &DamageTrigger150 !type:DamageTrigger damage: 150 behaviors: @@ -103,30 +103,20 @@ max: 5 - type: entity + parent: BaseMaterialDoorNavMap id: PlasmaDoor name: plasma door - parent: BaseMaterialDoorNavMap - description: A door, where will it lead? components: - type: Sprite sprite: Structures/Doors/MineralDoors/plasma_door.rsi - layers: - - state: closed - map: ["enum.DoorVisualLayers.Base"] - type: Construction graph: DoorGraph node: plasmaDoor - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] - - trigger: - !type:DamageTrigger - damage: 150 + - trigger: *DamageTrigger200 + behaviors: *OverkillBehavior + - trigger: *DamageTrigger150 behaviors: - !type:DoActsBehavior acts: ["Destruction"] @@ -140,30 +130,20 @@ max: 5 - type: entity + parent: BaseMaterialDoorNavMap id: GoldDoor name: gold door - parent: BaseMaterialDoorNavMap - description: A door, where will it lead? components: - type: Sprite sprite: Structures/Doors/MineralDoors/gold_door.rsi - layers: - - state: closed - map: ["enum.DoorVisualLayers.Base"] - type: Construction graph: DoorGraph node: goldDoor - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] - - trigger: - !type:DamageTrigger - damage: 150 + - trigger: *DamageTrigger200 + behaviors: *OverkillBehavior + - trigger: *DamageTrigger150 behaviors: - !type:DoActsBehavior acts: ["Destruction"] @@ -177,30 +157,20 @@ max: 5 - type: entity + parent: BaseMaterialDoorNavMap id: SilverDoor name: silver door - parent: BaseMaterialDoorNavMap - description: A door, where will it lead? components: - type: Sprite sprite: Structures/Doors/MineralDoors/silver_door.rsi - layers: - - state: closed - map: ["enum.DoorVisualLayers.Base"] - type: Construction graph: DoorGraph node: silverDoor - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] - - trigger: - !type:DamageTrigger - damage: 150 + - trigger: *DamageTrigger200 + behaviors: *OverkillBehavior + - trigger: *DamageTrigger150 behaviors: - !type:DoActsBehavior acts: ["Destruction"] @@ -214,35 +184,26 @@ max: 5 - type: entity + parent: BaseMaterialDoorNavMap id: BananiumDoor name: bananium door - parent: BaseMaterialDoorNavMap - description: A door, where will it lead? components: - type: Sprite sprite: Structures/Doors/MineralDoors/bananium_door.rsi - layers: - - state: closed - map: ["enum.DoorVisualLayers.Base"] - type: Door - openSound: - path: /Audio/Items/bikehorn.ogg - closeSound: - path: /Audio/Items/bikehorn.ogg + openSound: &BikeHornSound + collection: BikeHorn + params: + variation: 0.125 + closeSound: *BikeHornSound - type: Construction graph: DoorGraph node: bananiumDoor - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 200 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] - - trigger: - !type:DamageTrigger - damage: 150 + - trigger: *DamageTrigger200 + behaviors: *OverkillBehavior + - trigger: *DamageTrigger150 behaviors: - !type:DoActsBehavior acts: ["Destruction"] @@ -258,9 +219,9 @@ ### Other doors ### - type: entity + parent: BaseMaterialDoorNavMap id: WoodDoor name: wooden door - parent: BaseMaterialDoorNavMap components: - type: Sprite sprite: Structures/Doors/MineralDoors/wood_door.rsi @@ -273,16 +234,11 @@ graph: DoorGraph node: woodDoor - type: Damageable - damageContainer: StructuralInorganic damageModifierSet: Wood - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 150 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] + - trigger: *DamageTrigger150 + behaviors: *OverkillBehavior - trigger: !type:DamageTrigger damage: 75 @@ -299,16 +255,12 @@ max: 5 - type: entity + parent: BaseMaterialDoorNavMap id: PaperDoor name: paper door - parent: BaseMaterialDoorNavMap - description: A door, where will it lead? components: - type: Sprite sprite: Structures/Doors/MineralDoors/paper_door.rsi - layers: - - state: closed - map: ["enum.DoorVisualLayers.Base"] - type: Door openSound: path: /Audio/Effects/paperdoor_openclose.ogg @@ -318,16 +270,11 @@ graph: DoorGraph node: paperDoor - type: Damageable - damageContainer: StructuralInorganic damageModifierSet: Wood - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 150 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] + - trigger: *DamageTrigger150 + behaviors: *OverkillBehavior - trigger: !type:DamageTrigger damage: 50 @@ -344,16 +291,13 @@ max: 5 - type: entity + parent: BaseMaterialDoorNavMap id: WebDoor name: web door - parent: BaseMaterialDoorNavMap description: A door, leading to the lands of the spiders... or a spaced room. components: - type: Sprite sprite: Structures/Doors/web_door.rsi - layers: - - state: closed - map: ["enum.DoorVisualLayers.Base"] - type: Door closeSound: path: /Audio/Effects/rustle1.ogg @@ -366,21 +310,8 @@ damageModifierSet: Web - type: Destructible thresholds: - - trigger: # Excess damage, don't spawn entities - !type:DamageTrigger - damage: 100 - behaviors: - - !type:PlaySoundBehavior - sound: - collection: WoodDestroy - - !type:DoActsBehavior - acts: ["Destruction"] - - trigger: - !type:DamageTrigger - damage: 150 - behaviors: - - !type:DoActsBehavior - acts: ["Destruction"] + - trigger: *DamageTrigger150 + behaviors: *OverkillBehavior - trigger: !type:DamageTrigger damage: 50 @@ -397,8 +328,8 @@ max: 2 - type: entity - id: CardDoor parent: BaseMaterialDoorNavMap + id: CardDoor name: cardboard door components: - type: Sprite @@ -417,16 +348,11 @@ path: "/Audio/Weapons/pierce.ogg" - type: Damageable - damageContainer: StructuralInorganic damageModifierSet: Card - type: Destructible thresholds: - - trigger: - !type:DamageTrigger - damage: 60 #excess damage (nuke?). avoid computational cost of spawning entities. - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] + - trigger: *DamageTrigger150 + behaviors: *OverkillBehavior - trigger: !type:DamageTrigger damage: 30 From 691ca31b9535e074007bc85e345655948c6bf143 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 7 Oct 2025 05:45:01 -0600 Subject: [PATCH 055/216] (Cleanup) Fix logger obsolete warnings (#40553) * Switched obsolete logger usages to use Sawmill Fix the majority of obsolete logger usages outside the engine code. * Fix injection in ChatManager and revert BuildMech changes * Removed extra manual injection * Reduced extra static injection and reverted changes to CommandButton as it needs engine changes. * Removed two more cases of double injection and an extra using * Reverted changes for Inventory Display * Moved sawmill setup outside constructor in Table to resolve test failure --- .../Administration/UI/Notes/AdminNotesLine.xaml.cs | 7 ++++++- .../Construction/UI/ConstructionMenuPresenter.cs | 8 ++++++-- Content.Client/Guidebook/DocumentParsingManager.cs | 9 ++++----- Content.Client/Guidebook/Richtext/Table.cs | 7 ++++++- Content.Client/Guidebook/Richtext/TextLinkTag.cs | 9 +++++++-- Content.Client/Launcher/LauncherConnecting.cs | 8 ++++++-- .../Systems/Alerts/Widgets/AlertsUI.xaml.cs | 12 +++++++++--- Content.Replay/Menu/ReplayMainMenu.cs | 6 +++++- Content.Server/Chat/Managers/ChatManager.cs | 12 ++++++++---- .../GameTicking/Commands/JoinGameCommand.cs | 7 ++++++- 10 files changed, 63 insertions(+), 22 deletions(-) diff --git a/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs b/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs index 97ddc15000..24e5cfdfab 100644 --- a/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs +++ b/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs @@ -14,6 +14,9 @@ namespace Content.Client.Administration.UI.Notes; [GenerateTypedNameReferences] public sealed partial class AdminNotesLine : BoxContainer { + [Dependency] private readonly ILogManager _logManager = default!; + + private readonly ISawmill _sawmill = default!; private readonly SpriteSystem _sprites; private const string AdminNotesTextureBase = "/Textures/Interface/AdminNotes/"; @@ -33,6 +36,8 @@ public sealed partial class AdminNotesLine : BoxContainer public AdminNotesLine(SpriteSystem sprites, SharedAdminNote note) { RobustXamlLoader.Load(this); + + _sawmill = _logManager.GetSawmill("admin.notes"); _sprites = sprites; Note = note; @@ -61,7 +66,7 @@ public sealed partial class AdminNotesLine : BoxContainer if (iconPath is null) { SeverityRect.Visible = false; - Logger.WarningS("admin.notes", $"Could not find an icon for note ID {Note.Id}"); + _sawmill.Warning($"Could not find an icon for note ID {Note.Id}"); } else { diff --git a/Content.Client/Construction/UI/ConstructionMenuPresenter.cs b/Content.Client/Construction/UI/ConstructionMenuPresenter.cs index d5fee2bdda..d640de7b68 100644 --- a/Content.Client/Construction/UI/ConstructionMenuPresenter.cs +++ b/Content.Client/Construction/UI/ConstructionMenuPresenter.cs @@ -30,8 +30,10 @@ namespace Content.Client.Construction.UI [Dependency] private readonly IUserInterfaceManager _uiManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IClientPreferencesManager _preferencesManager = default!; - private readonly SpriteSystem _spriteSystem; + [Dependency] private readonly ILogManager _logManager = default!; + private readonly ISawmill _sawmill = default!; + private readonly SpriteSystem _spriteSystem; private readonly IConstructionMenuView _constructionView; private readonly EntityWhitelistSystem _whitelistSystem; @@ -87,6 +89,8 @@ namespace Content.Client.Construction.UI { // This is a lot easier than a factory IoCManager.InjectDependencies(this); + _sawmill = _logManager.GetSawmill("construction.menu"); + _constructionView = new ConstructionMenu(); _whitelistSystem = _entManager.System(); _spriteSystem = _entManager.System(); @@ -284,7 +288,7 @@ namespace Content.Client.Construction.UI if (!_constructionSystem!.TryGetRecipePrototype(recipe.ID, out var targetProtoId)) { - Logger.Error("Cannot find the target prototype in the recipe cache with the id \"{0}\" of {1}.", + _sawmill.Error("Cannot find the target prototype in the recipe cache with the id \"{0}\" of {1}.", recipe.ID, nameof(ConstructionPrototype)); continue; diff --git a/Content.Client/Guidebook/DocumentParsingManager.cs b/Content.Client/Guidebook/DocumentParsingManager.cs index 8bc1a834fc..4c9f5fabe0 100644 --- a/Content.Client/Guidebook/DocumentParsingManager.cs +++ b/Content.Client/Guidebook/DocumentParsingManager.cs @@ -7,7 +7,6 @@ using Robust.Client.UserInterface; using Robust.Shared.ContentPack; using Robust.Shared.Prototypes; using Robust.Shared.Reflection; -using Robust.Shared.Sandboxing; using Robust.Shared.Utility; using static Pidgin.Parser; @@ -21,7 +20,7 @@ public sealed partial class DocumentParsingManager [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IReflectionManager _reflectionManager = default!; [Dependency] private readonly IResourceManager _resourceManager = default!; - [Dependency] private readonly ISandboxHelper _sandboxHelper = default!; + [Dependency] private readonly IDynamicTypeFactory _dynamicTypeFactory = default!; private readonly Dictionary> _tagControlParsers = new(); private Parser _controlParser = default!; @@ -43,7 +42,7 @@ public sealed partial class DocumentParsingManager foreach (var typ in _reflectionManager.GetAllChildren()) { - _tagControlParsers.Add(typ.Name, CreateTagControlParser(typ.Name, typ, _sandboxHelper)); + _tagControlParsers.Add(typ.Name, CreateTagControlParser(typ.Name, typ, _dynamicTypeFactory)); } ControlParser = whitespaceAndCommentParser.Then(_controlParser.Many()); @@ -87,14 +86,14 @@ public sealed partial class DocumentParsingManager return true; } - private Parser CreateTagControlParser(string tagId, Type tagType, ISandboxHelper sandbox) + private Parser CreateTagControlParser(string tagId, Type tagType, IDynamicTypeFactory typeFactory) { return Map( (args, controls) => { try { - var tag = (IDocumentTag) sandbox.CreateInstance(tagType); + var tag = (IDocumentTag) typeFactory.CreateInstance(tagType); if (!tag.TryParseTag(args, out var control)) { _sawmill.Error($"Failed to parse {tagId} args"); diff --git a/Content.Client/Guidebook/Richtext/Table.cs b/Content.Client/Guidebook/Richtext/Table.cs index b6923c3698..82b884aa96 100644 --- a/Content.Client/Guidebook/Richtext/Table.cs +++ b/Content.Client/Guidebook/Richtext/Table.cs @@ -8,6 +8,11 @@ namespace Content.Client.Guidebook.Richtext; [UsedImplicitly] public sealed class Table : TableContainer, IDocumentTag { + [Dependency] private readonly ILogManager _logManager = default!; + + private ISawmill Sawmill => _sawmill ??= _logManager.GetSawmill("table"); + private ISawmill? _sawmill; + public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control) { HorizontalExpand = true; @@ -15,7 +20,7 @@ public sealed class Table : TableContainer, IDocumentTag if (!args.TryGetValue("Columns", out var columns) || !int.TryParse(columns, out var columnsCount)) { - Logger.Error("Guidebook tag \"Table\" does not specify required property \"Columns.\""); + Sawmill.Error("Guidebook tag \"Table\" does not specify required property \"Columns.\""); control = null; return false; } diff --git a/Content.Client/Guidebook/Richtext/TextLinkTag.cs b/Content.Client/Guidebook/Richtext/TextLinkTag.cs index a551b18473..5c0098d5b5 100644 --- a/Content.Client/Guidebook/Richtext/TextLinkTag.cs +++ b/Content.Client/Guidebook/Richtext/TextLinkTag.cs @@ -1,4 +1,4 @@ -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -12,6 +12,11 @@ namespace Content.Client.Guidebook.RichText; [UsedImplicitly] public sealed class TextLinkTag : IMarkupTagHandler { + [Dependency] private readonly ILogManager _logManager = default!; + + private ISawmill Sawmill => _sawmill ??= _logManager.GetSawmill(Name); + private ISawmill? _sawmill; + public static Color LinkColor => Color.CornflowerBlue; public string Name => "textlink"; @@ -53,7 +58,7 @@ public sealed class TextLinkTag : IMarkupTagHandler if (control.TryGetParentHandler(out var handler)) handler.HandleClick(link); else - Logger.Warning("Warning! No valid ILinkClickHandler found."); + Sawmill.Warning("Warning! No valid ILinkClickHandler found."); } } diff --git a/Content.Client/Launcher/LauncherConnecting.cs b/Content.Client/Launcher/LauncherConnecting.cs index 33d31cc52d..3496c92aba 100644 --- a/Content.Client/Launcher/LauncherConnecting.cs +++ b/Content.Client/Launcher/LauncherConnecting.cs @@ -20,7 +20,9 @@ namespace Content.Client.Launcher [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly IClipboardManager _clipboard = default!; + [Dependency] private readonly ILogManager _logManager = default!; + private ISawmill _sawmill = default!; private LauncherConnectingGui? _control; private Page _currentPage; @@ -59,6 +61,8 @@ namespace Content.Client.Launcher protected override void Startup() { + _sawmill = _logManager.GetSawmill("launcher-ui"); + _control = new LauncherConnectingGui(this, _random, _prototypeManager, _cfg, _clipboard); _userInterfaceManager.StateRoot.AddChild(_control); @@ -115,12 +119,12 @@ namespace Content.Client.Launcher } else { - Logger.InfoS("launcher-ui", $"Redial not possible, no Ss14Address"); + _sawmill.Info($"Redial not possible, no Ss14Address"); } } catch (Exception ex) { - Logger.ErrorS("launcher-ui", $"Redial exception: {ex}"); + _sawmill.Error($"Redial exception: {ex}"); } return false; } diff --git a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs index d6a79a81c4..9d62f0c9be 100644 --- a/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs +++ b/Content.Client/UserInterface/Systems/Alerts/Widgets/AlertsUI.xaml.cs @@ -14,12 +14,18 @@ namespace Content.Client.UserInterface.Systems.Alerts.Widgets; [GenerateTypedNameReferences] public sealed partial class AlertsUI : UIWidget { + [Dependency] private readonly ILogManager _logManager = default!; + + private readonly ISawmill _sawmill = default!; + // also known as Control.Children? private readonly Dictionary _alertControls = new(); public AlertsUI() { RobustXamlLoader.Load(this); + + _sawmill = _logManager.GetSawmill("alertsui"); } public void SyncControls(AlertsSystem alertsSystem, @@ -78,15 +84,15 @@ public sealed partial class AlertsUI : UIWidget { if (!alertKey.AlertType.HasValue) { - Logger.WarningS("alert", "found alertkey without alerttype," + - " alert keys should never be stored without an alerttype set: {0}", alertKey); + _sawmill.Warning("found alertkey without alerttype," + + " alert keys should never be stored without an alerttype set: {0}", alertKey); continue; } var alertType = alertKey.AlertType.Value; if (!alertsSystem.TryGet(alertType, out var newAlert)) { - Logger.ErrorS("alert", "Unrecognized alertType {0}", alertType); + _sawmill.Error("Unrecognized alertType {0}", alertType); continue; } diff --git a/Content.Replay/Menu/ReplayMainMenu.cs b/Content.Replay/Menu/ReplayMainMenu.cs index 85c39c59da..5adb769942 100644 --- a/Content.Replay/Menu/ReplayMainMenu.cs +++ b/Content.Replay/Menu/ReplayMainMenu.cs @@ -33,7 +33,9 @@ public sealed class ReplayMainScreen : State [Dependency] private readonly IClientRobustSerializer _serializer = default!; [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; [Dependency] private readonly ContentReplayPlaybackManager _replayMan = default!; + [Dependency] private readonly ILogManager _logManager = default!; + private ISawmill _sawmill = default!; private ReplayMainMenuControl _mainMenuControl = default!; private SelectReplayWindow? _selectWindow; private ResPath _directory; @@ -42,6 +44,8 @@ public sealed class ReplayMainScreen : State protected override void Startup() { + _sawmill = _logManager.GetSawmill("replay.screen"); + _mainMenuControl = new(_resourceCache); _userInterfaceManager.StateRoot.AddChild(_mainMenuControl); @@ -263,7 +267,7 @@ public sealed class ReplayMainScreen : State } catch (Exception ex) { - Logger.Error($"Failed to load replay info. Exception: {ex}"); + _sawmill.Error($"Failed to load replay info. Exception: {ex}"); SelectReplay(null); return; } diff --git a/Content.Server/Chat/Managers/ChatManager.cs b/Content.Server/Chat/Managers/ChatManager.cs index c62a10ada3..a37c05336f 100644 --- a/Content.Server/Chat/Managers/ChatManager.cs +++ b/Content.Server/Chat/Managers/ChatManager.cs @@ -1,6 +1,3 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Runtime.InteropServices; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Administration.Systems; @@ -18,6 +15,9 @@ using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Replays; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.InteropServices; namespace Content.Server.Chat.Managers; @@ -45,6 +45,7 @@ internal sealed partial class ChatManager : IChatManager [Dependency] private readonly PlayerRateLimitManager _rateLimitManager = default!; [Dependency] private readonly ISharedPlayerManager _player = default!; [Dependency] private readonly DiscordChatLink _discordLink = default!; + [Dependency] private readonly ILogManager _logManager = default!; /// /// The maximum length a player-sent message can be sent @@ -54,6 +55,7 @@ internal sealed partial class ChatManager : IChatManager private bool _oocEnabled = true; private bool _adminOocEnabled = true; + private ISawmill _sawmill = default!; private readonly Dictionary _players = new(); public void Initialize() @@ -64,6 +66,8 @@ internal sealed partial class ChatManager : IChatManager _configurationManager.OnValueChanged(CCVars.OocEnabled, OnOocEnabledChanged, true); _configurationManager.OnValueChanged(CCVars.AdminOocEnabled, OnAdminOocEnabledChanged, true); + _sawmill = _logManager.GetSawmill("SERVER"); + RegisterRateLimits(); } @@ -111,7 +115,7 @@ internal sealed partial class ChatManager : IChatManager { var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message))); ChatMessageToAll(ChatChannel.Server, message, wrappedMessage, EntityUid.Invalid, hideChat: false, recordReplay: true, colorOverride: colorOverride); - Logger.InfoS("SERVER", message); + _sawmill.Info(message); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}"); } diff --git a/Content.Server/GameTicking/Commands/JoinGameCommand.cs b/Content.Server/GameTicking/Commands/JoinGameCommand.cs index a32a2f9495..bfb3d91464 100644 --- a/Content.Server/GameTicking/Commands/JoinGameCommand.cs +++ b/Content.Server/GameTicking/Commands/JoinGameCommand.cs @@ -13,11 +13,14 @@ namespace Content.Server.GameTicking.Commands [AnyCommand] sealed class JoinGameCommand : IConsoleCommand { + [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + private readonly ISawmill _sawmill = default!; + public string Command => "joingame"; public string Description => ""; public string Help => ""; @@ -25,6 +28,8 @@ namespace Content.Server.GameTicking.Commands public JoinGameCommand() { IoCManager.InjectDependencies(this); + + _sawmill = _logManager.GetSawmill("security"); } public void Execute(IConsoleShell shell, string argStr, string[] args) { @@ -46,7 +51,7 @@ namespace Content.Server.GameTicking.Commands if (ticker.PlayerGameStatuses.TryGetValue(player.UserId, out var status) && status == PlayerGameStatus.JoinedGame) { - Logger.InfoS("security", $"{player.Name} ({player.UserId}) attempted to latejoin while in-game."); + _sawmill.Info($"{player.Name} ({player.UserId}) attempted to latejoin while in-game."); shell.WriteError($"{player.Name} is not in the lobby. This incident will be reported."); return; } From 80c66c02bedf47da0b96d4aec0594d3a286c1b74 Mon Sep 17 00:00:00 2001 From: Lordbrandon12 <107556696+Lordbrandon12@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:42:43 -0300 Subject: [PATCH 056/216] =?UTF-8?q?changes=20the=20min=20and=20max=20varia?= =?UTF-8?q?bles=20in=20the=20TargetTemperature=20clamp=20to=20t=E2=80=A6?= =?UTF-8?q?=20(#40453)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit changes the min and max variables in the TargetTemperature clamp to the space heater min and max temperatures --- Content.Server/Atmos/Portable/SpaceHeaterSystem.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs index 1c05307c15..0d55ed12bd 100644 --- a/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs +++ b/Content.Server/Atmos/Portable/SpaceHeaterSystem.cs @@ -112,7 +112,9 @@ public sealed class SpaceHeaterSystem : EntitySystem if (!TryComp(uid, out var thermoMachine)) return; - thermoMachine.TargetTemperature = float.Clamp(thermoMachine.TargetTemperature + args.Temperature, thermoMachine.MinTemperature, thermoMachine.MaxTemperature); + thermoMachine.TargetTemperature = float.Clamp(thermoMachine.TargetTemperature + args.Temperature, + spaceHeater.MinTemperature, + spaceHeater.MaxTemperature); UpdateAppearance(uid); DirtyUI(uid, spaceHeater); From 984d28232b815c99c23f01950650e219cb814199 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 12:55:07 +0000 Subject: [PATCH 057/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 798b4f3465..2e7357a3ac 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: SpeltIncorrectyl - changes: - - message: Kammerer now has a tighter spread to compensate for its lower rate of - fire. - type: Tweak - id: 8534 - time: '2025-05-19T22:45:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37616 - author: Pronana changes: - message: Galoshes now slow on puddles again @@ -3952,3 +3944,11 @@ id: 9041 time: '2025-10-07T10:18:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40601 +- author: Lordbrandon12 + changes: + - message: Fixed issue allowing space heater temperature to be set above the allowed + limit. + type: Fix + id: 9042 + time: '2025-10-07T12:53:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40453 From 1d827754c9776080f9fa9060cd9724e10226bd8c Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:10:21 -0400 Subject: [PATCH 058/216] Move BrainSystem and necessary components to Shared (#40499) * yowza * Update Content.Shared/Body/Systems/BrainSystem.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Shared/Ghost/GhostOnMoveComponent.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update BrainSystem.cs * Update Content.Shared/Body/Systems/BrainSystem.cs * Update Content.Shared/Body/Systems/BrainSystem.cs * Update Content.Shared/Body/Systems/BrainSystem.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Server/Body/Components/BrainComponent.cs | 9 --------- .../Ghost/Components/GhostOnMoveComponent.cs | 11 ----------- Content.Shared/Body/Components/BrainComponent.cs | 6 ++++++ .../Body/Systems/BrainSystem.cs | 7 +++---- Content.Shared/Ghost/GhostOnMoveComponent.cs | 13 +++++++++++++ 5 files changed, 22 insertions(+), 24 deletions(-) delete mode 100644 Content.Server/Body/Components/BrainComponent.cs delete mode 100644 Content.Server/Ghost/Components/GhostOnMoveComponent.cs create mode 100644 Content.Shared/Body/Components/BrainComponent.cs rename {Content.Server => Content.Shared}/Body/Systems/BrainSystem.cs (92%) create mode 100644 Content.Shared/Ghost/GhostOnMoveComponent.cs diff --git a/Content.Server/Body/Components/BrainComponent.cs b/Content.Server/Body/Components/BrainComponent.cs deleted file mode 100644 index 004ff24eaf..0000000000 --- a/Content.Server/Body/Components/BrainComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Server.Body.Systems; - -namespace Content.Server.Body.Components -{ - [RegisterComponent, Access(typeof(BrainSystem))] - public sealed partial class BrainComponent : Component - { - } -} diff --git a/Content.Server/Ghost/Components/GhostOnMoveComponent.cs b/Content.Server/Ghost/Components/GhostOnMoveComponent.cs deleted file mode 100644 index e3abc97688..0000000000 --- a/Content.Server/Ghost/Components/GhostOnMoveComponent.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Content.Server.Ghost.Components -{ - [RegisterComponent] - public sealed partial class GhostOnMoveComponent : Component - { - [DataField("canReturn")] public bool CanReturn { get; set; } = true; - - [DataField("mustBeDead")] - public bool MustBeDead = false; - } -} diff --git a/Content.Shared/Body/Components/BrainComponent.cs b/Content.Shared/Body/Components/BrainComponent.cs new file mode 100644 index 0000000000..be3c3ecbe5 --- /dev/null +++ b/Content.Shared/Body/Components/BrainComponent.cs @@ -0,0 +1,6 @@ +using Content.Shared.Body.Systems; + +namespace Content.Shared.Body.Components; + +[RegisterComponent, Access(typeof(BrainSystem))] +public sealed partial class BrainComponent : Component; diff --git a/Content.Server/Body/Systems/BrainSystem.cs b/Content.Shared/Body/Systems/BrainSystem.cs similarity index 92% rename from Content.Server/Body/Systems/BrainSystem.cs rename to Content.Shared/Body/Systems/BrainSystem.cs index e916849a81..55abcbb868 100644 --- a/Content.Server/Body/Systems/BrainSystem.cs +++ b/Content.Shared/Body/Systems/BrainSystem.cs @@ -1,12 +1,12 @@ -using Content.Server.Body.Components; -using Content.Server.Ghost.Components; +using Content.Shared.Body.Components; using Content.Shared.Body.Events; +using Content.Shared.Ghost; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mobs.Components; using Content.Shared.Pointing; -namespace Content.Server.Body.Systems; +namespace Content.Shared.Body.Systems; public sealed class BrainSystem : EntitySystem { @@ -43,4 +43,3 @@ public sealed class BrainSystem : EntitySystem args.Cancel(); } } - diff --git a/Content.Shared/Ghost/GhostOnMoveComponent.cs b/Content.Shared/Ghost/GhostOnMoveComponent.cs new file mode 100644 index 0000000000..44cb3d0168 --- /dev/null +++ b/Content.Shared/Ghost/GhostOnMoveComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Ghost; + +[RegisterComponent, NetworkedComponent] +public sealed partial class GhostOnMoveComponent : Component +{ + [DataField] + public bool CanReturn = true; + + [DataField] + public bool MustBeDead; +} From e32253451b7e4b9a8f629228f529f19ff8466a31 Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:01:47 -0400 Subject: [PATCH 059/216] Vox burn into fried chicken (#40115) * Sir, this is a KFC. * the curse of multi-parenting * 11 herbs and spices of intrigue --- .../Prototypes/Entities/Mobs/Species/vox.yml | 38 +++++++++++++++++++ .../Entities/Objects/Consumable/Food/meat.yml | 17 +++++++++ 2 files changed, 55 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml index b49d0fb409..44687ac544 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -30,6 +30,44 @@ - type: Damageable damageContainer: Biological damageModifierSet: Vox + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 400 + behaviors: + - !type:GibBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 1500 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + FoodMeatChickenFriedVox: + min: 3 + max: 5 + - !type:BurnBodyBehavior { } + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + - trigger: + !type:DamageTypeTrigger + damageType: Radiation + damage: 15 + behaviors: + - !type:PopupBehavior + popup: mouth-taste-metal + popupType: LargeCaution + targetOnly: true + - trigger: + !type:DamageTypeTrigger + damageType: Radiation + damage: 40 + behaviors: + - !type:VomitBehavior - type: PassiveDamage # Augment normal health regen to be able to tank some Poison damage # This allows Vox to take their mask off temporarily to eat something without needing a trip to medbay afterwards. diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 642a068069..1d7380bb9d 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -1242,6 +1242,23 @@ - state: plain-cooked-inhand-right color: "#F7E3A3" +- type: entity + parent: FoodMeatChickenFried + id: FoodMeatChickenFriedVox + name: mystery fried chicken + description: “Eleven secret herbs and… oh no. That’s not chicken." + components: + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nutriment + Quantity: 2 + - ReagentId: Protein + Quantity: 5 + - ReagentId: Ammonia + Quantity: 3 + - type: entity parent: FoodMeatBase id: FoodMeatDuckCooked From 6b480673cd6bff9c3282fbf4df25fb3f7f438512 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 14:13:33 +0000 Subject: [PATCH 060/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2e7357a3ac..004a1ea082 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Pronana - changes: - - message: Galoshes now slow on puddles again - type: Fix - id: 8535 - time: '2025-05-20T02:47:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37628 - author: slarticodefast changes: - message: Added a reduced motion version of the seeing rainbows overlay. @@ -3952,3 +3945,11 @@ id: 9042 time: '2025-10-07T12:53:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40453 +- author: IProduceWidgets + changes: + - message: Vox that take excessive amounts of fire damage will now burn into fried + chicken. + type: Tweak + id: 9043 + time: '2025-10-07T14:12:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40115 From 4b51b2953d780fba56fd9721b4a91f44d3f8fbfa Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Wed, 8 Oct 2025 03:03:45 +1300 Subject: [PATCH 061/216] Fix post-mapinit NPC exception (#40244) Ensure `NPCBlackboard.Owner` is set during startup --- Content.Server/NPC/Components/NPCComponent.cs | 1 + Content.Server/NPC/HTN/HTNComponent.cs | 1 + Content.Server/NPC/HTN/HTNSystem.cs | 1 + Content.Server/NPC/Systems/NPCSystem.cs | 6 +++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Content.Server/NPC/Components/NPCComponent.cs b/Content.Server/NPC/Components/NPCComponent.cs index b1d5bfcf5f..3b396f034e 100644 --- a/Content.Server/NPC/Components/NPCComponent.cs +++ b/Content.Server/NPC/Components/NPCComponent.cs @@ -9,4 +9,5 @@ public abstract partial class NPCComponent : SharedNPCComponent /// [DataField("blackboard", customTypeSerializer: typeof(NPCBlackboardSerializer))] public NPCBlackboard Blackboard = new(); + // TODO FULL GAME SAVE Serialize this } diff --git a/Content.Server/NPC/HTN/HTNComponent.cs b/Content.Server/NPC/HTN/HTNComponent.cs index 43b8a70785..d9b392ab14 100644 --- a/Content.Server/NPC/HTN/HTNComponent.cs +++ b/Content.Server/NPC/HTN/HTNComponent.cs @@ -24,6 +24,7 @@ public sealed partial class HTNComponent : NPCComponent /// [ViewVariables] public HTNPlan? Plan; + // TODO FULL GAME SAVE serialize this? /// /// How long to wait after having planned to try planning again. diff --git a/Content.Server/NPC/HTN/HTNSystem.cs b/Content.Server/NPC/HTN/HTNSystem.cs index 4d9e321dd9..7bfe432998 100644 --- a/Content.Server/NPC/HTN/HTNSystem.cs +++ b/Content.Server/NPC/HTN/HTNSystem.cs @@ -33,6 +33,7 @@ public sealed class HTNSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(_npc.OnMobStateChange); SubscribeLocalEvent(_npc.OnNPCMapInit); + SubscribeLocalEvent(_npc.OnNPCStartup); SubscribeLocalEvent(_npc.OnPlayerNPCAttach); SubscribeLocalEvent(_npc.OnPlayerNPCDetach); SubscribeLocalEvent(OnHTNShutdown); diff --git a/Content.Server/NPC/Systems/NPCSystem.cs b/Content.Server/NPC/Systems/NPCSystem.cs index 27b2a1691d..7aea766930 100644 --- a/Content.Server/NPC/Systems/NPCSystem.cs +++ b/Content.Server/NPC/Systems/NPCSystem.cs @@ -63,9 +63,13 @@ namespace Content.Server.NPC.Systems WakeNPC(uid, component); } - public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args) + public void OnNPCStartup(EntityUid uid, HTNComponent component, ComponentStartup args) { component.Blackboard.SetValue(NPCBlackboard.Owner, uid); + } + + public void OnNPCMapInit(EntityUid uid, HTNComponent component, MapInitEvent args) + { WakeNPC(uid, component); } From ff01e13d247d916b58bd9638be79a012c130e166 Mon Sep 17 00:00:00 2001 From: Spanky <180730777+spanky-spanky@users.noreply.github.com> Date: Tue, 7 Oct 2025 11:53:55 -0400 Subject: [PATCH 062/216] Head of Security's Energy Magnum (and Warden's Energy Shotgun) (#40615) * Energy magnum and projectile protos, locker fills, and traitor objective updates. * Fix objective * Objective and .rsi tweaks * Rewrite item description. * Remove energy shotgun self charging and decrease magnum disabler cost. * Bring magnum disabler fire cost in line with regular disabler. * Bunch of sprite improvements including charge status visuals. * whoops * Minor sprite edit for clarity --------- Co-authored-by: SlamBamActionman --- .../conditions/steal-target-groups.ftl | 2 +- .../Catalog/Fills/Lockers/heads.yml | 2 +- .../Catalog/Fills/Lockers/security.yml | 1 + .../Weapons/Guns/Battery/battery_guns.yml | 53 +++++++++++++++--- .../Weapons/Guns/Projectiles/projectiles.yml | 49 ++++++++++++++++ .../Prototypes/Objectives/objectiveGroups.yml | 2 +- .../Objectives/stealTargetGroups.yml | 8 +-- Resources/Prototypes/Objectives/traitor.yml | 4 +- .../Guidebook/Antagonist/Traitors.xml | 4 +- .../Guns/Battery/energy_magnum.rsi/base.png | Bin 0 -> 966 bytes .../energy_magnum.rsi/equipped-BELT.png | Bin 0 -> 224 bytes .../equipped-SUITSTORAGE.png | Bin 0 -> 224 bytes .../Guns/Battery/energy_magnum.rsi/icon.png | Bin 0 -> 987 bytes .../Battery/energy_magnum.rsi/inhand-left.png | Bin 0 -> 897 bytes .../energy_magnum.rsi/inhand-right.png | Bin 0 -> 898 bytes .../energy_magnum.rsi/mag-unshaded-0.png | Bin 0 -> 15137 bytes .../energy_magnum.rsi/mag-unshaded-1.png | Bin 0 -> 490 bytes .../energy_magnum.rsi/mag-unshaded-2.png | Bin 0 -> 493 bytes .../energy_magnum.rsi/mag-unshaded-3.png | Bin 0 -> 537 bytes .../Guns/Battery/energy_magnum.rsi/meta.json | 53 ++++++++++++++++++ .../projectiles_magnum.rsi/magnum.png | Bin 0 -> 741 bytes .../magnum_piercing.png | Bin 0 -> 733 bytes .../projectiles_magnum.rsi/meta.json | 17 ++++++ 23 files changed, 176 insertions(+), 19 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/base.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/equipped-BELT.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/icon.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-0.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-1.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/magnum.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/magnum_piercing.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/meta.json diff --git a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl index f800aa2c8d..83e2e0c1ac 100644 --- a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl +++ b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl @@ -11,7 +11,7 @@ steal-target-groups-captain-id-card = captain ID card steal-target-groups-jetpack-captain-filled = captain's jetpack steal-target-groups-weapon-antique-laser = antique laser pistol steal-target-groups-nuke-disk = nuclear authentication disk -steal-target-groups-weapon-energy-shot-gun = energy shotgun +steal-target-groups-weapon-energy-magnum = energy magnum # Thief Collection steal-target-groups-figurines = figurine diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index cf5297220c..2b4c5c9b36 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -308,7 +308,7 @@ id: LockerFillHeadOfSecurityNoHardsuit table: !type:AllSelector children: - - id: WeaponEnergyShotgun + - id: WeaponEnergyMagnum - id: BookSpaceLaw - id: BoxEncryptionKeySecurity - id: CigarGoldCase diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index a6add7f4b7..48bed23bc9 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -46,6 +46,7 @@ amount: 2 - id: NetworkConfigurator - id: Binoculars + - id: WeaponEnergyShotgun - type: entityTable id: FillLockerWardenHarduit diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 30967200d7..008c177aa5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -815,7 +815,7 @@ - type: entity name: energy shotgun - parent: [BaseWeaponBattery, BaseGunWieldable, BaseGrandTheftContraband] + parent: [BaseWeaponBattery, BaseGunWieldable, BaseSecurityContraband] id: WeaponEnergyShotgun description: A one-of-a-kind prototype energy weapon that uses various shotgun configurations. It offers the possibility of both lethal and non-lethal shots, making it a versatile weapon. components: @@ -853,20 +853,57 @@ size: Large sprite: Objects/Weapons/Guns/Battery/inhands_64x.rsi heldPrefix: energy - - type: Tag - tags: - - HighRiskItem - - type: StealTarget - stealGroup: WeaponEnergyShotgun - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Battery maxCharge: 1200 startingCharge: 1200 + +- type: entity + name: energy magnum + parent: [BaseWeaponBatterySmall, BaseGrandTheftContraband] + id: WeaponEnergyMagnum + description: A high powered self-charging energy pistol designed for elite security personnel. It has has three firing modes allowing for either high damage, window piercing, or non-lethal disabling. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Battery/energy_magnum.rsi + layers: + - state: base + map: [ "enum.GunVisualLayers.Base" ] + - state: mag-unshaded-1 + visible: false + map: [ "enum.GunVisualLayers.MagUnshaded" ] + shader: unshaded + - type: MagazineVisuals + magState: mag + steps: 4 + zeroVisible: true + - type: Appearance + - type: Clothing + sprite: Objects/Weapons/Guns/Battery/energy_magnum.rsi + - type: Tag + tags: + - HighRiskItem + - type: StealTarget + stealGroup: WeaponEnergyMagnum + - type: Gun + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg + - type: ProjectileBatteryAmmoProvider + proto: BulletLaserMagnum + fireCost: 150 + - type: BatteryWeaponFireModes + fireModes: + - proto: BulletLaserMagnum + fireCost: 150 + - proto: BulletLaserWindowPiercingMagnum + fireCost: 150 + - proto: BulletDisabler + fireCost: 62.5 - type: BatterySelfRecharger autoRecharge: true - autoRechargeRate: 24 + autoRechargeRate: 48 autoRechargePause: true - autoRechargePauseTime: 30 + autoRechargePauseTime: 10 - type: entity name: temperature gun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 2134ac0cbf..080f73bdb7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -1325,3 +1325,52 @@ proto: BulletDisablerSmg count: 3 #bit stronger than a disabler if you hit your shots you goober, still not a 2 hit stun though spread: 9 + +- type: entity + name: magnum laser bolt + id: BulletLaserMagnum + categories: [ HideSpawnMenu ] + parent: BulletLaser + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi + layers: + - state: magnum + shader: unshaded + - type: PointLight + enabled: true + color: "#ff4300" + - type: Projectile + impactEffect: BulletImpactEffectOrangeDisabler + damage: + types: + Heat: 30 + +- type: entity + name: magnum window-piercing bolt + id: BulletLaserWindowPiercingMagnum + categories: [ HideSpawnMenu ] + parent: BulletLaser + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi + layers: + - state: magnum_piercing + shader: unshaded + - type: PointLight + enabled: true + color: "#ff4300" + - type: Projectile + impactEffect: BulletImpactEffectOrangeDisabler + damage: + types: + Heat: 20 + - type: Fixtures + fixtures: + projectile: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.1,0.1,0.1" + hard: false + mask: + - Opaque diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 7cfbd2761e..a24e0f5dd3 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -22,7 +22,7 @@ CaptainGunStealObjective: 0.5 CaptainJetpackStealObjective: 0.5 HandTeleporterStealObjective: 0.5 - EnergyShotgunStealObjective: 0.5 + EnergyMagnumStealObjective: 0.5 - type: weightedRandom id: TraitorObjectiveGroupKill diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml index d25908d154..0a223bd97c 100644 --- a/Resources/Prototypes/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml @@ -85,11 +85,11 @@ state: icon - type: stealTargetGroup - id: WeaponEnergyShotgun - name: steal-target-groups-weapon-energy-shot-gun + id: WeaponEnergyMagnum + name: steal-target-groups-weapon-energy-magnum sprite: - sprite: Objects/Weapons/Guns/Battery/energy_shotgun.rsi - state: base + sprite: Objects/Weapons/Guns/Battery/energy_magnum.rsi + state: icon # Thief Collection diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index 5f3b22c30d..26a4db42a0 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -243,7 +243,7 @@ - type: entity parent: BaseTraitorStealObjective - id: EnergyShotgunStealObjective + id: EnergyMagnumStealObjective components: - type: Objective # HoS will have this on them a lot of the time so.. @@ -251,7 +251,7 @@ - type: NotJobRequirement job: HeadOfSecurity - type: StealCondition - stealGroup: WeaponEnergyShotgun + stealGroup: WeaponEnergyMagnum owner: job-name-hos ## ce diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml index 5dc1310be3..c7a2c9e983 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml @@ -91,9 +91,9 @@ - - Stealing the [color=#cb0000]Head of Security[/color]'s [bold]energy shotgun[/bold]. + - Stealing the [color=#cb0000]Head of Security[/color]'s [bold]energy magnum[/bold]. - + - Stealing the [color=#f39f27]Chief Engineer[/color]'s [bold]advanced magboots[/bold]. diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..56ff3c1509d1f0341bd0d01981b9c734cb5f63e5 GIT binary patch literal 966 zcmV;%13CPOP)+EgVur|D1wOA)_yG^7q1FRLJn#EFeBTEgk)l#E2LezkTShb-k`u|4JottS zH%@}gr4>_OjjhD#JKqmT;=K2Ztp4x*osq0+Dj*F33yN-7AT0rrElU@?2aGHEbQYur z;4>1*6i7Eh&$RhfaIVdtf{l1|85|;0&h>Dnhn2ih0>>=iEfuRuXCLtsw_0A00h7QK zCQ-tKkjYS`KoJW+1;NSLLq1(tyP;aMrt;_ZU1oaB~Um_N08bp|k!T4@En+HJv z&N-qe!gxHcY-!-UURAG}2Ht-s7={7Hn09EjTJU`zj^p4>{T2Z5;p_F@I!Ga<+!SF- z9^c$(+sBoH5CTyYZ3qYe;y4BXIF3`8w9#nj@nkZ|7hx8bW$6Go=O7||a^Lq02attf z7!Mi9p8o3Y9%sjEd3;L}e168XLpFdk1Ga5zyXSe3QWowLJ2P;0e1xmJ`}L-$RT$3= zbh}-+u3G_sFbsj;w}mkVBGR^f$np3VWNV*hfR<~qxvpF3^?JG$3n5e-$6DP|%F4dv z0M;eQOaG^z>otrqg-jX3F#Mx-oMNj4+4N_To^Dq=K1cvN(|=H^oB(Kf3!GN}0o^uq o9bcbd>tCPNzeI@=CH^LU0aPIYMmwC(?S6yG2HM~$^U|92+!RnfH T;FSA;>L7idu6{1-oD!M<-Vs>X literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 0000000000000000000000000000000000000000..3f83ef42ebfc9d181f5d1efe912ac8a5f5c3730a GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|W_h|ehE&XX zdut=_AqN4L1FRDhE}l64j$zdTr&SwWQp}rNek@t?fc;C-vWClmwC(?S6yG2HM~$^U|92+!RnfH T;FSA;>L7idu6{1-oD!M<-Vs>X literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c9f8a1f745d4d75129e71576079fb954486054 GIT binary patch literal 987 zcmV<110?*3P)+EgVur|D1wOA)_yG^7q1FRLJn#EFeBTEgk)l#E2LezkTShb-k`u|4JottS zH%@}gr4>_OjjhD#JKqmT;=K2Ztp4x*osq0+Dj*F33yN-7AT0rrElU@?2aGHEbQYur z;4>1*6i7Eh&$RhfaIVdtf{l1|85|;0&h>Dnhn2ih0>>=iEfuRuXCLtsw_0A00h7QK zCQ-tKkjYS`KoJW+1;NSLLq1(tyP;aMrt;_ZU1oaB~Um_N08bp|k!T?Zf+WYFbuhNp@bMfYd!K^2r(78<2d$RDaG8R z$+cR|NGXw0(rh-VR;#?--sbW8Ixp`20O0wDLww)QETB@UTrWUMX&lGF_k9iy4s3j3 zVF4ZupZB~A^Lo8rW&uj6OXHcV6E;dk6Gah&!2qR{O;Ab^$1%KvIF8vr?6ZH^2Vi-5 znXT>|d)+R3_q!9vpYF799EUIrX|-B~ksjD670rW+%ge6{*L4v>*o38}CEk4e&a;PQ zo|aAlc=h?))P0aZYkj#16Y}Wf#Kv9^3{pzMFuc@208tbHu)4aMnY3Ik+xJeVGr0-V z@O|G3a2yAvl->F6?rvrQX}GR?;Xr!#M`!0O&JNq-OC0n5maqwF0f_^(TFu6r%_dsw z%=g4t2Nq{%I66BYE;?Vtz3sBHvO=TLC;$XO0KZR*5CWx?jZH(&)l-nJed2)X51Xyg zXcX4g*6dX*r8H3#5d;B25TLa#OiK<7OEAg)t)Ig=LI^{u3_%e5(RG|)qy%aE(@1tV z?mE5^0b}jIQK|_7RR0v_i~oRb6t<2}<{0_cC-u*fBS((EiC@XW`}~dKF!%rf002ov JPDHLkV1hJH$e92D literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9384a6a8615ace1af6d274517ec2d08268cadf5f GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV9d>Qb`Ho)PG(@xm{>Y-ueVd6 z#IgFUpeYvvoL!omT^k!!T#_Z8B=KfVxVq^2dWW|~>xC{!Z872C4fKw8{_nWfG22l< z#L*=?JKp=mTU#xSh0lxL{eEouywdWyWdi@xEqiW0ZLV3E(bCNL-7Dwn-M@Xp;(UL6 zj+q9>_vpC1w5XHYxbm05(yG#X*UP@B1}|gVCihU%*Szac@u7ul7p<%Cukbj1Z1N%X zLvhZ08a1oGxXisTlK$$?(igM{IBoc&GevV>zeb1FYdKx9o}xYhbF-8Sz?_9W+JwsYJ1xnJ}jd|>-!-PO%mYl{D|T+FRpWNl&7RCv>V z!#{QD?ILE$CrP+4UdkT644fr+ow3? z`}f1oUmtI?Uv~Xv%ek3rCSR>x)4u=Pxtqn$Z%J=nc+YrlwKKxONNz`BmMA^=$XvnI zcg-0@Gfc5%3BPXsPXBmw&9>qgQUnu^lsGlsq@R4W6s@v8LW_1nAe5XC;vt_B= zn^f>U_`%D^*XO9!G58;};%_vum20{;zd^-Q?dSi?mrS<)w%9g(!{*~xPZ<}hx=US} zv}{YL^VTkf^B?BUUM2kE_w4%nRi%IX>*|xsEPttG3P8iQ@uJWVrpS$31A7+MTmeQc NgQu&X%Q~loCIB*Qm{Qb`Ho)PG(@xm{>Y-ueVd6 z#IgFUpeYvvoL!omT^k!!T#_Z8B=KfVxVq^2dWW|~>xC{!Z872C4fKw8{_nWfG22l< z#L*=?JKp=mTU#xSh0lxL{eEouywdWyWdi@xEqiW0ZLV3E(bCNL-7Dwn-M@Xp;(UL6 zj+q9>_vpC1w5XHYxbm05(yG#X*UP@B1}|gVCihU%*Szac@u7ul7p<%Cukbj1Z1N%X zLvhZ08a1oGxXisTlK$$?(igM{IBoc&GevV>zeb1FYdKx9o}xYhbF-8Sz?_9W+JwsYJ1xnJ}jd|>-!-PO%mYl{D|T+FRpWNl&7RCv>V z!#{QjFAg7B4M(#I|N#y-0vJ?+un$OMWRE9<8hUuRiH% zWQ#mkKm(J=0tQwM2SzxvK&0YsPKZR?t4od(7$fHtCnU=p7w=7&{P2{@&*t96HPuR!qQFts$Yq>nQ?e=#Nw>G zoyS}6#?>pl=-HdkwB$p@o7#(u_ddDZE%84?-1pQYbSERZ9>h%GY&`k7{CL{Acl!=~ z`?YMJ^@s3sj#-;!?z&C)myKqXf1m%hwsGOl-x=&;+*R+iBi_iw8;LHETkz^;b%JfZ z{QILj7FEY5Ce8f0jkj-J`?L3bx;=Np3v{mUuDK-rL3W`=m&1R%r8?d_&l^<+vRB@D z>-Ub|G=SSQP&)m=n#tVykqPg9{=V~d+L?Dtzs03IeVQQW1r6N;`vrb5WwUP$w7;3S Q1sJysp00i_>zopr041uKQvd(} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-0.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e5161e0afaa3fe0515b9fa544a168c829b2bcb GIT binary patch literal 15137 zcmeI3dvFs)9LEn4!6=G?R2h`>l-EFVmsexYBv=w4L4vUjwgn%(<}S%ilU#atA!$|Y z$oOD72nbrK4h$U?Ee?nZh>w98#PN;eC^+@)sQ3WU8MRi#x|gKMCQVs&{Bv(6xnFj_ z-{0PSe!H9d=T`X_FBq$vq$3Dotk>hN0q1M9&zQ5ocaPZeDL9>-@H8j{an5+{GlJ-P z;q}Syl6S5Q%qXI#sdmniB<>uNE7a#oM=(GnXu2z|qo_nqi zTp!s|KW@RQ#?Eio&i8a*D?d!XR?#=j({j;`lXd5HcPtq_F!H8Rb)%~NXI@ZOw{POi zBbVPbVav+!A1&t{{rc;*Gk@z|A@i&MYMk6zspB47dd|^(8`rPj_2Z3>h4brdJ2qU} z^VyU$e_FAt;@9y5TZ7BqzLKine^+F}nzIdC(#`fs<3Dyezkh$vnB_Y!tn0DfX?xA~ z_@5W`|F+={YD(v|ov+U(qf8OjQ;QkhmE@_%eshe*DGCJZM$cEu=Mv6o4n1Z{`{qF`~HtR zEvH(#`cED^{^)m`r;9K2Z8#Rbd2Hy^7lw*E)_t-^r6$3UjwL|B2*N%mo#2Aaf=V_CVKMHYPQ18}B1PUo)meRvFX0j*qNhz3 zYTFhEf^E&gDxR9-)Y;Q4NDvcLj!eg*afMAgs7ziK#9A{=kr|2F?4YW(0m*uwpL9vG zKw1rz`XEzjBW+a%qt#}!*k+R^#%QG(Gi_${CNpbcSc{3w9h6fCBD>6o*c$iz+;HHR zgNmqXf~DzHDrHES4U!zDja5}uG-IMoCOuH-mDae*rS);;ifod>JZ?b=%3?wlr8ueO z<(j0V>YylXp!|`$uUH~KP+ZBe0~F~rm!ORXhAwB~gLzLPDMvGx#s_I3D#V1issNv{ ztS>RRNb>fgA@kkC4h(AI^OZLbUT-W`c4$SNw;UkIAuSqq(5VDk69Qc$C{j`m3iFnO zTe+g#-K%1#P@JMnTFA(XKVpuC96$I+bqV!G7OX?t1QXklXx-I zS|*1Dq%p!dAZ2L|uzq+><^E9?SPSLhgKS8WW1Q*~V_aCE6Y;Q}E;K^Q{H$VKQdE+` zWeHBRoi5j0)&=%+e|9@}Dm4q{l1)i5s_Ml!oC4B7IWn`A^~M#Iiw6a-+X)&BqR0c@ z#wO0l+4KxwWz|}v^5Rs?O;I;g>A zo8JiY`<&*=)Ur#kSJ)c3S%fiHgOA$hH>OXK=<2t*2ev7+EkEz;$t%8W`>L zkha3eS$(}$(`YiIx0x7l&_?Y$XN9{j0>iL zj4>`GB3OWN!8DLD#)U)#3otI21~SIDkceOb#s$+r#uyh85iG#CU>e96<3b{W1sE4h z0~upnNJOvzK*kss5)mxGxL_K{7~?`Bf&~~COamEXTu4N)0ONvbAY+URi3k>8 zTrdq}jBz0m!2*m6rh$x4i%VB{bx??d_XShn#X#!r!%u^k3dx|S#zzosQwgGdB|-EL zfb(|*kz@$s`$mFbA0mhf>Hb>|&Ij7(yzc5iy7ySGQFnkjca;ChuNa5-#GF3UzUCRn z$0g==d^&o^?zH=|r_}qq9$7Z_d|=5Q?K{2C@HaJlwAKE@rohxSZ>+oh)+IlGa=UK- zCE??J$+EgVur|D1wOA)_yG^7q1FRLJn#EFeBTEgk)l#E2LezkTShb-k`u|4JottS zH%@}gr4>_OjjhD#JKqmT;=K2Ztp4x*osq0+Dj*F33yN-7AT0rrElU@?2aGHEbQYur z;4>1*6i7Eh&$RhfaIVdtf{l1|85|;0&h>Dnhn2ih0>>=iEfuRuXCLtsw_0A00h7QK zCQ-tKkjYS`KoJW+1;NSLLq1(tyP;aMrt;_ZU1oaB~Um_N08bp|k!T+EgVur|D1wOA)_yG^7q1FRLJn#EFeBTEgk)l#E2LezkTShb-k`u|4JottS zH%@}gr4>_OjjhD#JKqmT;=K2Ztp4x*osq0+Dj*F33yN-7AT0rrElU@?2aGHEbQYur z;4>1*6i7Eh&$RhfaIVdtf{l1|85|;0&h>Dnhn2ih0>>=iEfuRuXCLtsw_0A00h7QK zCQ-tKkjYS`KoJW+1;NSLLq1(tyP;aMrt;_ZU1oaB~Um_N08bp|k!TCmmv!Q$5cHjzY70ss_Qa%bNtC!+KGgWCsE)0XVm j`*UuSn!SYp007@xDuxow1cL+l00000NkvXXu0mjfpzYIL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/energy_magnum.rsi/mag-unshaded-3.png new file mode 100644 index 0000000000000000000000000000000000000000..7976821be11a5adbdc4ebf1291d4f35ca7125913 GIT binary patch literal 537 zcmV+!0_OdRP)F&C9^n~HH;Te@!lA9Au6R#)NXy2P z!Y9IBLk=i>tMo*j-xO!+{H554hUdYqdb%?$oM>S!YvhF|ggyCONo$-(-NcnDEJvh{ z$Q;EaOppL>5|r2=N0BM11<9qpWiO zpQoAjPuIJ<0^oeLtj{s%-iK<%vVKo3t9k~G7q~7o{hN~0?6>HZrsg?@fgQNKX=;fB zxY~u`XFYDjYm!5zJ)MS+3+Ru*;63!N)w61>bN&R;ZF!+52&3&SmBdgi52#-M@2fhR77SO1ng-!v-F7_TQQ_3GXDi+iZr6*s z1>t?+m?H-izEHXr@T1~Fz^{s(YKAn zm&|Tl(j-X`L8HtfB|HYCT9R3HU;NuQ$&z?<`P;1Eh@(JJyfIPB($$cf7u}Gr#EQ!O zZ=P;`XfWvBoPfFq-+$?a`Yrg}^!<+m-~T*>@I9Pa75|dtH1a0;W<~4SgVr@TIj?Bi zHk__Q=bfE%a^F%|W+aj z0wNH>J^8giOeE9<67bqe!XXwUB(8pqySqGY$XXBq0?I`~Z2<#rvH>EHNPY0vunlSg zOb8L{hZ-mY3<+3;910LPJk$gjBnlxsR2FMxEMTo00000NkvXXu0mjf_f|yI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/magnum_piercing.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/magnum_piercing.png new file mode 100644 index 0000000000000000000000000000000000000000..d35cd0a8521d8c4a43be98f1a3448c1166ba5ad6 GIT binary patch literal 733 zcmV<30wVp1P)5OMUs8M*-a9m$_TsXe!JBl}jJB(Z^ zEqow6=*j_wFO{yB_(^fL#BYk-WMTrss;8E%V!euuoSPRO5bn)e1*3c(b(5BiJv$?{ zTV@X)31URi&?&Htg-=APEt&o88~X80vmzct{tiW4ab(GfcTm)Vbj?ULMbF4*QB=AA z&eJnThD+UBqEPo31h0M2unk{ZLGXDP1Ybu`^8n{|#lIpsjlGM$RndC)p=}*bFDjb8 z17{o1b?>Cy)Q?mnGi;jhassXM(0&a~i>0i}>m1)fa!sD-3U>FPU-q{xeFKweXV@c@ z1f@pOIoFH9~+C`!Lj! z>;Q^v!=jla2VexfcM8SsA;|$)ZG$+1?8Hd911JoGQ3tRP8-myp;Q!DHuy$}^vULt9 z9e~RNpjrlE%Y)G<81N7vsxH76|FAT~xVi(B4nSOz>V*Lhfl&txcnA=c2tg?eZ$U(6 z0;H%>N^A*ANZrth0$kAm_8}Sh9~Lqsg#fgIc@C;@zy%J(Vv-9V P00000NkvXXu0mjfNlrJp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/meta.json new file mode 100644 index 0000000000..73f61cbb15 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_magnum.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by BoskiYourk (GitHub)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "magnum" + }, + { + "name": "magnum_piercing" + } + ] +} From 7b7f49cd3939ce73eb7c8046f8bcc8169d66cb97 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 16:06:15 +0000 Subject: [PATCH 063/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 004a1ea082..e75a5363c6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Added a reduced motion version of the seeing rainbows overlay. - type: Add - id: 8536 - time: '2025-05-20T12:36:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37584 - author: B-Kirill changes: - message: Added new fun meteors variations (Cosmic cow, Honksteroid, Space potato) @@ -3953,3 +3946,13 @@ id: 9043 time: '2025-10-07T14:12:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40115 +- author: BoskiYourk, spanky_spanky + changes: + - message: The Head of Security now has an energy magnum, a self-charging multi-mode + laser revolver, in their locker instead of the energy shotgun. + type: Add + - message: The Warden now has the energy shotgun in their locker round-start. + type: Tweak + id: 9044 + time: '2025-10-07T16:05:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40615 From 70543885e75598c2aad64113cc824a33acf9efcb Mon Sep 17 00:00:00 2001 From: dffdff2423 Date: Tue, 7 Oct 2025 11:59:59 -0400 Subject: [PATCH 064/216] Add log statement for missing guidebook proto (#40380) * Add log statement for missing guidebook proto Also removed an unused parameter. * Update Content.Client/Guidebook/DocumentParsingManager.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Client/Guidebook/DocumentParsingManager.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Content.Client/Guidebook/DocumentParsingManager.cs b/Content.Client/Guidebook/DocumentParsingManager.cs index 4c9f5fabe0..37ec1ac2de 100644 --- a/Content.Client/Guidebook/DocumentParsingManager.cs +++ b/Content.Client/Guidebook/DocumentParsingManager.cs @@ -50,22 +50,22 @@ public sealed partial class DocumentParsingManager _sawmill = Logger.GetSawmill("Guidebook"); } - public bool TryAddMarkup(Control control, ProtoId entryId, bool log = true) + public bool TryAddMarkup(Control control, ProtoId entryId) { if (!_prototype.Resolve(entryId, out var entry)) return false; using var file = _resourceManager.ContentFileReadText(entry.Text); - return TryAddMarkup(control, file.ReadToEnd(), log); + return TryAddMarkup(control, file.ReadToEnd()); } - public bool TryAddMarkup(Control control, GuideEntry entry, bool log = true) + public bool TryAddMarkup(Control control, GuideEntry entry) { using var file = _resourceManager.ContentFileReadText(entry.Text); - return TryAddMarkup(control, file.ReadToEnd(), log); + return TryAddMarkup(control, file.ReadToEnd()); } - public bool TryAddMarkup(Control control, string text, bool log = true) + public bool TryAddMarkup(Control control, string text) { try { From ceedfb6d39ebb8331473550fb2d4a8f0202da082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Tue, 7 Oct 2025 11:05:30 -0500 Subject: [PATCH 065/216] Standardize state names in drinks yml (#40316) * drinks_base * drinks_special * drinks_fun * drinks_cans - the holy minus diff * bottles_glass and metamorphic * mugs * Solar's Best Hot Drinks * misc drinks_cups * slight addition to base * lint fix * metamorphic glass --------- Co-authored-by: iaada --- .../Objects/Consumable/Drinks/drinks_base.yml | 16 +- .../Drinks/drinks_bottles_glass.yml | 4 +- .../Objects/Consumable/Drinks/drinks_cans.yml | 156 +++--------------- .../Objects/Consumable/Drinks/drinks_cups.yml | 75 +++------ .../Objects/Consumable/Drinks/drinks_fun.yml | 13 +- .../Consumable/Drinks/drinks_metamorphic.yml | 22 +-- .../Consumable/Drinks/drinks_special.yml | 14 -- .../Reagents/Consumable/Drink/drinks.yml | 2 +- .../Drinks/cafe_latte.rsi/icon-vend.png | Bin 0 -> 299 bytes .../Consumable/Drinks/cafe_latte.rsi/icon.png | Bin 299 -> 293 bytes .../Drinks/cafe_latte.rsi/icon_empty.png | Bin 293 -> 0 bytes .../Drinks/cafe_latte.rsi/meta.json | 6 +- .../glass_clear.rsi/{fill1.png => fill-1.png} | Bin .../glass_clear.rsi/{fill2.png => fill-2.png} | Bin .../glass_clear.rsi/{fill3.png => fill-3.png} | Bin .../glass_clear.rsi/{fill4.png => fill-4.png} | Bin .../glass_clear.rsi/{fill5.png => fill-5.png} | Bin .../glass_clear.rsi/{fill6.png => fill-6.png} | Bin .../glass_clear.rsi/{fill7.png => fill-7.png} | Bin .../glass_clear.rsi/{fill8.png => fill-8.png} | Bin .../glass_clear.rsi/{fill9.png => fill-9.png} | Bin .../Drinks/glass_clear.rsi/meta.json | 18 +- .../{fill1.png => fill-1.png} | Bin .../{fill2.png => fill-2.png} | Bin .../{fill3.png => fill-3.png} | Bin .../{fill4.png => fill-4.png} | Bin .../{fill5.png => fill-5.png} | Bin .../Drinks/glass_coupe_shape.rsi/meta.json | 10 +- .../glue-tube.rsi/{fill1.png => fill-1.png} | Bin .../glue-tube.rsi/{fill2.png => fill-2.png} | Bin .../glue-tube.rsi/{fill3.png => fill-3.png} | Bin .../glue-tube.rsi/{fill4.png => fill-4.png} | Bin .../glue-tube.rsi/{fill5.png => fill-5.png} | Bin .../glue-tube.rsi/{fill6.png => fill-6.png} | Bin .../{icon.png => icon_empty.png} | Bin .../Consumable/Drinks/glue-tube.rsi/meta.json | 14 +- .../Consumable/Drinks/hot_coco.rsi/icon-0.png | Bin 318 -> 0 bytes .../Consumable/Drinks/hot_coco.rsi/icon-1.png | Bin 149 -> 0 bytes .../Consumable/Drinks/hot_coco.rsi/icon-2.png | Bin 158 -> 0 bytes .../Consumable/Drinks/hot_coco.rsi/icon-3.png | Bin 160 -> 0 bytes .../Consumable/Drinks/hot_coco.rsi/icon-4.png | Bin 164 -> 0 bytes .../Consumable/Drinks/hot_coco.rsi/meta.json | 28 ---- .../Drinks/hot_coffee.rsi/icon-0.png | Bin 318 -> 0 bytes .../Drinks/hot_coffee.rsi/icon-1.png | Bin 149 -> 0 bytes .../Drinks/hot_coffee.rsi/icon-2.png | Bin 158 -> 0 bytes .../Drinks/hot_coffee.rsi/icon-3.png | Bin 160 -> 0 bytes .../Drinks/hot_coffee.rsi/icon-4.png | Bin 164 -> 0 bytes .../Drinks/hot_coffee.rsi/icon-vend.png | Bin 295 -> 0 bytes .../Drinks/hot_coffee.rsi/meta.json | 28 ---- .../Drinks/jar.rsi/{fill1.png => fill-1.png} | Bin .../Drinks/jar.rsi/{fill2.png => fill-2.png} | Bin .../Drinks/jar.rsi/{fill3.png => fill-3.png} | Bin .../Drinks/jar.rsi/{fill4.png => fill-4.png} | Bin .../Drinks/jar.rsi/{fill5.png => fill-5.png} | Bin .../Drinks/jar.rsi/{fill6.png => fill-6.png} | Bin .../Drinks/jar.rsi/{fill7.png => fill-7.png} | Bin .../Drinks/jar.rsi/{fill8.png => fill-8.png} | Bin .../Drinks/jar.rsi/{fill9.png => fill-9.png} | Bin .../Consumable/Drinks/jar.rsi/meta.json | 18 +- .../lube-tube.rsi/{fill1.png => fill-1.png} | Bin .../lube-tube.rsi/{fill2.png => fill-2.png} | Bin .../lube-tube.rsi/{fill3.png => fill-3.png} | Bin .../lube-tube.rsi/{fill4.png => fill-4.png} | Bin .../lube-tube.rsi/{fill5.png => fill-5.png} | Bin .../lube-tube.rsi/{fill6.png => fill-6.png} | Bin .../{icon.png => icon_empty.png} | Bin .../Consumable/Drinks/lube-tube.rsi/meta.json | 14 +- .../Drinks/mug.rsi/{icon-1.png => fill-1.png} | Bin .../Drinks/mug.rsi/{icon-2.png => fill-2.png} | Bin .../Drinks/mug.rsi/{icon-3.png => fill-3.png} | Bin .../icon-vend-brown.png} | Bin .../Drinks/mug.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug.rsi/meta.json | 11 +- .../mug_black.rsi/{icon-1.png => fill-1.png} | Bin .../mug_black.rsi/{icon-2.png => fill-2.png} | Bin .../mug_black.rsi/{icon-3.png => fill-3.png} | Bin .../mug_black.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_black.rsi/meta.json | 8 +- .../mug_blue.rsi/{icon-1.png => fill-1.png} | Bin .../mug_blue.rsi/{icon-2.png => fill-2.png} | Bin .../mug_blue.rsi/{icon-3.png => fill-3.png} | Bin .../mug_blue.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_blue.rsi/meta.json | 8 +- .../mug_dog.rsi/{icon-1.png => fill-1.png} | Bin .../mug_dog.rsi/{icon-2.png => fill-2.png} | Bin .../mug_dog.rsi/{icon-3.png => fill-3.png} | Bin .../mug_dog.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_dog.rsi/meta.json | 8 +- .../mug_green.rsi/{icon-1.png => fill-1.png} | Bin .../mug_green.rsi/{icon-2.png => fill-2.png} | Bin .../mug_green.rsi/{icon-3.png => fill-3.png} | Bin .../mug_green.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_green.rsi/meta.json | 8 +- .../mug_heart.rsi/{icon-1.png => fill-1.png} | Bin .../mug_heart.rsi/{icon-2.png => fill-2.png} | Bin .../mug_heart.rsi/{icon-3.png => fill-3.png} | Bin .../mug_heart.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_heart.rsi/meta.json | 8 +- .../mug_metal.rsi/{icon-1.png => fill-1.png} | Bin .../mug_metal.rsi/{icon-2.png => fill-2.png} | Bin .../mug_metal.rsi/{icon-3.png => fill-3.png} | Bin .../mug_metal.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_metal.rsi/meta.json | 8 +- .../{icon-1.png => fill-1.png} | Bin .../{icon-2.png => fill-2.png} | Bin .../{icon-3.png => fill-3.png} | Bin .../mug_moebius.rsi/{icon-0.png => icon.png} | Bin .../Drinks/mug_moebius.rsi/meta.json | 8 +- .../mug_one.rsi/{icon-1.png => fill-1.png} | Bin .../mug_one.rsi/{icon-2.png => fill-2.png} | Bin .../mug_one.rsi/{icon-3.png => fill-3.png} | Bin .../mug_one.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_one.rsi/meta.json | 8 +- .../{icon-1.png => fill-1.png} | Bin .../{icon-2.png => fill-2.png} | Bin .../{icon-3.png => fill-3.png} | Bin .../mug_rainbow.rsi/{icon-0.png => icon.png} | Bin .../Drinks/mug_rainbow.rsi/meta.json | 8 +- .../mug_red.rsi/{icon-1.png => fill-1.png} | Bin .../mug_red.rsi/{icon-2.png => fill-2.png} | Bin .../mug_red.rsi/{icon-3.png => fill-3.png} | Bin .../mug_red.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/mug_red.rsi/meta.json | 8 +- .../shotglass.rsi/{fill1.png => fill-1.png} | Bin .../shotglass.rsi/{fill2.png => fill-2.png} | Bin .../Consumable/Drinks/shotglass.rsi/meta.json | 4 +- .../teacup.rsi/{icon-1.png => fill-1.png} | Bin .../teacup.rsi/{icon-2.png => fill-2.png} | Bin .../teacup.rsi/{icon-3.png => fill-3.png} | Bin .../teacup.rsi/{icon-4.png => fill-4.png} | Bin .../teacup.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/teacup.rsi/meta.json | 10 +- .../water_cup.rsi/{icon-1.png => fill-1.png} | Bin .../water_cup.rsi/{icon-0.png => icon.png} | Bin .../Consumable/Drinks/water_cup.rsi/meta.json | 4 +- 135 files changed, 155 insertions(+), 392 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/icon-vend.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/icon_empty.png rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill4.png => fill-4.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill5.png => fill-5.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill6.png => fill-6.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill7.png => fill-7.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill8.png => fill-8.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/{fill9.png => fill-9.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/{fill1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/{fill2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/{fill3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/{fill4.png => fill-4.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/{fill5.png => fill-5.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{fill1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{fill2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{fill3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{fill4.png => fill-4.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{fill5.png => fill-5.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{fill6.png => fill-6.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/{icon.png => icon_empty.png} (100%) delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-0.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-1.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-2.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-3.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-4.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/meta.json delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-0.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-1.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-2.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-3.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-4.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-vend.png delete mode 100644 Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/meta.json rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill4.png => fill-4.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill5.png => fill-5.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill6.png => fill-6.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill7.png => fill-7.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill8.png => fill-8.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/jar.rsi/{fill9.png => fill-9.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{fill1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{fill2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{fill3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{fill4.png => fill-4.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{fill5.png => fill-5.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{fill6.png => fill-6.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/{icon.png => icon_empty.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/{hot_coco.rsi/icon-vend.png => mug.rsi/icon-vend-brown.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/{fill1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/{fill2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/{icon-2.png => fill-2.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/{icon-3.png => fill-3.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/{icon-4.png => fill-4.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/{icon-0.png => icon.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/{icon-1.png => fill-1.png} (100%) rename Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/{icon-0.png => icon.png} (100%) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base.yml index c4e8b020e7..14e4b741c5 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base.yml @@ -91,7 +91,7 @@ # map: ["enum.OpenableVisuals.Layer"] ## Bases for visuals -# TODO standardize state names for fill levels and openable visuals +# New drinks should mirror these state names to reduce clutter when creating new prototypes # Basic visualizer for an openable entity. Requires DrinkBaseOpenable - type: entity @@ -103,13 +103,14 @@ visuals: enum.OpenableVisuals.Opened: enum.OpenableVisuals.Layer: - True: {state: "icon_open"} - False: {state: "icon"} + True: {state: "icon_open"} # lid off + False: {state: "icon"} # lid on - type: Sprite layers: - state: icon map: ["enum.OpenableVisuals.Layer"] - type: ExaminableSolution + solution: *sol examinableWhileClosed: false # If you can't see the fill levels on the sprite, we can assume it's opaque heldOnly: true # If it's opaque, you probably can't see through the open lid from a distance @@ -121,11 +122,12 @@ - type: Appearance - type: Sprite layers: - - state: icon_empty + - state: icon - state: fill-1 map: ["enum.SolutionContainerLayers.Fill"] visible: false - type: SolutionContainerVisuals + solutionName: *sol maxFillLevels: 5 fillBaseName: fill- inHandsMaxFillLevels: 3 @@ -139,7 +141,7 @@ components: - type: Sprite layers: - - state: icon_empty + - state: icon map: [ "enum.SolutionContainerLayers.Base" ] - state: fill-1 map: [ "enum.SolutionContainerLayers.Fill" ] @@ -169,8 +171,8 @@ visuals: enum.OpenableVisuals.Opened: enum.OpenableVisuals.Layer: - True: {state: "icon_open"} - False: {state: "icon_empty"} + True: {state: "icon_open"} # lid off + False: {state: "icon_empty"} # lid on - type: Sprite layers: - state: icon_empty diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles_glass.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles_glass.yml index ec6bdf8002..3aa1e1d547 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles_glass.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles_glass.yml @@ -106,7 +106,7 @@ - type: Sprite sprite: Objects/Consumable/Drinks/alco-bottle.rsi layers: - - state: icon_blue # todo add "icon_empty" state + - state: icon_empty map: ["enum.OpenableVisuals.Layer"] - state: fill-6 map: ["enum.SolutionContainerLayers.Fill"] @@ -260,7 +260,7 @@ - type: Sprite sprite: Objects/Consumable/Drinks/alco-bottle.rsi layers: - - state: icon_green # todo icon_empty + - state: icon_empty map: ["enum.OpenableVisuals.Layer"] - state: fill-6 map: ["enum.SolutionContainerLayers.Fill"] diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml index 3102ffc522..bb3eb76c29 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml @@ -9,7 +9,7 @@ solutions: drink: maxVol: 30 - grindable: + grindable: &grindable reagents: # 5u -> 1/2 steel sheet (10u) - ReagentId: Aluminium # Fun fact: soda can makeup is approx. 75% aluminium and 25% tin/iron. Quantity: 4 @@ -51,12 +51,7 @@ reagents: - ReagentId: Cola Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Tag tags: - Cola @@ -76,12 +71,7 @@ solutions: drink: maxVol: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Tag tags: - Cola @@ -101,12 +91,7 @@ reagents: - ReagentId: IcedTea Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/ice_tea_can.rsi - type: Item @@ -125,12 +110,7 @@ reagents: - ReagentId: LemonLime Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/lemon-lime.rsi - type: Item @@ -149,12 +129,7 @@ reagents: - ReagentId: LemonLimeCranberry Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi - type: Item @@ -206,12 +181,7 @@ reagents: - ReagentId: GrapeSoda Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/purple_can.rsi - type: Item @@ -230,12 +200,7 @@ reagents: - ReagentId: RootBeer Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/rootbeer.rsi - type: Item @@ -258,12 +223,7 @@ reagents: - ReagentId: SodaWater Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/sodawater.rsi - type: Item @@ -282,12 +242,7 @@ reagents: - ReagentId: SpaceMountainWind Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi - type: Item @@ -306,12 +261,7 @@ reagents: - ReagentId: SpaceUp Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/space-up.rsi - type: Item @@ -330,12 +280,7 @@ reagents: - ReagentId: SolDry Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/sol_dry.rsi - type: Item @@ -354,12 +299,7 @@ reagents: - ReagentId: Starkist Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/starkist.rsi - type: Item @@ -378,12 +318,7 @@ reagents: - ReagentId: TonicWater Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/tonic.rsi - type: Item @@ -402,12 +337,7 @@ reagents: - ReagentId: FourteenLoko Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/fourteen_loko.rsi - type: Item @@ -426,12 +356,7 @@ reagents: - ReagentId: ChangelingSting Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/changelingsting.rsi - type: Item @@ -450,12 +375,7 @@ reagents: - ReagentId: DrGibb Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/dr_gibb.rsi - type: Item @@ -478,12 +398,7 @@ Quantity: 20 - ReagentId: Ice Quantity: 5 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/robustnukie.rsi - type: Item @@ -502,12 +417,7 @@ reagents: - ReagentId: EnergyDrink Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/energy_drink.rsi - type: Item @@ -526,12 +436,7 @@ reagents: - ReagentId: ShamblersJuice Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/shamblersjuice.rsi - type: Item @@ -550,12 +455,7 @@ reagents: - ReagentId: PwrGame Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/pwrgame.rsi - type: Item @@ -574,12 +474,7 @@ reagents: - ReagentId: Beer Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/beer_can.rsi - type: Item @@ -602,12 +497,7 @@ reagents: - ReagentId: Wine Quantity: 30 - grindable: - reagents: - - ReagentId: Aluminium - Quantity: 4 - - ReagentId: Iron - Quantity: 1 + grindable: *grindable - type: Sprite sprite: Objects/Consumable/Drinks/wine_can.rsi - type: Item diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml index e1fe78c433..7b1320ba49 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cups.yml @@ -22,22 +22,16 @@ # A mug is a type of cup.[2] - type: entity abstract: true - parent: [ DrinkBaseMaterialPorcelain, DrinkBaseCup ] # todo Should use DrinkVisualsFill, but inheritors have no in-hand and state names are wrong + parent: [ DrinkBaseMaterialPorcelain, DrinkBaseCup, DrinkVisualsFill ] id: DrinkBaseMug name: mug description: A mug. components: - type: Sprite sprite: Objects/Consumable/Drinks/mug.rsi - layers: - - state: icon-0 - - state: icon-3 - map: ["enum.SolutionContainerLayers.Fill"] - visible: false - - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 3 - fillBaseName: icon- + inHandsFillBaseName: null ## Misc Cups @@ -53,18 +47,13 @@ price: 125 - type: entity - parent: DrinkBaseMug + parent: DrinkBaseMug # a teacup is basically a mug id: DrinkTeacupEmpty name: teacup description: A plain white porcelain teacup. components: - type: Sprite sprite: Objects/Consumable/Drinks/teacup.rsi - layers: - - state: icon-0 - - state: icon-4 - map: ["enum.SolutionContainerLayers.Fill"] - visible: false - type: SolutionContainerVisuals maxFillLevels: 4 @@ -76,20 +65,11 @@ components: - type: Sprite sprite: Objects/Consumable/Drinks/glass_coupe_shape.rsi - layers: - - state: icon # todo add "icon_empty" state to match DrinkVisualsFillOverlay - map: [ "enum.SolutionContainerLayers.Base" ] - - state: fill1 - map: [ "enum.SolutionContainerLayers.Fill" ] - visible: false - - state: icon-front - map: [ "enum.SolutionContainerLayers.Overlay" ] - type: SolutionContainerVisuals - fillBaseName: fill # todo rename to "fill-" to match DrinkVisualsFillOverlay inHandsMaxFillLevels: 1 - type: entity - parent: [DrinkBaseMaterialCardboard, DrinkBaseCup] # TODO should use DrinkVisualsFill but state names are wrong and no inhand + parent: [DrinkBaseMaterialCardboard, DrinkBaseCup, DrinkBaseEmptyTrash, DrinkVisualsFill] id: DrinkWaterCup name: water cup description: A paper water cup. @@ -102,22 +82,14 @@ size: Tiny - type: Sprite sprite: Objects/Consumable/Drinks/water_cup.rsi - layers: - - state: icon-0 - - state: icon-1 - map: ["enum.SolutionContainerLayers.Fill"] - visible: false - type: SolutionContainerVisuals maxFillLevels: 1 - fillBaseName: icon- + inHandsFillBaseName: null - type: Tag tags: - Trash - DrinkCup - WhitelistChameleon - - type: Appearance - - type: TrashOnSolutionEmpty - solution: drink - type: Clothing slots: - HEAD @@ -240,16 +212,13 @@ - ReagentId: HotCocoa Quantity: 20 - type: Icon - sprite: Objects/Consumable/Drinks/hot_coco.rsi - state: icon-vend + sprite: Objects/Consumable/Drinks/mug.rsi + state: icon-vend-brown - type: Sprite - sprite: Objects/Consumable/Drinks/hot_coco.rsi layers: - - state: icon-0 - - map: ["enum.SolutionContainerLayers.Fill"] - state: icon-4 - - type: SolutionContainerVisuals - maxFillLevels: 4 + - state: icon + - state: fill-3 + map: ["enum.SolutionContainerLayers.Fill"] - type: TrashOnSolutionEmpty solution: drink @@ -267,16 +236,13 @@ - ReagentId: Coffee Quantity: 20 - type: Icon - sprite: Objects/Consumable/Drinks/hot_coffee.rsi - state: icon-vend + sprite: Objects/Consumable/Drinks/mug.rsi + state: icon-vend-brown - type: Sprite - sprite: Objects/Consumable/Drinks/hot_coffee.rsi layers: - - state: icon-0 - - map: ["enum.SolutionContainerLayers.Fill"] - state: icon-4 - - type: SolutionContainerVisuals - maxFillLevels: 4 + - state: icon + - state: fill-3 + map: ["enum.SolutionContainerLayers.Fill"] - type: TrashOnSolutionEmpty solution: drink @@ -293,16 +259,17 @@ reagents: - ReagentId: CafeLatte Quantity: 20 + - type: Icon + sprite: Objects/Consumable/Drinks/cafe_latte.rsi + state: icon-vend - type: Sprite sprite: Objects/Consumable/Drinks/cafe_latte.rsi layers: - - state: icon_empty - - state: fill-1 - map: ["enum.SolutionContainerLayers.Fill"] - - type: Appearance + - state: icon + - state: fill-1 + map: ["enum.SolutionContainerLayers.Fill"] - type: SolutionContainerVisuals maxFillLevels: 1 - fillBaseName: fill- changeColor: false - type: TrashOnSolutionEmpty solution: drink diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml index 1197356553..f7c984171d 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml @@ -8,9 +8,9 @@ collection: packetOpenSounds - type: Sprite layers: - - state: icon + - state: icon_empty map: ["enum.OpenableVisuals.Layer"] - - state: fill6 + - state: fill-6 map: [ "enum.SolutionContainerLayers.Fill" ] # already has liquid, so no visible: false - state: icon-front map: [ "enum.SolutionContainerLayers.Overlay" ] @@ -20,13 +20,6 @@ maxVol: 30 - type: SolutionContainerVisuals maxFillLevels: 6 - fillBaseName: fill # TODO rename to "fill-" - - type: GenericVisualizer - visuals: - enum.OpenableVisuals.Opened: - enum.OpenableVisuals.Layer: - True: {state: "icon_open"} - False: {state: "icon"} - type: TrashOnSolutionEmpty solution: drink @@ -97,8 +90,6 @@ components: - type: Sprite sprite: Objects/Consumable/Drinks/jar_what.rsi - - type: ExaminableSolution - solution: drink - type: FitsInDispenser solution: drink - type: Tag diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml index d4fe5da5b6..10a2b76657 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml @@ -4,35 +4,23 @@ # Transformable container - normal glass - type: entity - parent: [DrinkBaseMaterialGlass, DrinkBaseCup] # todo parent to DrinkVisualsFillOverlay after in-hands are added + parent: [DrinkBaseMaterialGlass, DrinkBaseCup, DrinkVisualsFillOverlay] id: DrinkGlass name: metamorphic glass description: A metamorphic glass that automagically turns into a glass appropriate for the drink within. There's a sanded off patent number on the bottom. components: - type: Sprite sprite: Objects/Consumable/Drinks/glass_clear.rsi - layers: - - state: icon # TODO add "icon_empty" state to match "DrinkVisualsFillOverlay" - map: [ "enum.SolutionContainerLayers.Base" ] - - state: fill1 - map: [ "enum.SolutionContainerLayers.Fill" ] - visible: false - - state: icon-front - map: [ "enum.SolutionContainerLayers.Overlay" ] - - type: Appearance - type: SolutionContainerManager solutions: drink: maxVol: 30 - type: SolutionContainerVisuals maxFillLevels: 9 - fillBaseName: fill # todo rename to "fill-", add in-hands, then add parent "DrinkVisualsFillOverlay" metamorphic: true metamorphicDefaultSprite: sprite: Objects/Consumable/Drinks/glass_clear.rsi state: icon - inHandsMaxFillLevels: 3 - inHandsFillBaseName: -fill- - type: Tag tags: - DrinkCup # Do these tags @@ -47,14 +35,6 @@ components: - type: Sprite sprite: Objects/Consumable/Drinks/jar.rsi - layers: - - state: icon - map: [ "enum.SolutionContainerLayers.Base" ] - - state: fill1 - map: [ "enum.SolutionContainerLayers.Fill" ] - visible: false - - state: icon-front - map: [ "enum.SolutionContainerLayers.Overlay" ] - type: SolutionContainerManager solutions: drink: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml index adc99f46ad..b9929b6704 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml @@ -12,17 +12,8 @@ size: Tiny - type: Sprite sprite: Objects/Consumable/Drinks/shotglass.rsi - layers: - - state: icon # TODO add "icon_empty" state to match "DrinkVisualsFillOverlay" - map: [ "enum.SolutionContainerLayers.Base" ] - - state: fill1 - map: [ "enum.SolutionContainerLayers.Fill" ] - visible: false - - state: icon-front - map: [ "enum.SolutionContainerLayers.Overlay" ] - type: SolutionContainerVisuals maxFillLevels: 2 - fillBaseName: fill # TODO rename to "fill-" to match "DrinkVisualsFillOverlay" inHandsMaxFillLevels: 1 - type: FitsInDispenser solution: drink @@ -184,11 +175,6 @@ maxVol: 60 - type: Sprite sprite: Objects/Consumable/Drinks/pitcher.rsi - layers: - - state: icon # TODO add "icon_empty" state to match "DrinkVisualsFill" - - state: fill-1 - map: ["enum.SolutionContainerLayers.Fill"] - visible: false - type: SolutionContainerVisuals maxFillLevels: 6 inHandsMaxFillLevels: 2 diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml index 68448bc0c9..f49e9f9671 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml @@ -96,7 +96,7 @@ color: "#664300" metamorphicSprite: sprite: Objects/Consumable/Drinks/cafe_latte.rsi - state: icon_empty + state: icon metamorphicMaxFillLevels: 1 metamorphicFillBaseName: fill- metamorphicChangeColor: false diff --git a/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/icon-vend.png b/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/icon-vend.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d52da5d391119b79ff0649f89e2c94d16ab9d1 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJPo6H0Ar*6yZ3-SR9Clz@#<;ci z3gcoviP8frnB8O#0D)82qte&c{vKDC7ZEw)Va)C`-|la{=6^4?y}#Hap6Z)w8I<_f z|FkzYo~+_NL4?Wt?Q|oZS8on$rRVLR(wKNzEvQHNE@S@veW?cK=EpVN`4nz4J~0DHD6wQP77^omF(afqv0;fu zLV|+*I?XZ$9jSkRejZlP(>n)p--l06z1L)|c*hWNL1-WqDfb`+q*=cj*G&`$GxueRA_G zft=c70>&5^W3n0@AzGNWZP)Fus%kegj^q06oD(nNOB#&Z9jCB8-)Qg% z8~|Wh77!5tV4mmQ%;N%av{wyc&N=t2z?SXJ?~o*5tu2nGkh6e_qWlCOAFW8k1qX^K Q00000NkvXXt^-0~f;DP%p8x;= delta 272 zcmV+r0q_2$0;>X$B!BWrL_t(|oMSw2-~huw0;U1AebfP?4j6U7r~^hFz`(%3LW<&b z>(>3pCm$3P#7Hv-OrJjee<}Y;2EFg>ZR zXKufgfnn1oQj8FWiU54$02pc|QMmva;0gtDd{34Gs0{|ZIv#bvr~?Mv0RV3{ WPq?k(cwhhk00{s|MNUMnLSTY&dvuBb diff --git a/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/icon_empty.png b/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/icon_empty.png deleted file mode 100644 index a5564b59761db2dce9b631c3c1705a178c9b86fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmV+=0owkFP)Px#-$_J4R9J=WlD!RtFbqaNPPah{k3vDi3^dG;i9ACZ3MQao0k)vX21vOo=!E!j z0>w$^Cq+W?C;Z|VP!vT`{+&V+8ioM?&~;rn%Qa0?06<;WVu80b$jpI=Fiq2Loru89 z!CEW2RI&g7lx2BZ>-#?Ccj*G&`$GxueRA_Gft=c70>&5^W3n0@AzGNWZP)Fus%keg zj^q06oD(nNOB#&Z9jCB8-)Qg%8~|Wh77!5tV4mmQ%;N%av{wyc&N=t2 rz?SXJ?~o*5tu2nGkh6e_qWlCOAFW8k1qX^K00000NkvXXu0mjfrEYf| diff --git a/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/meta.json index c3942590a6..737fc565b1 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/cafe_latte.rsi/meta.json @@ -12,9 +12,6 @@ { "name": "icon" }, - { - "name": "icon_empty" - }, { "name": "fill-1" }, @@ -25,6 +22,9 @@ { "name": "inhand-left", "directions": 4 + }, + { + "name": "icon-vend" } ] } diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill1.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill2.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill3.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill3.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill4.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-4.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill4.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-4.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill5.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-5.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill5.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-5.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill6.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-6.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill6.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-6.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill7.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-7.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill7.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-7.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill8.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-8.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill8.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-8.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill9.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-9.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill9.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/fill-9.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json index 16bcd31794..4f1b5d9173 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json @@ -14,31 +14,31 @@ "name": "icon-front" }, { - "name": "fill1" + "name": "fill-1" }, { - "name": "fill2" + "name": "fill-2" }, { - "name": "fill3" + "name": "fill-3" }, { - "name": "fill4" + "name": "fill-4" }, { - "name": "fill5" + "name": "fill-5" }, { - "name": "fill6" + "name": "fill-6" }, { - "name": "fill7" + "name": "fill-7" }, { - "name": "fill8" + "name": "fill-8" }, { - "name": "fill9" + "name": "fill-9" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill1.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill2.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill3.png b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill3.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill4.png b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-4.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill4.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-4.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill5.png b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-5.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill5.png rename to Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/fill-5.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/meta.json index 6b42e9b9f7..ddffe3572d 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/glass_coupe_shape.rsi/meta.json @@ -14,19 +14,19 @@ "name": "icon-front" }, { - "name": "fill1" + "name": "fill-1" }, { - "name": "fill2" + "name": "fill-2" }, { - "name": "fill3" + "name": "fill-3" }, { - "name": "fill4" + "name": "fill-4" }, { - "name": "fill5" + "name": "fill-5" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill1.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill2.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill3.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill3.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill4.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-4.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill4.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-4.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill5.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-5.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill5.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-5.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill6.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-6.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill6.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/fill-6.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/icon_empty.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/icon.png rename to Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/icon_empty.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/meta.json index afc42a380e..a60196b83b 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/glue-tube.rsi/meta.json @@ -8,7 +8,7 @@ "copyright": "Created by discord: brainfood#7460 / github: brainfood1183. Inhands by Tiniest Shark (Github)", "states": [ { - "name": "icon" + "name": "icon_empty" }, { "name": "icon_open" @@ -17,22 +17,22 @@ "name": "icon-front" }, { - "name": "fill1" + "name": "fill-1" }, { - "name": "fill2" + "name": "fill-2" }, { - "name": "fill3" + "name": "fill-3" }, { - "name": "fill4" + "name": "fill-4" }, { - "name": "fill5" + "name": "fill-5" }, { - "name": "fill6" + "name": "fill-6" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-0.png deleted file mode 100644 index d2a5ef967aa5a6572b56ac10e7db2ca8e7afe73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;AKx2$B+p3WC_;A2_ijBg8UK-O*|jGTej+j2&U{@&|twVJ)djF|JRpg+rG=kO?u0rrr|5X5P9zGAJH63>Fqi! z%r_MbzXT|XO?bi}@L*yYb2JaLf|&;oi$kBnRYeu+2TvC-4iIBHaKzyv!=d+iXH{WSGuHK6WyWRQ?x$ZYd||7+v1>p<@@c)I$ztaD0e F0s!wKYpehO diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-1.png deleted file mode 100644 index c97ead8da8530a03451da7a9f4928c5ca14f244b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pq8hLV@QPi+hZGf85DR}Hm3YvsOYqxLG@7H pJ1&NO*I!OG-Q?b{!*C#bm08Ds7N(o54!S^H44$rjF6*2UngDw2Dlq^6 diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-2.png deleted file mode 100644 index 18ff175dadad15aa8176531790f36105fe7fa7c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!ps}ZmV@QPi+p~&%3<^BV2j2egZ|h`r6j1Pd z=QDd28$(U{ly#>wcTb(`|Lw3&EF(jmup#5Oh1|dXJ+rd|YG?3t^>bP0l+XkK7|t%k diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-3.png deleted file mode 100644 index a60b6edb6dbf9af1e7887fdadd418099f0f307d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!psA;eV@QPi+jELS3<^BV8$SMbKYWBo<3NLl zPj*>0!-4FzMbZAD>bjw}MWtK%cGU7Qd}!=o6wBdYE=qbV4K#qk)78&qol`;+092VR AYXATM diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-4.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-4.png deleted file mode 100644 index 52a03df50852262789b681a9fc36bd6d54defc2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!prxmaV@QPi+Y5?(3xtJ#Y{^{GV9Uu9D+IS|L&FJJ|*=?K=3FI+&y85}Sb4q9e E0B=w+d;kCd diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/meta.json deleted file mode 100644 index b22da85aa9..0000000000 --- a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/meta.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", - "states": [{ - "name": "icon-0" - }, - { - "name": "icon-1" - }, - { - "name": "icon-2" - }, - { - "name": "icon-3" - }, - { - "name": "icon-4" - }, - { - "name": "icon-vend" - } - ] -} diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-0.png deleted file mode 100644 index d2a5ef967aa5a6572b56ac10e7db2ca8e7afe73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;AKx2$B+p3WC_;A2_ijBg8UK-O*|jGTej+j2&U{@&|twVJ)djF|JRpg+rG=kO?u0rrr|5X5P9zGAJH63>Fqi! z%r_MbzXT|XO?bi}@L*yYb2JaLf|&;oi$kBnRYeu+2TvC-4iIBHaKzyv!=d+iXH{WSGuHK6WyWRQ?x$ZYd||7+v1>p<@@c)I$ztaD0e F0s!wKYpehO diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-1.png deleted file mode 100644 index c97ead8da8530a03451da7a9f4928c5ca14f244b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pq8hLV@QPi+hZGf85DR}Hm3YvsOYqxLG@7H pJ1&NO*I!OG-Q?b{!*C#bm08Ds7N(o54!S^H44$rjF6*2UngDw2Dlq^6 diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-2.png deleted file mode 100644 index 18ff175dadad15aa8176531790f36105fe7fa7c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!ps}ZmV@QPi+p~&%3<^BV2j2egZ|h`r6j1Pd z=QDd28$(U{ly#>wcTb(`|Lw3&EF(jmup#5Oh1|dXJ+rd|YG?3t^>bP0l+XkK7|t%k diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-3.png deleted file mode 100644 index a60b6edb6dbf9af1e7887fdadd418099f0f307d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!psA;eV@QPi+jELS3<^BV8$SMbKYWBo<3NLl zPj*>0!-4FzMbZAD>bjw}MWtK%cGU7Qd}!=o6wBdYE=qbV4K#qk)78&qol`;+092VR AYXATM diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-4.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-4.png deleted file mode 100644 index 52a03df50852262789b681a9fc36bd6d54defc2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!prxmaV@QPi+Y5?(3xtJ#Y{^{GV9Uu9D+IS|L&FJJ|*=?K=3FI+&y85}Sb4q9e E0B=w+d;kCd diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-vend.png b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/icon-vend.png deleted file mode 100644 index 765112be764715026b84a09ea1947aa20a14b84f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmV+?0oeYDP)Px#;Ymb6R9J=WlsyWf~7m)wJ try&VAuF&dw{k1tz@X1NYFbu=|oI4v3LAg002ovPDHLkV1gcBbJ+j@ diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/meta.json deleted file mode 100644 index b22da85aa9..0000000000 --- a/Resources/Textures/Objects/Consumable/Drinks/hot_coffee.rsi/meta.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", - "states": [{ - "name": "icon-0" - }, - { - "name": "icon-1" - }, - { - "name": "icon-2" - }, - { - "name": "icon-3" - }, - { - "name": "icon-4" - }, - { - "name": "icon-vend" - } - ] -} diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill1.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill2.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill3.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill3.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill4.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-4.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill4.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-4.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill5.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-5.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill5.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-5.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill6.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-6.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill6.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-6.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill7.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-7.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill7.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-7.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill8.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-8.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill8.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-8.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill9.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-9.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill9.png rename to Resources/Textures/Objects/Consumable/Drinks/jar.rsi/fill-9.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/meta.json index f7db09b523..59e2295761 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/meta.json @@ -14,31 +14,31 @@ "name": "icon-front" }, { - "name": "fill1" + "name": "fill-1" }, { - "name": "fill2" + "name": "fill-2" }, { - "name": "fill3" + "name": "fill-3" }, { - "name": "fill4" + "name": "fill-4" }, { - "name": "fill5" + "name": "fill-5" }, { - "name": "fill6" + "name": "fill-6" }, { - "name": "fill7" + "name": "fill-7" }, { - "name": "fill8" + "name": "fill-8" }, { - "name": "fill9" + "name": "fill-9" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill1.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill2.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill3.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill3.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill4.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-4.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill4.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-4.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill5.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-5.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill5.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-5.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill6.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-6.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill6.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/fill-6.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/icon_empty.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/icon.png rename to Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/icon_empty.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json index afc42a380e..a60196b83b 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/lube-tube.rsi/meta.json @@ -8,7 +8,7 @@ "copyright": "Created by discord: brainfood#7460 / github: brainfood1183. Inhands by Tiniest Shark (Github)", "states": [ { - "name": "icon" + "name": "icon_empty" }, { "name": "icon_open" @@ -17,22 +17,22 @@ "name": "icon-front" }, { - "name": "fill1" + "name": "fill-1" }, { - "name": "fill2" + "name": "fill-2" }, { - "name": "fill3" + "name": "fill-3" }, { - "name": "fill4" + "name": "fill-4" }, { - "name": "fill5" + "name": "fill-5" }, { - "name": "fill6" + "name": "fill-6" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-vend.png b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-vend-brown.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/hot_coco.rsi/icon-vend.png rename to Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-vend-brown.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/meta.json index 052ebf11aa..3e7bc06ad1 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", @@ -26,6 +26,9 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "icon-vend-brown" } ] } diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_black.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_blue.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/meta.json index d7e6f34541..8b87125a21 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_dog.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/unitystation/unitystation/blob/221bbcc50edf4e63dc71ac6fd5152664a6b6745a/UnityProject/Assets/Textures/items/drinks/mug_gromit.png | Created By https://github.com/ksivte, inhands and modification by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_green.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_heart.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_metal.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_moebius.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_one.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_rainbow.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/meta.json index 052ebf11aa..a64a38d5eb 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/mug_red.rsi/meta.json @@ -8,16 +8,16 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi, inhands by TiniestShark (github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill1.png b/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill1.png rename to Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill2.png b/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill2.png rename to Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/meta.json index cf438684de..c7d6205b6f 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/shotglass.rsi/meta.json @@ -14,10 +14,10 @@ "name": "icon-front" }, { - "name": "fill1" + "name": "fill-1" }, { - "name": "fill2" + "name": "fill-2" }, { "name": "inhand-left", diff --git a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-2.png b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-2.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-2.png rename to Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-2.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-3.png b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-3.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-3.png rename to Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-3.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-4.png b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-4.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-4.png rename to Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/fill-4.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/meta.json index 8f340a2eab..060a643bef 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/teacup.rsi/meta.json @@ -8,19 +8,19 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi. Inhands by Tiniest Shark (Github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { - "name": "icon-2" + "name": "fill-2" }, { - "name": "icon-3" + "name": "fill-3" }, { - "name": "icon-4" + "name": "fill-4" }, { "name": "icon-vend-tea" diff --git a/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/icon-1.png b/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/fill-1.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/icon-1.png rename to Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/fill-1.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/icon-0.png b/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/icon.png similarity index 100% rename from Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/icon-0.png rename to Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/icon.png diff --git a/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/meta.json index 6301d09d7d..61406ac3b6 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/water_cup.rsi/meta.json @@ -8,10 +8,10 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi. Inhands by Tiniest Shark (Github)", "states": [ { - "name": "icon-0" + "name": "icon" }, { - "name": "icon-1" + "name": "fill-1" }, { "name": "inhand-right", From 745c6d0edc2a1271431a4e797134de21fc331e52 Mon Sep 17 00:00:00 2001 From: kosticia Date: Tue, 7 Oct 2025 19:09:20 +0300 Subject: [PATCH 066/216] Unpredict MagnetPickupSystem.cs (#39988) * unpredict * predict --- Content.Shared/Storage/Components/MagnetPickupComponent.cs | 6 +++++- Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Storage/Components/MagnetPickupComponent.cs b/Content.Shared/Storage/Components/MagnetPickupComponent.cs index 90b7e83d63..72a9c81077 100644 --- a/Content.Shared/Storage/Components/MagnetPickupComponent.cs +++ b/Content.Shared/Storage/Components/MagnetPickupComponent.cs @@ -1,15 +1,19 @@ using Content.Shared.Inventory; +using Robust.Shared.GameStates; namespace Content.Shared.Storage.Components; /// /// Applies an ongoing pickup area around the attached entity. /// -[RegisterComponent, AutoGenerateComponentPause] +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState] +[AutoGenerateComponentPause] public sealed partial class MagnetPickupComponent : Component { [ViewVariables(VVAccess.ReadWrite), DataField("nextScan")] [AutoPausedField] + [AutoNetworkedField] public TimeSpan NextScan = TimeSpan.Zero; /// diff --git a/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs b/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs index 9a0b48e65b..27a15c87a6 100644 --- a/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs +++ b/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs @@ -47,6 +47,7 @@ public sealed class MagnetPickupSystem : EntitySystem continue; comp.NextScan += ScanDelay; + Dirty(uid, comp); if (!_inventory.TryGetContainingSlot((uid, xform, meta), out var slotDef)) continue; From 4bd1cb3ac44a924e45ae374fc0edcc8f46511dde Mon Sep 17 00:00:00 2001 From: FungiFellow <151778459+FungiFellow@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:20:40 -0400 Subject: [PATCH 067/216] Cancer Mice Ghostrole Info (#40102) * Adjusted Cancer Mouse Ghost Info * Updated Smite Snail * Added ghostrole info * Remove snail info * Update space.yml * Update Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl * Update Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl | 3 +++ Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index a578adf82b..6c4ca0c4f4 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -32,6 +32,9 @@ ghost-role-information-silicon-rules = You are a [color={role-type-silicon-color ghost-role-information-mouse-name = Mouse ghost-role-information-mouse-description = A hungry and mischievous mouse. +ghost-role-information-cancer-mouse-name = Cancer Mouse +ghost-role-information-cancer-mouse-description = An irradiated mouse, spread your affliction and seek food. + ghost-role-information-mothroach-name = Mothroach ghost-role-information-mothroach-description = A cute but mischievous mothroach. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 5aedad4596..c812140812 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1980,6 +1980,12 @@ parent: MobMouse id: MobMouseCancer components: + - type: GhostRole + name: ghost-role-information-cancer-mouse-name + description: ghost-role-information-cancer-mouse-description + rules: ghost-role-information-freeagent-rules + mindRoles: + - MindRoleGhostRoleFreeAgent - type: Sprite color: LightGreen - type: PointLight From 6dc131b76c87b2c6b87cd7f4c2a029be66a058ba Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 16:34:50 +0000 Subject: [PATCH 068/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e75a5363c6..d2e8d1f870 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: B-Kirill - changes: - - message: Added new fun meteors variations (Cosmic cow, Honksteroid, Space potato) - that drop unique loot upon destruction. Urist McMeteor now shatters into meat - when explodes. - type: Add - id: 8537 - time: '2025-05-20T13:04:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37327 - author: Kittygyat changes: - message: Added a new, faster way for slimepeople to access their own special inventory, @@ -3956,3 +3947,10 @@ id: 9044 time: '2025-10-07T16:05:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40615 +- author: FungiFellow + changes: + - message: Cancer Mice now have unique ghost role entries. + type: Tweak + id: 9045 + time: '2025-10-07T16:33:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40102 From 167f3f2b92424f358b29265b3d0157e298a96480 Mon Sep 17 00:00:00 2001 From: FungiFellow <151778459+FungiFellow@users.noreply.github.com> Date: Tue, 7 Oct 2025 14:10:43 -0400 Subject: [PATCH 069/216] Biosuit Suit Slots (#39888) * Added Gastank Storage to Biosuits, Weapon/Gas to Sec Biosuit * Fixed Error * Sec Suit no longer Child to General Biosuit * Update cargo_security.yml --- Resources/Prototypes/Catalog/Cargo/cargo_security.yml | 2 +- .../Prototypes/Entities/Clothing/OuterClothing/bio.yml | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml index 9ff3488a43..9b5c0ddad6 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml @@ -54,7 +54,7 @@ sprite: Clothing/Head/Hoods/Bio/security.rsi state: icon product: CrateSecurityBiosuit - cost: 800 + cost: 1600 category: cargoproduct-category-name-security group: market diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml index 4da176e2ed..eb5827e013 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml @@ -1,5 +1,5 @@ - type: entity - parent: ClothingOuterBaseLarge + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothingGasTanks] id: ClothingOuterBioGeneral name: bio suit suffix: Generic @@ -64,7 +64,7 @@ sprite: Clothing/OuterClothing/Bio/scientist.rsi - type: entity - parent: [ClothingOuterBioGeneral, BaseSecurityContraband] + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseSecurityContraband] id: ClothingOuterBioSecurity name: bio suit suffix: Security @@ -82,7 +82,11 @@ Piercing: 0.8 - type: ZombificationResistance zombificationResistanceCoefficient: 0.4 - + - type: GroupExamine + - type: ClothingSpeedModifier + walkModifier: 0.95 + sprintModifier: 0.95 + - type: entity parent: ClothingOuterBioGeneral id: ClothingOuterBioVirology From 1deef4bb7e66d423fc722406cfa932799fe9da49 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 18:23:15 +0000 Subject: [PATCH 070/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d2e8d1f870..552aeaff27 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Kittygyat - changes: - - message: Added a new, faster way for slimepeople to access their own special inventory, - with LMB. - type: Add - id: 8538 - time: '2025-05-20T16:55:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37592 - author: FrostWinters changes: - message: Histamines no longer cause radiation. @@ -3954,3 +3946,13 @@ id: 9045 time: '2025-10-07T16:33:42.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40102 +- author: FungiFellow + changes: + - message: Biosuits can now fit Gastanks in Suit Storage, the Security Biosuit can + fit both Gastanks and Weapons + type: Add + - message: Security Biosuits Cost has been increased 800->1600 + type: Tweak + id: 9046 + time: '2025-10-07T18:22:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39888 From d463aba5875861226000167f991420223a5fa181 Mon Sep 17 00:00:00 2001 From: Deserty0 <86846189+Deserty0@users.noreply.github.com> Date: Wed, 8 Oct 2025 04:53:25 +1000 Subject: [PATCH 071/216] New HTN precondition: has status effect (#39781) * Create HasStatusEffectPrecondition.cs * Update HasStatusEffectPrecondition.cs * ok now it works * Update HasStatusEffectPrecondition.cs --- .../HasStatusEffectPrecondition.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Content.Server/NPC/HTN/Preconditions/HasStatusEffectPrecondition.cs diff --git a/Content.Server/NPC/HTN/Preconditions/HasStatusEffectPrecondition.cs b/Content.Server/NPC/HTN/Preconditions/HasStatusEffectPrecondition.cs new file mode 100644 index 0000000000..d11a99e2b5 --- /dev/null +++ b/Content.Server/NPC/HTN/Preconditions/HasStatusEffectPrecondition.cs @@ -0,0 +1,28 @@ +using Content.Shared.StatusEffectNew; +using Robust.Shared.Prototypes; + +namespace Content.Server.NPC.HTN.Preconditions; + +/// +/// Returns true if entity have specified status effect +/// +public sealed partial class HasStatusEffectPrecondition : HTNPrecondition +{ + private StatusEffectsSystem _statusEffects = default!; + + [DataField(required: true)] + public EntProtoId StatusEffect; + + public override void Initialize(IEntitySystemManager sysManager) + { + base.Initialize(sysManager); + _statusEffects = sysManager.GetEntitySystem(); + } + + public override bool IsMet(NPCBlackboard blackboard) + { + var owner = blackboard.GetValue(NPCBlackboard.Owner); + + return _statusEffects.HasStatusEffect(owner, StatusEffect); + } +} From afe11dc9595dc4a976ced6a156bd331101a672a4 Mon Sep 17 00:00:00 2001 From: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:25:19 -0400 Subject: [PATCH 072/216] =?UTF-8?q?MRE=20wrappers=20/=20cotton=20nutri-b?= =?UTF-8?q?=C3=A2tards=20are=20no=20longer=20twice=20as=20nutritious=20as?= =?UTF-8?q?=20nutribricks=20(#40761)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/Objects/Consumable/Food/Baked/bread.yml | 4 ++-- .../Prototypes/Entities/Objects/Consumable/Food/snacks.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 6edff6e98a..d9475c9ebe 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -1051,7 +1051,7 @@ - type: SolutionContainerManager solutions: food: - maxVol: 45 + maxVol: 26 reagents: - ReagentId: Fiber - Quantity: 40 + Quantity: 20 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index e53e99e9db..27cc06023c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -864,10 +864,10 @@ - type: SolutionContainerManager solutions: food: - maxVol: 45 + maxVol: 25 reagents: - ReagentId: Fiber - Quantity: 40 + Quantity: 20 - type: Tag tags: - ClothMade From 0734cdd18abfb71e90c3710e9fb778c8ef170e10 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 19:37:39 +0000 Subject: [PATCH 073/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 552aeaff27..ecfa489faa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: FrostWinters - changes: - - message: Histamines no longer cause radiation. - type: Tweak - - message: Epinephrine treats Histamines above OD threshold. - type: Tweak - id: 8544 - time: '2025-05-21T01:12:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37460 - author: Minty642 changes: - message: Added fungal soil, maintenance version of hydroponics. @@ -3956,3 +3947,10 @@ id: 9046 time: '2025-10-07T18:22:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39888 +- author: Hitlinemoss + changes: + - message: MRE wrappers are no longer twice as nutritious as the actual food within. + type: Fix + id: 9047 + time: '2025-10-07T19:36:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40761 From 5be5e280be9955a206ca485c9c42d4604470e77a Mon Sep 17 00:00:00 2001 From: Mora <46364955+TrixxedHeart@users.noreply.github.com> Date: Tue, 7 Oct 2025 18:03:21 -0500 Subject: [PATCH 074/216] Added Vox Beak Types, New Markings, and Sprite Layering Fixes (#40569) * Added more Vox customizations * Adds Vox Head Markings * Update meta.json * stray comma, woe be upon ye * added tiny pixel to visage left and right * Added eyeliner ftl * Removed duplicate FTL how the fuck did this happen * Added cheek marking * Made tip marking look a bit better * Fix eyeliner ID * ok whatever shut up build test. mean to me * changed underbelly to have more flat transparency * didnt like how it looked so i adjusted it * Adjusted base eyeliner color * Fixed inconsistency with nightling head tattoo * Updated V tattoo * Delete chest_v.png * fix yml ITS EVEN FUNNIER THE SECOND TIME * minor sprite fix * Update head.png * Re added stray pixel, added square cere beak * Added hooked beak --------- Co-authored-by: TrixxedHeart <46364955+TrixxedBit@users.noreply.github.com> --- Resources/Locale/en-US/markings/vox.ftl | 56 +++++- .../Mobs/Customization/Markings/vox_parts.yml | 46 +++++ .../Customization/Markings/vox_tattoos.yml | 168 +++++++++++++++++- Resources/Prototypes/Species/vox.yml | 3 + .../Mobs/Customization/vox_parts.rsi/beak.png | Bin 396 -> 399 bytes .../vox_parts.rsi/beak_hooked.png | Bin 0 -> 387 bytes .../vox_parts.rsi/beak_shaved.png | Bin 0 -> 384 bytes .../vox_parts.rsi/beak_squarecere.png | Bin 0 -> 392 bytes .../Customization/vox_parts.rsi/meta.json | 14 +- .../vox_tattoos.rsi/beakcover_stripe.png | Bin 0 -> 296 bytes .../vox_tattoos.rsi/beakcover_tip.png | Bin 0 -> 332 bytes .../vox_tattoos.rsi/cheekblush.png | Bin 0 -> 3042 bytes .../vox_tattoos.rsi/chest_v_1.png | Bin 0 -> 3124 bytes .../vox_tattoos.rsi/chest_v_2.png | Bin 0 -> 3101 bytes .../vox_tattoos.rsi/eyeliner.png | Bin 0 -> 2981 bytes .../Customization/vox_tattoos.rsi/meta.json | 54 +++++- .../vox_tattoos.rsi/nightbelt.png | Bin 0 -> 3123 bytes .../vox_tattoos.rsi/tattoo_arrow_head.png | Bin 0 -> 3035 bytes .../vox_tattoos.rsi/tattoo_nightling_head.png | Bin 0 -> 3126 bytes .../vox_tattoos.rsi/underbelly.png | Bin 0 -> 3131 bytes .../Customization/vox_tattoos.rsi/visage.png | Bin 0 -> 3111 bytes .../vox_tattoos.rsi/visage_l.png | Bin 0 -> 3045 bytes .../vox_tattoos.rsi/visage_r.png | Bin 0 -> 3053 bytes .../Mobs/Species/Vox/parts.rsi/head.png | Bin 429 -> 3351 bytes .../Mobs/Species/Vox/parts.rsi/l_leg.png | Bin 544 -> 601 bytes .../Mobs/Species/Vox/parts.rsi/r_leg.png | Bin 549 -> 597 bytes .../Mobs/Species/Vox/parts.rsi/torso.png | Bin 816 -> 3527 bytes 27 files changed, 334 insertions(+), 7 deletions(-) create mode 100644 Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_hooked.png create mode 100644 Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_shaved.png create mode 100644 Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_squarecere.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/beakcover_stripe.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/beakcover_tip.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/cheekblush.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/chest_v_1.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/chest_v_2.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/eyeliner.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/nightbelt.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/tattoo_arrow_head.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/tattoo_nightling_head.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/underbelly.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/visage.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/visage_l.png create mode 100644 Resources/Textures/Mobs/Customization/vox_tattoos.rsi/visage_r.png diff --git a/Resources/Locale/en-US/markings/vox.ftl b/Resources/Locale/en-US/markings/vox.ftl index 3cb14df2aa..83f073e444 100644 --- a/Resources/Locale/en-US/markings/vox.ftl +++ b/Resources/Locale/en-US/markings/vox.ftl @@ -1,14 +1,62 @@ +marking-TattooVoxNightlingHead-tattoo_nightling_head = Vox Head Tattoo (Nightling) +marking-TattooVoxNightlingHead = Vox Head Tattoo (Nightling) + +marking-TattooVoxArrowHead-tattoo_arrow_head = Vox Head Tattoo (Arrow) +marking-TattooVoxArrowHead = Vox Head Tattoo (Arrow) + +marking-VoxTattooEyeliner-eyeliner = Eyeliner +marking-VoxTattooEyeliner = Eyeliner + +marking-VoxVisage-visage = Visage (Full) +marking-VoxVisage = Visage (Full) + +marking-VoxVisageL-visage_l = Visage (Left) +marking-VoxVisageL = Visage (Left) + +marking-VoxVisageR-visage_r = Visage (Right) +marking-VoxVisageR = Visage (Right) + +marking-VoxCheek-cheekblush = Cheeks +marking-VoxCheek = Cheeks + +marking-VoxBeak-beak = Beak (Pointed) +marking-VoxBeak = Beak (Pointed) + +marking-VoxBeakSquareCere-beak_squarecere = Beak (Square Cere) +marking-VoxBeakSquareCere = Beak (Square Cere) + +marking-VoxBeakHooked-beak_hooked = Beak (Hooked) +marking-VoxBeakHooked = Beak (Hooked) + +marking-VoxBeakShaved-beak_shaved = Beak (Shaved) +marking-VoxBeakShaved = Beak (Shaved) + +marking-VoxBeakCoverTip-beakcover_tip = Beak Tip +marking-VoxBeakCoverTip = Beak Tip + +marking-VoxBeakCoverStripe-beakcover_stripe = Beak Stripe +marking-VoxBeakCoverStripe = Beak Stripe + marking-TattooVoxHeartLeftArm-heart_l_arm = Vox Left Arm Tattoo (Heart) marking-TattooVoxHeartLeftArm = Vox Left Arm Tattoo (Heart) marking-TattooVoxHeartRightArm-heart_r_arm = Vox Right Arm Tattoo (Heart) marking-TattooVoxHeartRightArm = Vox Right Arm Tattoo (Heart) -marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (hive) -marking-TattooVoxHiveChest = Vox Chest Tattoo (hive) +marking-TattooVoxHiveChest-hive_s = Vox Chest Tattoo (Hive) +marking-TattooVoxHiveChest = Vox Chest Tattoo (Hive) -marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (nightling) -marking-TattooVoxNightlingChest = Vox Chest Tattoo (nightling) +marking-TattooVoxNightlingChest-nightling_s = Vox Chest Tattoo (Nightling) +marking-TattooVoxNightlingChest = Vox Chest Tattoo (Nightling) + +marking-TattooVoxNightbelt-nightbelt = Vox Stomach Tattoo (Nightling) +marking-TattooVoxNightbelt = Vox Stomach Tattoo (Nightling) + +marking-TattooVoxChestV-night_v = Vox Chest Tattoo (V Shape) +marking-TattooVoxChestV = Vox Chest Tattoo (V Shape) + +marking-TattooVoxUnderbelly-underbelly = Underbelly +marking-TattooVoxUnderbelly = Underbelly marking-VoxScarEyeRight-vox_scar_eye_right = Right Eye Scar marking-VoxScarEyeRight = Eye Scar (Right) diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml index 0643c5cbd4..ccf1a687b8 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_parts.yml @@ -13,6 +13,52 @@ !type:SimpleColoring color: "#937e3d" +- type: marking + # The cere is the base of the top part of the beak, the cere on this beak, is a square. + id: VoxBeakSquareCere + bodyPart: Snout + markingCategory: Snout + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: beak_squarecere + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxBeakShaved + bodyPart: Snout + markingCategory: Snout + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: beak_shaved + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + +- type: marking + id: VoxBeakHooked + bodyPart: Snout + markingCategory: Snout + forcedColoring: true + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_parts.rsi + state: beak_hooked + coloring: + default: + type: + !type:SimpleColoring + color: "#937e3d" + - type: marking id: VoxLArmScales bodyPart: LArm diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml index cf350da60d..75d2503528 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/vox_tattoos.yml @@ -54,6 +54,50 @@ - sprite: Mobs/Customization/vox_tattoos.rsi state: nightling_s +- type: marking + id: TattooVoxNightbelt + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: nightbelt + +- type: marking + id: TattooVoxChestV + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: chest_v_1 + - sprite: Mobs/Customization/vox_tattoos.rsi + state: chest_v_2 + +- type: marking + id: TattooVoxUnderbelly + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: underbelly + - type: marking id: TattooVoxTailRing # TODO // Looks off on some tails (i.e docked/amputated), if conditionals for markings ever get implemented this needs to be updated to account for those. @@ -130,4 +174,126 @@ forcedColoring: true sprites: - sprite: Mobs/Customization/vox_tattoos.rsi - state: eyeshadow_large \ No newline at end of file + state: eyeshadow_large + +- type: marking + id: VoxTattooEyeliner + bodyPart: Eyes + markingCategory: Overlay + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: eyeliner + +- type: marking + id: VoxBeakCoverStripe + bodyPart: Snout + markingCategory: SnoutCover + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: beakcover_stripe + +- type: marking + id: VoxBeakCoverTip + bodyPart: Snout + markingCategory: SnoutCover + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + speciesRestriction: [Vox] + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: beakcover_tip + +- type: marking + id: TattooVoxArrowHead + bodyPart: Head + markingCategory: Head + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: tattoo_arrow_head + +- type: marking + id: TattooVoxNightlingHead + bodyPart: Head + markingCategory: Head + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: tattoo_nightling_head + +- type: marking + id: VoxVisage + bodyPart: Head + markingCategory: Head + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: visage + +- type: marking + id: VoxVisageL + bodyPart: Head + markingCategory: Head + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: visage_l + +- type: marking + id: VoxVisageR + bodyPart: Head + markingCategory: Head + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: visage_r + +- type: marking + id: VoxCheek + bodyPart: Head + markingCategory: Head + speciesRestriction: [Vox] + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: Mobs/Customization/vox_tattoos.rsi + state: cheekblush + diff --git a/Resources/Prototypes/Species/vox.yml b/Resources/Prototypes/Species/vox.yml index 1b49ebc776..d01db69e0d 100644 --- a/Resources/Prototypes/Species/vox.yml +++ b/Resources/Prototypes/Species/vox.yml @@ -52,6 +52,9 @@ points: 1 required: true defaultMarkings: [ VoxBeak ] + SnoutCover: + points: 1 + required: false Arms: points: 4 required: true diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png index 23744679b68c11f339c8c5fb7ab958ab64374cf4..384717ce24a7a1ac49e4ef7dad36abec9bba9ee7 100644 GIT binary patch delta 352 zcmeBS?q{B0QO_V<;u=vBoS#-wo>-L1;GCLMTv@CTTvD2nnXeF%pPzGZ`NJ9p21Y4Q z7srr_Id5;C?rkv;XnCk4D9kf)hKH4ql~B{c&M$E@?pnT^^>vFteXIa`z|YB*9=5J6 z^X70eFfg2WH$jSF9mAGui>4U;O`hMsTzbLQZ?zBS3hFUV397#mRV{ZQ`(ys|?XEAF z3cjz{x^MpKYrkX|Ua~(t*F9aYj@7T_wqD#Ld!Ru;(C~(DB_oIdHWaHsqPh8Ii~iWh zn^#}|ujb4cmt11}`?Jy+oijN^{CpXVQ|~+q)R9l}=T88~NKVhsm~teMhy& zr9zolhR-(Mmo9w#?HnEO1TNb@ls1b N5}vMpF6*2UngG6zjivwq delta 349 zcmeBY?qQx_QO{`S>Eakt5%>01E}x5mKtrNgH6PzIadF2-GINe3?&t`;DfoNh3dge5 z`ICEZlx+Fz-4ivYZpW@=HA{H^8W9gyO;82RK{MvtYmPUH}U$bSEZlouWPB^RA>O3hn7Tx2_u{&%F~g_Hxh0c3{-j&)Pd`)e?b`0F z>N{$k%QBa}`dXWR`ERy-r){zDw{`RGdL_(SwooDC_=NX-n{FVdQ&MBb@0GcJ1wEzGB diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_hooked.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_hooked.png new file mode 100644 index 0000000000000000000000000000000000000000..879ceb7bdec66cfd4460ec9a4a9e8ff74573f15b GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{I1082LP1978JRyuEdBZL@(u z%fp3&!8}uEc*Sr=a~^%*X13hr{g)*Ua{`apmoI*Jxb3h}>aurpIDy6&ly6{b&}P{C zU1zC}{F~2T=diulyI<^|(IM4_psuR--&rPnDS!BvK}jilZ5PMYsQ2s&dj;ygJyW%7 z25JU^9o7-dAo{_(1YQu`u)En5L^HhOy9TC#3XDY-Y@N1ttM}%^{xOgD_uONwOs)De z$07T{k6H-_mnWNaCN0Um{pDS7&f2HD)=gScd%wN+LHoOg4i8VOzQ-a5Y|c+I`SQPc t{T`O{a~@wz|1Y_Z31~7li(oD}%PbPjJ%Q`@<((iWc)I$ztaD0e0s!$hm9GE* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_shaved.png b/Resources/Textures/Mobs/Customization/vox_parts.rsi/beak_shaved.png new file mode 100644 index 0000000000000000000000000000000000000000..749be9cfb9e210d1acb78cec9c356e580b5e2474 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{I107`Z)N978JRyuEp_x7k3X z<>5lXV4kTnyy8@M2z4Fot&851hl{{~4Tg#mg8}4~&-}}RA7o7Ju1bIzf^4MY*!?Vh1 nOBOyZuWJGth0m_DZyD2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{I107==Au978JRyuG=xu*E>6 z<>6AnK%S``UU8}`gt{DiPjIHkXK=qRllbQ=!8GHlITLGs*4mdRX9CS+3$=y!yO;@R|1G;CHeqOEAgzbR>ogjstu6{1-oD!M2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{LzRHha1_hE&XXdut=_VFLjc z$ITPhf6Y!+E=g(U(+LvKFbh<9XuzOcxMpjde;!b|!d^uw28Md3GnV`H!>-=g_Trfy zW60GXHsAC~u8D8>U1W^!m3=B)mU6_H~hA(XyAmIu31b9L8CFw=7tS{bOy*s^b z?)x9d*7q^J*tCZXP!fw`Mxd}mm9q&0gB;%nwzbD^HyRuhSqw7C)78&qol`;+ E0RK&1;Q#;t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/beakcover_tip.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/beakcover_tip.png new file mode 100644 index 0000000000000000000000000000000000000000..ff394df8f861a5417a80c5a97d0d7f511a827f54 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0prCY# zYeY$Kep*R+Vo@rCb81d;WwAnVNoh)EzCuWTe$K(=4{LzRu6w#ThE&XXd-EXgVFdw~ zi%SKAr9+%lb8;`7cqaB#O2%l@kN9#_&~-cdaz=*-=@A@p{m&g%=pTd38rC2T#;S^GLd10 zxyNsAhiu)b?D)Nk>*hpeS|6BWT=jk%Q$Y6C*SoeU<**lgmq^xOd@^Ud{oc>q1)NL_ e_{@~$|G;#|^i$*C6AZo}<2_ydT-G@yGywp$X>IKQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/cheekblush.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/cheekblush.png new file mode 100644 index 0000000000000000000000000000000000000000..5db759fe24ac6686e751f41ee56f012d52078bcf GIT binary patch literal 3042 zcmZ{mX*kpk7smg{2wBG3M7AtbStnVOWd?)9*ao4|WGl>IJl3%@_Qz5pdzP_09tqj9 zWsfnol#;DNWZ$NtdUajz`|w6ldIYO?3gF?r-)JXJ!CkQ}uwu&HXG4^~8+y;VMe%Dk^d?c_jcqCgf)YSXs^p zkf`md?dBQWiI2t}x?3i5txsAKh00|X@6&`^~FFy-|E<}{T)9WM>V;N9& z>t`T{DIYwaP?pjC8p!;spe;)7yy#Kb!@_pzC$}x)bSsc{63zVjmMv?fXNeBz}MI73D67}a~MP4Cwu1b(gfREImLb)UzyZS?goArK5DU(Py)=e zlUH_WGY$~JAvG;@o>Y_BQ1(k@(@{m^Q3<;!m`$eNuI!!A!yFeb^*vb34al(H=#tC! zmsy$5De62O$>|t~;L2HA3#>yL8%;2Z)9J^3se^>xRso#K9%UZz?GK?&}p>g^g_j_4g6UBdr3w_He~iL(6i7ZCuTNOr_4Jkm!Dm){b* zmDPA>kT;$=M=wr?R``_0)$^-#rX?%k0}VWuWy@G5enBTp1b|)vi?N2>zdE)>WbZd* z`aww=&&kd|rbhiDqML918WfNWPsJJ{V9h+J(eF=B>=~8C0DT>%H65WA&M`J0U;*H7tvUB{!vs7My3MfUj$Z;R>7YqL}C||)mY>shcRbn z87vez3nDIWvyJF*$HWeD^IMPzV(>xX7qPZ!LSLAe;b3#&M`xwrdPqioo%JG%3gN1_ zwPM%RJF8H_g;szA-c*Eg=b`flvs_YSE$_B}4)$cO$C#;|O^p%k9@>VfiONScbv?#2 zg>rAknDsna0Nb)@N0Px2++dAoNs3^B*9Lm&fs(9X@#-|5QbrG*4{0K$qAiKYbn@UG zK9Ih?lKHJi>~BQ*W0#&~726c6lvJTu%=0U5PFYVuAFv&OO${DCql}NP0t8tNNPd#M z0lFx6?BZ(uDtKRw&JT(%#wIJJo)5nzEX`lfSP!WenoL!Xh4d#om)F_;qcJVKp2*SX z`~04#(o41w?hu|3X3bP$^ra;N{-xSoha0!!ul8Cm*yCmJXgqH-A4c50zGlsB36-x#Fc6=%8Pj4=Z>lV+1ZT}hsU_}jhsXA#YDwnjG)H_U{k zI;2oYS4ox2k&@zG;u|vg5}zd6#WIHs?sNIxu)8&<=Pg|*J}=XWD!O8OhPd? z-=tmUuZDcGeep~1MN}g680rSaTE$eExmdPL`A-?F*{!K@z^|1vk6Cz>HQ?N%8!q!F zCgvMA7#A3)yz$|`e6d()oN4vjK8)^6_or)G%UPRQcdSXjRe5{0s`l-2MNq}gTjQw@ zZw;pADz8lurzWSGDg!F#Cv`lsJz^eydGLK)t$K&R>6JPxyqTAwPFk6rj=4@zzNCzH z-<%X4%bT8<-kp3iQ8l4aa$uGF??!QcRXhAR=CG90dcf4Ms2;vjI*N^B>&Z+Xt+>Ch zR8F|=|I=Tp^`JGn^;&R$Fe*4Ucq8~|pOr5AQ}X9UdOO_`qyZ8KF@tJAO&mLMvORn~ zj&VQZYEzO^?j@_7_lIb~Y_4%Cj;eZJ?|7)E;-hNkI)U+}@L}J;Os{?N3Z6NqQm<;F zRIMZgBT+7nFfX@JNOEHWw*~Z)KuJQkcqTJ*dOTfH?I+}-<=ExgWDD&ewtaWJ>erg+ z?q0Zj?@#W;fw+6T?w0P8*uCnS9JzNd`wu@j>^jW1RImI+C3?Gg4>Wzm222(_5WUyg z-SO^MbaYAdU@^scV!TUfyl#32l+@3L^>WP*(9;Z3ulY-3d4GDQ+wObl`yYaWry`uAvi7gkbQ)>?cW)*Z{d&ov>M+Py6T90O8AqK}!lh+GARnFBH8O1G*NU8$!QbeG8-*1!$rkCyGFrxena&m5$XP0| zNZ+;U60l+~Ak)dyWgWNKO+OYMUe=Os*J65-p6z3W1edcO!y2#c!ASKZ^@;VR!+B3O z98{#(c&@v^XOdpD^(oI#ry_b0FPvacKWABH?n$d^93cyQ3lwpfmYH4CVVPaxUZ+!} zeYfNIouWI>Ut$PlD{tu5V^w99e|nu=P7h{E7N~sw&N%6(8e2K;Nr1du*0hnTnbON(q|Om|QiU$1Qtz&>mCJkM9yc zWHh)uA1U^v+KkvNPOpEQZMq0W%TpCZKZ?9)_hZ2t4y8WPeDeL3xicEol=R%>g^4}H zVaCzLys>eO=x=<0OhKE5)VOYxe|Xmx)K>d_=l!G&*&1zs|10!6Oocip~yXzbE&~sm-_EwUUv`A2Zm36>i4Y1 zk(-`~Fp?xmBH_8Tje{OtQpn%WQyYkGG)FI%#*$LrHHSI%w~r^JHd5C`Ze9p%Xc{OZ ze-0VmIuf1Kvhj2H8aTuHI^h{_;qB$Zyqk~x*S>xGGKpU7`nd+Qf`rC(QA(Px%pQ4P>VkS0l()T*HAxCtpx4P8n+ zemse8uPta3z;8?po}@3Xqu$}>kj>)lLv24+ZRj;CO@7|gSvx;LV$+v`iT1?fr$<6z z%0KHI*Tl4Lu4!p(W4fa?v9onD+AhEM!(Oe5|8VY$8Aa?}`e-;HO_Wj4cA^EI7)@v9 zko&Z+{&qMX`7#sG8F&Iyt4UxvIBUpwQSXGUDeJGTm5lF_ZpO_`V|Go!K%nFC|>?SXUp2{|j5V}@@c^ef6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600BTrL_t(|obB1Mk%KT41khC* zDuYm6P>1SK9dtpc8i-T_*}vdy4`biWouv;OcsH_{0j(Y&0tGX}CnpF%00Lllphf@! z5P$&K9jFn20NwK5+m;Pu|cX*!$jj z#bbPZ1q2`f0kAtzBLD#iKmhCx)CfQT0uTVZ12qB=fB*!*?m&$I1RwwbuscxG4X`ZB z<-j?Jir&qw>XeND+Fr* O0000iKhqNoUi%g6%&GCnWU-`a}I6H97W zYBx`3Pk27|_>m{>6%bKGSmO{DX=Rt;(8cg#-LyK9glHOzx~)qP z#MBcU7hk5~!y3rK`@r3ioCU#?(8mSsq&fFp!b~fWdKO9l@va?X_?03%uBG+fxa354 zGy~0*J%G*=Sj5%W>+n$YX|riVz9e~OgDJf2t*k=7PH#?XCUpVl1p52Wvf9A~?-sT{(i)FDH@qsy*)tFsa- z$ts*3Noi;Z@A_p*3%o-d6NxvB(dxsl) zfaB=1bz-zA1+OS<-G55REt&CODI8;&cC@9!*R(=y(n_-$mP{@~zU*>vEX$Kff%dtAnKF*4iqxtl+PT*(`F~ zxVHhtUuy+ebcux)k2tB^K@2zK7|XgG-g0=-*Q3ppFQ-KDb`9>ql?7!Yh@CHRbRq0J zQD)sQ7dh;hG@q4ogtK#~zD|_m;Q6SplNKP#$RS*v%2`6|q4hOYphU1G0hv}laE}Y5 zrzdZI_c`+?LGI|~*O^7OMT*5$77XTj6?dj=rl9{Y{p2vwfBbr6d~^fAORGZi5@qyJ zg*ju_H|jSyj+Cj~pvWRjl6=b5u)F-?-1W5ekb1t!6qRU5Uy@5%o!x&`XZW`gSbBZl zKJb)pVhUyt<_xA+OCdzwSjOX;l%0uWD-`<0x|gUI-r9t($3>tek1_n3(WxD8of#acx-u-+%} zfc{?tF6rL5W!)u<1n4Q$9g4Azsxou6YMJtz(%-b-RA$k=RYpH%=~3E%eH7Us$(@jp zXVhSnZ`c_{5rrEHs7E`K z{A0N@6Eg>spC+m%REvLF=e*f2%ByPEJ&igpVYTTuF(|CpT`w8M#4vSdq>WZQJd!WN z-}d|MC)WD2HL~?qP+yQmP;}6C(8&=aRrY8lW=cc~nuZ{J4hm$%ILm2u)w zabVvek8srMBkg4phD>F?y95*&F-$3|ewH^}IZDz9{}TGuAIJI^?a z)Uwuo_H;isI+n!td?U5>1dqioga5VK_FX`cl*q(s|4*cOZ1jR;SVLIqx#Bq=jRVbW z_*!_SR)6P!R6+IY{Nnb0{E;1yti^xV8z78tpE(X8ODZbwy(Eq$2iK%&j z>T^z*j05-h^tFZ8R=#_S})#0p~Md8L;WQpJdm~L|epPNN5;6HJQ&>&tA^AOgpgd z8Fu1}~h8OnXR?Wicm z#Ch9Qmz?;ntyh6enhNhhymN-XTFJD^I22b>JwfLCkmlN`@pW_)XwlyDtOAU@+yS+RGpB&0SCy#KgD8?~ENFj$|iS z^Tx(af}hb(WHQPmxW;X}?Ca;Yz_!{S`(Gw)%WY5&C*HN_-I1UV)KO4zOadW`pmHjp zsIPP!HbQM}F)XfZ_}(456#D&H935dKWn={Q3g%jat1j_7K!5BSS_lZ6oa^(f#+DOb z3ed)i#tMYxP_}<|YsUuv=WR*@!JXpd#n4z>0^W3-SDAh>A-0{eC2;3jKm)PAw0tFa zX!k^LQp48Q@!tS4utc^rLkZSLxdsTDZb+DyRy&4pNKdk8PDzbJ~IAD}^j4oW7Vu zwb$mi@!+;62F}u!wk$ql=aJ3A?SpNqK8~(yYBNFM+t4Khd6W`s#!)RN;4> z)25KdolOnZJ#<&38fLamLeus9DD?e?@GqC%s8Ph>jc*41;sgmw7*lHWL6MLcM^4Y+CQ!qaB(SxFi1-i00rG%!Qs^lzezSJG>Rv4e#&b;|l1y zdinFaM{E1do&DK-ifFpI06=ka26~Wubp_-q*!`>1HqxdGuJ-ReUhUF(au30r zQ>E+c9<7Xp47_wyIYXT({i}qPbxBu}%C%{U7Ej>h7q&b0yR5Mw1I5abxoZYxD)e@`pi kpihCNo}##?+gko#l+qtQSZb3Y&+%WBp`Iz?jSf2Ee@SA!D*ylh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/eyeliner.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/eyeliner.png new file mode 100644 index 0000000000000000000000000000000000000000..0130ae02b290be65f87b7662af2420c58360c419 GIT binary patch literal 2981 zcmV;W3tIGvP)f6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R16006N`L_t(|obB2%4udchM8Wt{ zZhdyQzSK{ZCS8!NC1PGn!7{=Xw5obNxds3Lfb@oF008^|(0i}7R=axrj$L{Kz8~}- zAN-Re0001h^oD2v0001x-VhA{0002e8=?UK002OGLo@&Y002mDhz0-v008L?(Y6AN zF>20v^fUSHdmMWMcK$PP^8W)z00000=?&2U0000Wy&)O^0001_H$(#f004mWhG+l) bJRIN+U>DzkwC;S000000NkvXXu0mjfu(yO` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json index 92dbbff751..5e6df07fe2 100644 --- a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/ef7a4d962915cb36b138eeb59663f0053d4906fe/icons/mob/sprite_accessories/vox/vox_body_markings.dmi and modified by Flareguy. eyeshadow & tail_ring states by Flareguy, tail_talisman by TrixxedHeart", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/ef7a4d962915cb36b138eeb59663f0053d4906fe/icons/mob/sprite_accessories/vox/vox_body_markings.dmi and modified by Flareguy. eyeshadow & tail_ring states by Flareguy. beakcover_stripe, beakcover_tip, cheekblush, chest_v, nightbelt, tail_talisman, tattoo_arrow_head, tattoo_nightling_head (modified from nightling_s), underbelly, visage, visage_l and visage_r by TrixxedHeart", "size": { "x": 32, "y": 32 @@ -23,6 +23,22 @@ "name": "nightling_s", "directions": 4 }, + { + "name": "nightbelt", + "directions": 4 + }, + { + "name": "chest_v_1", + "directions": 4 + }, + { + "name": "chest_v_2", + "directions": 4 + }, + { + "name": "underbelly", + "directions": 4 + }, { "name": "tail_talisman", "directions": 4 @@ -47,9 +63,45 @@ "name": "eyeshadow_large", "directions": 4 }, + { + "name": "eyeliner", + "directions": 4 + }, + { + "name": "cheekblush", + "directions": 4 + }, { "name": "tail_ring", "directions": 4 + }, + { + "name": "beakcover_tip", + "directions": 4 + }, + { + "name": "beakcover_stripe", + "directions": 4 + }, + { + "name": "tattoo_arrow_head", + "directions": 4 + }, + { + "name": "tattoo_nightling_head", + "directions": 4 + }, + { + "name": "visage", + "directions": 4 + }, + { + "name": "visage_l", + "directions": 4 + }, + { + "name": "visage_r", + "directions": 4 } ] } \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/nightbelt.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/nightbelt.png new file mode 100644 index 0000000000000000000000000000000000000000..7df63a0bc4f16d1464d3947dcf2916dab402ada0 GIT binary patch literal 3123 zcma);Sv=H_-^IW7kbP?+Tb7Z1Y3x~MFi3V|85#-sS!RT+!^ALS{aYf+nw_5{G?s|$ zS;m%-Y$+l})@i7o{uj^HbMsuB&w0PjxjR>%WSd)N9Bh}_007`Hhr{gty5WCyf%)&P z^9x@7YmB}|Rz?8O^dI(fPbL6h)AWNvZ9?qKjK$4Opb%AU2t-j$NfiL#$whhL4)zOz z1ag;VmrXWz%A-mDdv^42jxKnX(lu39Zi}8wKoSCTz`$&?sxGL3S8?UgtR~5nL^|81 z9YzprHWi{y(6PVuKbY{g}EOX{x+Z-UK zr~0B;=q~O93<1C@rn%WzkZMX_Kp!)o7Er)P73%8X6#sd4ZN?z27x+{1sNF?U6|l)q z+dQByAVESSTKb4WX_ECw{wocu2^EV8Ntbvvr<{-j1-F=!0&gzuLp8h}Xf$ME-Ftsy zN%nKPHg9)Y778S^d4bxl)-B_e5Ne)eIEdb80>#{d0O0H;rLQ6OcLNl?vcYQcik~Ba zRrtv5{b^s}iqNH4!9(v`FyZL)qP%19N%M7O0#%nwA{mHp2y@ohoV#u&2#7Nv)yD8?l^ zI~C4ioZLR!m?1YlahO}cju0vi9Ts_+=$t9M!N3INu@QN6K^kfdrx!5XDYdH+sY}`} z^VxFS0*7Ai063teQrmmHG=V6Vt17Hjy{<2K0+^an)>;=b@It*K`)XQZO7WzgTns}D z_a5H5@9`>+Gn>J~Y91UnkIu7H6&}I2rp8$jQmi}@^_jdC^nQkmnW7b9?J4lA>R~s2 zW)l-to12f=--!t%u0P8wb1H+B*V(ez6xH0Ab({tN!*jq^dd<7cO-bV#INTro z;Y~G-;flRrkWnH5=1XIJj)xmx^HeO$o;206Y_p6olHxrk-s;CZ!?h(jo9n^!tVN`| zrETFpQV_X^QWAj@yRt=+pCr4)b4E<>a^2T+xw&i{BvT@>BKyX+^qTWEM({qrll&|= z^cvDOqKb&na5!>6{+r+ETowTfhX1JL^%#LCH}u=ORyvf2I($o-Zc%ewFx7U@hDJ8u zPd#AzV#cp9KwO8e*`|Qcz`kHF2Yj8iw|)C;*sSTc%eEE=RK1F6($2541${4}MNS|k zrO2YiqSzw+U9f=Ml``QehOKW$YBWz;7){qv(b3wmdt2r`!Umw@Fs)4w- zHzP7xI5$0aF!OG@Zd#}O*x~8(-Lj&(F6bHlq=M6N$jYp=8M;|9;g!VJmyusb5!UT{L@U9cBq;Cguia6334ug+Bg1 z_oQD*jp=FWchVr2!a(|JPU@U06PiKSyZwzJ!I~~U)2RF7{9f_F{Ps}9(4!%^ zSHm5|phwCKk*_~&$m?_Y=cnt{LNtY?c8p%{jWVq@n&fAb$W$eTIp@M|DwTIYx=`AT zcPd#mSuvTST~^3EaWsvqY_+Uz3)oZI<11!Cv!Jsn@02&KrP^h3W%Vr{SS=Up6|5KA zWgR&52s*GASJSHJD!Xs7TYW4!k<*vy(r0*_l^^T?=c!^nQ)^W}R3kKxHK#OJj21rL zMM9+6c&~dy7gAq#4rnZpXL0?ommX?QKIhrz9Li|woWhIm7ptIA?F$E1qp}Cs!#5re zU3=Z9+)CYEyh4RmZoZ>APS#b{Mnx|K zC(oLWV|UzA1yW1~G$CyPH6MwK;CZb!zrCtDD>2ImX(7u7OL>bG^w*$nYVJ59_cnGh zyT$v(SXltsY0PPDZs+3?=?WO3L{=92DEhK1gvHBjB;&E}qPb+sI|@_qo&3yBRy8H!erCkcKL& zKSz&JPQ_;QokEabA{JQRCO_jVx%IWA@J4Rf_P1{vGhSVmQIx`D{g4Lb*XaF#$%Vts z7;@3K)9(h6%g5(U>=Qy69(UcpcWhv4LwaIMKeL>P=`dem)+LA#I+S(Y_dvy(G3zO3 zxig5a#^O#v%>P^t~T56It@cwfY`+7^_r{@5E0(N-yquG!QR#w@-gBo#eK9^Ha zJzyaJ2YEKOu@L?y;#^HdK==A@ z1pevF59d>Fr!-OI4f12ReqK8Iu~(gDT@uT1ia$IXn$nH<`%;Q~!R@R7AW8-RaCiWq z{f%&201&1E0NW@4(8&h?AxvS1t=`{)6$5t(0RVR1|B7z2ZTh1h}(yT-StC@JD|}4z13?m06=G84l{CyDBN9aYQU>-GfoBz$;#R!K*QH` zY6v>7*a^?+vIX3~OA}yJa?kCeeDll;^J^my=zGWZHyG);alrBwBoz2RfV<6XM^bPF;!}+pEC7 zj_2S?d}MLplPb42f)sUFf0Ad<&T%|Zd~p6a?yaz??|TwVQN>T6{bD y*OJszy%Yx^AqlwlqDRXQf`Q-27fVs&n*mGl4{Qm&DKFY)Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/tattoo_arrow_head.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/tattoo_arrow_head.png new file mode 100644 index 0000000000000000000000000000000000000000..63b097e940ed3760a471808fab37a78b2bb4fe75 GIT binary patch literal 3035 zcmV<13ncW3P)f6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R16008GnL_t(|obB4N4Z|=DL{VxI z@1RXIDL3H`nuMurq;U$1$|1JHKX00000s5?jl00000pza_I z00000fVzV;0002M8i2c}nb~n1*Rx&I;`fR4oYTzAr1t~vro(5^Du_?(txl-7Zh?vm z47)F3Yy&vA#_BIxwa#5Q1OWg50Cfjx000000Ms3%0RR9108n?31^@s606^VA8UO$Q d004CdXf6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600BZtL_t(|obB36j>I4g1klPY z*l`Tsf9Yd*ms@x?6A4AFp5Y@EQL6UcSPw&^h9fia<{SbLfB=R+91(e*C(P_vSW|c0 zJxeL5wRYDr3@|h3sFF*pIw)>Tc$XYAh z9iwBDT0L z8_AL-@adt%PWOo4vIO9MR|jz45AtZ0aq7b zlczL)MF$}P2tWYr8mJL~00bZab`8`BKmY;|0J{ci1Rwwb2!LG!HLnNw0b_GYkkE64 Q9smFU07*qoM6N<$g6!f6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600BoyL_t(|obB4N4TLZZ1<-#} zAf;lCY?0a{WS)$0b+(Aa7F3p)f-4Tt)yUvO`M-e_2=f#yMDkkK6+P!g00I!ey9U<~ zfB*y_fOie9ApijgK!8&hs;cbgA%wSCMK|XZfT~Ie;dlI4gtIe1RP`8a82tdW)?^&V zV?56@VvPL&0G;=MEwa7)z(c1$z!`A92gDfBTEoxrkqD;%YOOL1!!cf#1u3O|0Dv#T ze*V;l2ly#W00Izz00i)^!8HUR009W#U4v@~KmY;|z`F+55P$##Ab@ubuCWG?QVMd; zm;5F#rAW>hFkFf=1K9Tr+yP*@AHi}42!LAvw)_`BtyNU@vWMSON|6wP*=m$&52&@u z)yrho_aJ~Jz}5&a1+cz{X%9##0T=HUQB|3y=|6kG6GH$35P$&QHMoWV1Ry})03Z62 VLXZt&dmR7(002ovPDHLkV1m~r&IAAe literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/visage.png b/Resources/Textures/Mobs/Customization/vox_tattoos.rsi/visage.png new file mode 100644 index 0000000000000000000000000000000000000000..d8190e56f2a985e87b110b954b907bf394106354 GIT binary patch literal 3111 zcmV+?4A}FDP)f6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600A>eL_t(|obB4Njl(by1i)1r zOxObx)xk+g`u zw}87xDdn)qv-MYxo&o|8fB@JXs1bkw1Rwx*2WkW$009Vq-GLeb2tWV=V0WNK00Izz z0N5R<5r6=a0o*+Rpp*hLd-}-S%%ZghcgJIH>iJ_Tz!>8&?Ag=eJ7(^a3h?-~79jUs zf&HxgcVr|Lz};ipHUL2H9msoaCdL>5fOTC{Z-YDj1iuGnzbkOdTs;K@AOHcdJ5VD4 z0SG_<><-ijKmY;|0J{S<0uX=z1if6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R16008kxL_t(|obB4N4TCTgMbXC^ zG~U4tb1>=O#5>S2dO8`Q9Gs`A9$kTV`tIHUIzsz`eoRV}RCL)>|5U0002EH&_Dz0001RZ?HBCK=$4xNu$3%P66=!AA+Qz zU!bP}xDWmQBV{cBNf{B6q~kb--UhP(NYXuYy=TBL0{{R30B~=x1^@s60N~zW4FCWD n0KmP$8UO$Q0DyagwdDa`H{}DrvP@-9V@sA9jNRAlpja8zRb@Ej%6xjU^&` zjIkw3w$#WrvW}s8_5KC#{d~?n_jB$&pY!WYv9>hkWWU4?005^69AIWK(+eE?|u567uHGXSuw`#_=AK{mz)5+;UFh>9izqM)j%0s!!oqP!40+c}{m za;JKybv94xqj6tv8%8*1Cp=5>nhG0_Y4<}w3Iemk!VpU21Mh= zIS_0*5Gx>(XL7$DwD>xVN_x5|eiY?f(nHrJLRZ{4ROa<|L&8Sm&ox zc4>1iAmL#R9b};l(P}vVm72wvvgw$VQ>>~(PSCFWoyfxi4{psp)%aVWk)W{^kDb+d zxi1--d|l~TD3CDaJgrT&OBNl6GfC7Nz^pccA}t{RID204TafL2KLvC)ST$DROBk>O zAHKUYspL3H<{#ni9~*U6I9QDrXmj4LZDvjre0(d7q# zC;8M#Aj}{1Qc8PPLsLW9U%|f%JWX&teVTprcb;23VH*S!r}Z8pqY5~I7gZiDbMz#C zA3?x%gTcDvXA%je1f;&~3g*HGinT|&+4QZ*dtI-apLa21DDl0jv__?ua1o$)Bgr;h zpQ&HnL-%qtvT-U2m8DpLhYTrrygS%OP>)#4!7i?|r{l9~pqV$2BY+&qJg zGFNf*)gAUxJ)Zc4As#`SB%B0vNc3fb<3o{ECT1wFwdkYsGEf6JqoCeKsm*iI+QjuT z&$T;iVBDp4fD=kAMR@bk1;bgdD6>`dIKSZaV{SrOX`IiD7w#F}QPmJvj3svGVwoa& zw&SgOA20Dbvg^iF^G5UVYCTI+<`sHtWRMjq&BiNP_mHoG(MRv&L$M0+wp4gl_0Syw z7DGc7Yx74O@5BWYR-WaRIg~-lYZ0v0MbB?f+fRf4Vn5)uF!FsyniyLHaPnH9qBKP# zWa-oK%WF+*y!#q-L6*2Obh=9BMS{7gtY8yk6R1gKDpNB7G?4CI)#&(-){N*zDrf(L z7x(;BUa?2;MDRs0YiHu)uB_m&uQcwu+_Fr*-eV(%S&7PY z$spjK(vYh$(vtp?TXIEGpQSn_a)yoWb3eG{WWHb!AX_52DE9_Ydd>0LIq;5v!}Vz} z?wSiCv?>{?X18zW@=tz)V_7IH5dNcv&utiyFkIKm&-&ZnAX1UtJ2-+!E|kV1$!&|u65b>koVVX8{U6=9`^jld(-KU z?~SGxYHm#9r>CZgH6b;NQ+hu6KJmV*e{D`^)cwG5`Dc!ZZWm^2CQ;^R;%}1FuBais zx2HtM3uh*0cBkG=)=p}bAJ{$pcdM+Zwi9|1e^|j~KWJfG+61LkjG+_RdvmhJp5NbB zslwe1{uwOOe$XD*ej|J!91)%nz7>A7&qkO3DgE;@y_0UsqQxS~!pu_7Lgf6BDBmm4 z>zep8u^}Tp<6b)CVlYTY)!_!0@|b$S%`RU9NT9lt=OpR@NdWy$)#Aoy|M0mBkS29A zl{ys>)g;p8QRZ(Qq$GuLAxj~HG?p|GbH1sZf?hw5Oy^03I0X)c4*3!%kYoQH|E6^! z-P<2i6!6&_KbUxr-`m!E3cXiXU!d^e)xhCLmtB{|wmQn+WPE^Ez##DxI%KN&FY$YC zdb&RRii<0c8!98YPfm2JOf=5?U`ZQbNBesgg&1guY1aR(^=*G*uWlb?-C`WZN2S*%Z6)Zzy%_V*co6G;u?|}5qHAGjpr^l&KZoauJNj+=##zN zX56G2xEenAc^#S_Ud8l%B6svfj3=$|f3@8TT11l7=ZNn^-jNqD35!<=&4h=)A-_c! zoEhe$zeU&R4R+_o;Pop?nf2f6bH|cm4SRGXv2fJT;lqwSP6`JlBq4S@dVH(w=xus$ zUIJb`lZ~6BfsJs{ogcw7@g}+*H5{AA+#uB{H6lfY6~IiMg_jGK^FMo9es?f*@X;U~ zU4IWb;Fda-%-^YbFkODW4STEScA3U9UFwTrSel~zjALOJjmFn6Qz&E1 zH<6-}qL4z>EGuLg+nN59$}c{;ie_R>xD$(KCaoIP1}ts{8xgJNY2s%>u9Vnl8izxT#1 z#<|CJ;!f$E7q3vbO3FLB{djF1LD5;KYXC!vX^C&~@g;zp73Gy8+Y~)rt+E^@ zo;+(jh}yW5CYWm2uMTPTd;Tf;BY0M$)n~h^)@e!EJhSm>o_HCIR3s~je-eAy8N`Y<9?pEM{dn`WwL20)OnYJW(##p; zGUw`H-O{p-4>mo3XCN&i>OHrrK7Qy3>uA{gF+1f@ZI5(53TQx4N#SqkV=U!~srY=n z=7|`@Nd1sNqPMr1l-D$W?~PiH`W}=|^p@gZ=1AcXw zYT{!t#w6(^F~U>Y)n;nL?{g<*wlX)wZeI#*CJt6s ze~B2O9*IxsI0U(T4V`0qoAQjm#PVB7;qBbu_3z(Tr_h~d;nczuouGQ9*O(o@@wq)p zB)RDO(WY+L!og`H$Cz-Y+kMx~_El_6P_4>ryyZGakY4|Gxg-jkw}!< z&qmjE37y;PI$ArZo;Ypve50JM$M5~9*K3l;?)~v&u)Qmvj0a`$a!R^xw9r$NnVf>^ ze%_x1+5MkLP=lx20c5dIr&)JE!c-TbJvvN}`yK;`dGlC$vM)UP=ix+{OX`!es#gC9@vttvOzFlbH*2l)IIAsCD31bn{wHQmgnso^T zw`r8fVoKmr#_Ysq)69{lWqx(9@;T2Db9|7%{lWwo)`It;m^>j z?#T3qv6vTsp6fpe{#tsl3h7*%=C|tSY#E$=brlc4|CX|1UhAX;4>*5Zkn3L-X=O4yt-PNvN8&?vJy~9832IC=4bkuna;CE6FTHN zj8hro(#M~dfmwYzbwoQ14E>gU4x3O;EFX<>iOedk|FB1DIlRaP7Df1&`4#-i1*l<)BgIR@V7(- z=FWr^6og~r8nG4HDdZU8qZ_3*fL^bM1RKf%BB_g#KfFz!xJx*uia^69z6Ag)@Zm@M zlTwzS2rMHE{bQf3C7A`vV<1AdrcsG$Eb*%Zg26_7|0ijBxy0LRGIQAwE3Vb&fHUF3 ziZ#Fk@|Is|PF_J?+C##lQ)D{S?jkq!>_w)1Wausg#zX8qMTTV40d-|gP4lE^4>vZz zZkx=w{ZI5LN(zX3+v!V>_2O;|wm0cp6L+~&y|`$rPlkUcDz&*s!qbOpJ_;t7bbj6Y z?%;ovCZFmfqiHYa=^R)F>l+$d!~DMf10PM~q5A8~&CYZo&>16@t_2$@d&v7Rv&m+N zC5AFvBT9{k&ml7O{wkH$}A zXXT$0!vA8CEf4<=u?vJIIqJZmEzF3qUpW`ncO@%ko!)s8&6=2^&rh5^xm>WJ}jw|=%sU*WjP!x+~Ceri; zIMIEYPil;jFNYY}Orm{wHHWy~zO+o{TnABVG8uEFUlY{SfRnSSZ5NtUa8*TZ6*+I( zY>N2YYy;>tn+p-H%p|rzs@u}kWj)q)OzxBoC?ol6Ns$~q!~0Nq9?9_L?hFhlm~l7K zsQ1+hlO>I6SUD4pkxB7&yfhR02W^cMe*tPHzUpM=5^^`Sg=Fp$p4K>cO8JltD_BcQ z#`s}6?MEKAmus&xi!6#{i>nY+#`zTwrp>2Cp3RMZO75|Kd*c2 zF7u8ih%tych*BvD8*zKh2lGz;k*%^}%$+{-6>E$z28m&5fxKs4V%$q$=s(&YIdCFs z2Q!3RQ%%D2iLfM4zlnrvh&f0UrH*UM>$m9ps|zrn#2EHrUgKJ#EOnJ(%0^s*oq`Cs zvw*BemF{V{8rtB5#}a}gI2N3+N(BPY|=Y2Rt>EvqegI?cOfl;b9DrHyFUh(=MixVU`1 zM!f>P#E)KVqPL1TCqSD&kD(+7k}pZgT*BPQymL!vMt0^-Rqf1=ihzoP8NKO+8SUw% z%DdCp>8a`FO25kGDK)n&x5#JfPk&9wS0DJ$dnAo;?dGK_L~kt4M&2L2cl#dFb$5zu zJa2Y#_HgRsWYwf%@rhaPo1LQkst(Qb$kP&f^Fafh!UoNak}=09n%=aOv5F_hGG#vZ zegF6hww<&^wA~FH2t)+F4BQDkJEkUy{}K3ei_}3f1uKI2z?9$`a5LROlz1;|uU*ui zsM^GY#K#G;H+&%~P>Z|t(qnR-_dB0y$a=|HIZvXVkFq*`gc{ua>Jd19UA93^U#41y z6B<2w>l5XV_R(mGadty?jd*Z8=R@YHwCrAYrzGo1i3kZ=iFR?k6~waN#-m}YndIt$ z&iDN4iXDu4%;IY5I^}p&U6U>G`Q5I!sP<%S_bI9)RNqXdFG9^ZhiG0u*XqDE>H}o$s;w6+HKwgQHA8M?Zd~ zIAGw2cyx0kv30BUx$U-Hsps`(SaXM`iJzTcQc%P>hylw`pp!NjSzhTx`l39~2 z;(p*N)dssW!m#Qkg_PI~td;aWW^d>A-t=rp`|9}n01fc zgiWDM-8+;|>BdKr`FK@nbs%!PR?=Ffa{xUW))d*~_AFGSQBqtgxK+~G&M3uVBIkAe zNyxTMJX@SrznpA~d&QTS1(7-V7PsB9Dgz#Ue?boY8vQ$Z%jh4Toy3e$WX2=xLTaN^ z-KQdVg2g9`)!FSYi_N!0kdg!`o-f>QJG`kJb%v8(DZTpj-q-<&XpXPbf2(f|v7NVb zGHzCGMQ`sz(R?QR{3hpFrb3eH0-`G4@TK+9) zWbce;O2xw4_PhT)^@rHkEO^5o_`C-hzFR+ku1`63=m+lQ#j1GMNWDkzyN}NwZ3GkY zf1dqP4Olw4sHYv{NV0!o_p5CkQ|a9uQuvMPoJSFS3#=5)72PJKWVZ_`kPBXmJI|Ox zcGMQMvtxE9hb~f9w-KMwOYj!Hj^Xy-n--*+jb?98!lIQo2ex^=V6r3bJm-uv37>CC9~jVO6Kgj*b70DwRt0Ki280O?A? zZ32L=GyrU&06;Md05~vtZ3yM70W}70M=1{@Z1T| zbaM9&@a8r3@qOZk<~2j3-FwPcg8_j2wk}NF%s+1@rzbH&no%p1KQ5*v`DU;eWT>MF1`5-|XKw;(=V#!n>g>UNJi2N29AvCVrpC_@{3!N2aTh2_ue6ukQ~9^)L>qt< zeQ44K48pj=&pMY_{rxC4uK6o-SHI~N{WlLKbyy_KSFJ{+DrLRm}FKmh~dkkF1kxAobxpU&kqyca@U>)Qt zc7+=N$aSZv@(LmpYF2-wue;$HAHV7v&i5X6XCG&u5hG8IE)~#wirY~${#Kj4vQ~6W z10k(}I8i#m8c7+ms$<5q`1>68?2@M~Gj~$YNH;%g%X}jdw4Cx=J}GyRB2gw~jmQPl6*pW6zLnhd;T>#Ki!njQt6<|8yDgBzq4EED f{J&+8&VWw9S`muRR(${8!vpAQ8N%LZpu+zL?_@ao delta 414 zcmV;P0b%}^8m$A68Gi!+005o0f$RVP00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000lr3`}?r4u#S$70001FEo-j;000PdQchF<|NsC0|Nj8q zgS}Y*000SaNLh0L01FWS01FWTe`H^g0003BNklb z32L@1OSXjLMJvit+Y2n$hy0qL2==~WF+Oz*G1}fxsG_+w?I}n;9Sq2?T%BPS=oa?^ zMn2kJ!0=a|Cp=Lw2I^iwm{JcrATgYdpewX_g(pNWZ7aA+hoJBBF^(;q{(>3~`C+b4p#T5? diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/l_leg.png index 918b343f98cbd48568efa1ffcf7065f5ca337965..b7039d11d5360177e78439cbb1958dd77bdaaaba 100644 GIT binary patch delta 556 zcmZ3$a+76(MLmObiEBhjaDG}zd16s2gL7(5ab>YWa7k%OX1+p5etyou; zx;TbZ%z1ljWA7mY3DyV4MLaTtHZbx|a`$LiBy#4#q16|beGr+}ZNSu_CauuuAQt>U zTVeT&RgX8EfB0^1m)8H!$NO8J`0V-q$ICPrfn1uaYKSl;8jw5#(Y|d|tT3cWt({#2{a=~k>daJn? z>a91LCz#Dn+#9ESzWB`Z`p;h&7!;O%iOObZ*eVtp%F4ds+OM-|%xg`TOt}!%|5%;j z4rA9MhtN>R)3tLKZf)Bt#@|uM_+@^wOr6DYjjoT3dy0X+z~u=kCWKdko-kauA^Dju zBb)J_V!p^}e=Fhw80w$T=`XdkI`d(b&1oYB33djheF}y?{0t1|EMwM(zbUiUSUPXs zZ*{W;uXhzPJP(_{3+HI}ON&wi3$%E6Yf_UrcBy1yR&mPoc?(3$SN zCAWK%&c$tSFPk6NXO76WWtfu6x%O-SwGUHGd>=2JGM~e1<$cx(LBEz|s!o#G=imR~ j%|ph2!YT*$v;SbQO*=MW;f&2P3_#%N>gTe~DWM4fWg_pz delta 498 zcmcb~vVdiRMLpvsPZ!6KinzD8&i6J22(W#)m?L`3CHuf^PTqi|p4YDTY)UrY_vV>&;>;d-=IMbg-Ap127+5tN7`Xx(P?-nXxpKDO zzP4-2#?k}zvg`Ni%9nGl=!m{v8ZFYADPBLLgrVzD)~sXM%sy(uGtWOy>U_Ynp!`pT z4Hws!o#&o!Zb{TQ{dCi7j_#Oq44ZHI=uP(ypYooMqiMnI&w1O0pKOgd$IyK=Y0C4; zaBiyvn=-ziCGj27$2W$As-9@yBhR?NRfezqUG}t8vC_X?jXOLibv)bX^(j@9gZ0tm zWh+n4t*>13T0L)f)Y>&(X)+jYNAl5u)l4%u@5O(v_?NY3Vf}lXV+Ut&1xM@16#kn& z&6vTgd!od%rhV;;`!{sGW6EP%F#Ef$%+=l`qcx8!!b^l3%1axb+0ONQo3{C-sh&Bb z#4hG7!a8!+=?&Rmt8BGS7kwya_@}c_mSMun60KXTfg)dDwcUF!WHb5q-+QYWa7k%OX1+p5etyou9dYab*84g{PP02-%+L_Tbxh*ZGv_Hm_avB?ihTQR`^n~ibwhzi!$V7Ci%##;Ha(#ZiLM;Bxlt=$^#1ysmTA*J-oTtOkgL|#asYf**buX%^|R|&pS d=K1iBLEe4U(g}yBuoyD{fv2mV%Q~loCIFcj?*0G( delta 503 zcmcc0vXo_lMLpwnPZ!6KinzBo4f~oLMA#lgZd$IOR>f{5r1wzqi<3ze$Ax1Bj2;?K z*rv@YVB@|s|ILQ9^E!fhgYv=2w0%ewXGv8 zYOaq3qvat3lR%M~x8JJG`D*OL+Q6g{c71E4-t<>V$vzH!Ccd|qy6#Kla8^Y zKuym^#kaFgG}=r*eKco#bn~29?l!+lthTvuoAJ^4Im|NieMb@O_@MBe!-v*o}A#$(O?w}qsG z(ghlLja3@T^nTU92>kYvdEY8ijstB6JAJO|Zkzr7GG`f^!12OjyZO@7)fM-0Zr;Oq z>4V;}y>Hoa%nD|I6PH-NKSJl$-Wvv?p*wHP&fu+PKDEi@_1CIfVzvT&?asyf@9*~C z^E-I&e*q`mlo^}S%8eK*?%Cuuzqld8=j1z^QGjpyG~HCedmAffUr@SnJ!smT#TpKc b;!OMp=6^Y6^`gv}0SG)@{an^LB{Ts5#Uk71 diff --git a/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png b/Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png index 01259ea03da9b6e767b51424deb45aa4403df789..9896f1e17f14fd35cb06bad87c093a976dce4c6e 100644 GIT binary patch delta 3525 zcmV;$4Lb6$2FDwaB!2{FK}|sb0I`n?{9y$E017v0Lqkw=Qb$4{Nkv08F*!CiEix`K z002mdotAf0Q`r`W&%HOjP?8Xel+bHvQUXW~y-1NRDlrKVO2Ci+A~r-+a70m&rU)`9 z;DDn;k+C9*g#l5q>jW7@)NybW8eS9UZc9vd* zf9@GXANa%eSALld0I;TIwb}ZIZD|z%UF!i*yZwjFU@riQvc7c=eQ_STd|pz-;w)z? ztK8gNO97v2DKF^n`kxMeLtlK)Qoh~qM8wF>;&Ay4=AVc7 z9|!(*9)A`Q{3O1JFO)?@%ce{qOqR7<$Ps@_@A2i55xYX*}0a9+V~OBmRJI% zAsRq_9snpR5g-YBWGm3`eGA4%1NqI1(V3W?`_F>@eOI_l{>T<2e~x2EL^8M%QO@j| z{8|DuAOJ-`1L{B<=mQhL1h&8txBw5}0|G%Ph<^leU@_o=6p#T#AQu#XwV)W3f~{aD zs0MYQ5j2A~a2RxfW8gG62QGojU!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh?=qPj=x&RGBx1dpI68aT-2O}^EromdU z5r1q2vtUm+2#$mo!O8G4I3F&8x4@Nf1AGwfgiphl;1O5~KY^zafDjQnqKhyQ7Q#kC zk$5Bt5h1IP5~KoYK-!QVq#wD8NRg+=TNDOGMKMrJlncrq6@}uWmZ4UmHlwOh2T+}; zKGapzC~6Az5lu#GqRr9H=m2yqIvJgdE`LT>pqtPg=(Fe%^f>wz27{qvj4_TFe@q-E z6|(}f8M7PHjyZ)H#*AU6u~@7+)*S1K4aIV>Vr((C3VRTH5_<(Zj(vk8;&gDfIA2^m zPKYbSRp451CvaDA6Sx_?65bH+j1R^0@XPUK_(psWeh5E~pCKp{j0vuUNJ1)MEq|es z&_*~*xJ!6JBog(APQ-AcfVhTONjyY6PaGw_B~eIbBsM95Bq41f?I)cg-6FjplgUP8 z4{|(NOx{9nCZ8eSC%;jkDp)E6DDV_kE7T}-DqK-`rifQGRP zUdc#_t;A7UrBtJIROyD&v@%uMMt?a}IYW7~a*Of>RIYI4MQ`g1<+DyrL=EogS06Xii({|v`U^zjmmKqDIK93(F5q|^fLNk z`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6bsWa4l)YH_rsduU0(|LZ@rEqJ6vJJH{f4iNjE!Q9HW+moJu+4^4lvF) zZZ*DZLN;+XS!U8;a?KQD$}&we-EDf=3^ubjOEIf48#0H@9n1yhyUm9!&=yV>LW>5A z8%z?@lbOS8WsX|XErTr!ExRnASs7TxTWz!IxB6&pZ=G)4Xnn_qVt*58Q)ts;^Q*0y zE!Vcj_S#(XT;I8?=XTG1Zf9=Cx7%ZP)1GP{V!y$@*ZzZpql3ty&0*5fz%kLW*6{|5 z#tLI?W}SCJJ9#;+b~@(t*4e>X?0ney7Z;{WnoEnzqj|>j`12a)jk)T%a$M_OrEUzj zM7OZX~g?%5634ad@uL*w`VG~gh(Z7JY zV9A1(1+OB#BFiH0M43cMqI#nhqZ6W=qhH5($CSrNW36IW#$Jlkh!ezh$7AE8xdr`1lgVC7dNk648kGzWRKONg3!bO?r`DyuP76)j zpY|y|CcQlamywupR7eq~3Hvg&GxIWsv&^%Kv!u(Mm+f3OB?=NXWkcDEvb)7J+0WE~ z#6+@QGMeL-Q%XSL?4XT0OqTZ_RsyNzibcgYHn?o4 z+lbmI*f_Xp?xw0uA4_;87fY>6D@xyQ=5D_DmCaX`Uwzt=v}Lf&p={4q%vRyn>)YJ7 z9Vk~W&wno;+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B z>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-+y?2)7{2wt8b^bmmUI#B!?bmEKDc(k|2rKjV2%kTFe(>+#mT;+J# z3Brk@6Q54zpPW9Gb?WKqB=X}qd>G$kEdEWK>u?x-@ zj(=WcUF^E#aH(^^exTzA`yV<69R@px9EZ9uJ6-M>o;Q5riu;w*SG}*EyB2Wm(#ZUg z;pqt>?FMZqM9Va~FNLH%A*>}Hq z{4y{VJ2n1X^!(GWn_sBE*#FY*W$$#@^!-;EuV!ACyitF1;4SNI|GSuX6EnH*vF|HC zn11N_81(V(r;JaZegpS}^ZUoqJ9q#903c&XQcVB=dL{q>fP?@5`Tzg`fam}Kb$>7b z0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQnQ*UN;cVTj6 z07GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600PrVL_t(|ob8&iajY;9hCgTSz>E^pf=M){ z3+kXA>QEQ*kl+@MM1wnUrWf2v27f<$o)J$X@NUA4F4&(>zgCA;B5~-T1#^7XV|7e|&tTsw$LH zF`0ADFU!I_&!mXh6V5q*xm*CK>l%Q|z}L{{H?RfU2rkmVYHa-{0Q> zXxla`fMFQ?)6)}mT@ye6yuQBD_kDf`JUl$mwk^)NIIfh!TFcwpTUG}Q!{GbA$2k{g z9X=djjM)ug7l1W=rBoabf>LK;PyW8|H#vc*XBdVu0KRiTDFB}x5GEr#fFL5cAVi7T zU*}�Fvzw2>^^S9zbgy$A89g1jxPvz_k#E0=Ra7wKk~$Cjrn}qm;rq7oX!e76AZw z*w%oyZNqQ*cLA;ShCX~$;Svz6wZ3gzthMDG5Vk?MQokj|S__bU8(eEx??gwo;N45W zIp@c5B!GbHi{F+-i6yX^h>$-OeDcRoD27m`_~ptkUxNZb00@AyHGiBM0zd!=00D5e zhEqcT2mk>f0M6EMY6t)UAOMaZiD|7%9*f7*>ClgW^kcCk0P8mSvMc~aTH~Md!$+4o zHGfiLWc~70RRJV7C-=s>H3n>2^eGUM0l=01&HAxRloP`G<&{zxW6)Y3a$)ik2#M!; z4n2V&GCKeuw&Q{uQ-5pFp&BsHa})sim%&%|4;qTq0N6SptiPsdg2*Bcn5Jn{hl)GE zIY-xZaTefe%MwK}EVtl3V+=~Easa-vV$(DjV~R9KyRM54fMZK989wmoIPC#aO#IAB>8US3|#alq|%sK41C5H7EcCfB-mK!>J(v1b_he-2naoudDW-s6&o<00000NkvXXu0mjfc)^x# delta 793 zcmV+!1Lpk48?XkDB!2;OQb$4nuFf3k0008&Nklbgc%RS1Cy?G*mx-0Ymg z{eH*cZ~y=ZApjtLcg~TVc$KDU{P}#2gRiP8sz7UvrfIU5L6!pMdB%Rf$2`xFQZCxl z>)Hg{=~77j$$ud$0I37%V5O7`Ij+q-&rtzL0Wwk+bG=?YMSfKK-uq}b z_(HXxl>_jI_VZeI&TTdebzLtM5aeIiHL1Vs004keDh^mm38fUtIECZ!2q|Sugkk9& zk4I8}SpjI<)+?njj^iTnjpGQV6nQg}L)Udc^6U?JAb+&ylC6Lc@sRkQGxFLv=g@Us zl)jV_UDuHx!Pz?}V~p?nezECs&Os?f+KEwU+txqZr|v+>4ySTod;9wn?K2F+Fbu;m z48t%C!!W;Rgdk8M=jq`E*TlPjfAmL;sUly2U_T8q?&Endk3 zkHHVa;D3!V@oJ3m-uq3;V`*tD^a{1b%)#)%1)YB<%DPWo=lw}EQcs3xlRhA{DY1&o+0U-p! zc_C}<<_ZWiAAF!fIv|0^nH;TkRKhe(nCBTEAAcXKJqjOv`!v`>2wW}~@&u3+5E32| zC1|ZTQGt{aTI Date: Tue, 7 Oct 2025 23:15:18 +0000 Subject: [PATCH 075/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ecfa489faa..dfc6676b72 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Minty642 - changes: - - message: Added fungal soil, maintenance version of hydroponics. - type: Add - id: 8545 - time: '2025-05-21T04:59:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36245 - author: metalgearsloth changes: - message: Picking up items with area pickups (e.g. trash bags) no longer lags the @@ -3954,3 +3947,14 @@ id: 9047 time: '2025-10-07T19:36:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40761 +- author: TrixxedHeart + changes: + - message: 'Added new markings for Vox: 3 new beak types, 2 beak markings, 1 overlay + 6 head, and 3 chest markings.' + type: Add + - message: Fixed sprite layering issue where a Vox's back leg would appear on top + of their front leg in side sprites. + type: Fix + id: 9048 + time: '2025-10-07T23:14:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40569 From 63c17b151d46953de6f57347ccaad749e1354c95 Mon Sep 17 00:00:00 2001 From: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com> Date: Tue, 7 Oct 2025 19:26:56 -0400 Subject: [PATCH 076/216] Added the golden shaker (playtime reward for Bartenders) (#40762) * Added a golden shaker (playtime reward for Bartenders) * Removed redundant icon line --- .../en-US/preferences/loadout-groups.ftl | 1 + .../Consumable/Drinks/drinks_special.yml | 15 ++++++++++++ .../Loadouts/Jobs/Civilian/bartender.yml | 19 +++++++++++++++ .../Prototypes/Loadouts/loadout_groups.yml | 7 ++++++ .../Prototypes/Loadouts/role_loadouts.yml | 1 + .../Drinks/shaker_gold.rsi/icon.png | Bin 0 -> 715 bytes .../Drinks/shaker_gold.rsi/inhand-left.png | Bin 0 -> 525 bytes .../Drinks/shaker_gold.rsi/inhand-right.png | Bin 0 -> 534 bytes .../Drinks/shaker_gold.rsi/meta.json | 22 ++++++++++++++++++ 9 files changed, 65 insertions(+) create mode 100644 Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/icon.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/meta.json diff --git a/Resources/Locale/en-US/preferences/loadout-groups.ftl b/Resources/Locale/en-US/preferences/loadout-groups.ftl index 077462e73b..452b726ee2 100644 --- a/Resources/Locale/en-US/preferences/loadout-groups.ftl +++ b/Resources/Locale/en-US/preferences/loadout-groups.ftl @@ -43,6 +43,7 @@ loadout-group-passenger-neck = Passenger neck loadout-group-bartender-head = Bartender head loadout-group-bartender-jumpsuit = Bartender jumpsuit loadout-group-bartender-outerclothing = Bartender outer clothing +loadout-group-bartender-shaker = Bartender shaker loadout-group-chef-head = Chef head loadout-group-chef-mask = Chef mask diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml index b9929b6704..931620b665 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_special.yml @@ -137,6 +137,21 @@ reactionTypes: - Shake +- type: entity + parent: DrinkShaker + id: DrinkShakerGold + name: golden shaker + description: A gold-plated shaker given as a token of appreciation for years of service. It doesn't make the drinks taste any different. + components: + - type: Sprite + sprite: Objects/Consumable/Drinks/shaker_gold.rsi + - type: Item + sprite: Objects/Consumable/Drinks/shaker_gold.rsi + - type: PhysicalComposition + materialComposition: + Gold: 10 # Gold plated, not solid gold + Steel: 40 + - type: entity parent: [DrinkBaseMaterialMetal, DrinkBase] id: DrinkJigger diff --git a/Resources/Prototypes/Loadouts/Jobs/Civilian/bartender.yml b/Resources/Prototypes/Loadouts/Jobs/Civilian/bartender.yml index c8c80c7895..b8a8744915 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Civilian/bartender.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Civilian/bartender.yml @@ -1,3 +1,12 @@ +- type: loadoutEffectGroup + id: SeniorBar + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobBartender + time: 52h # 1 hour per week for 1 year + # Head - type: loadout id: BartenderHead @@ -40,3 +49,13 @@ id: BartenderWintercoat equipment: outerClothing: ClothingOuterWinterBar + +# Misc +- type: loadout + id: BartenderGoldenShaker + effects: + - !type:GroupLoadoutEffect + proto: SeniorBar + storage: + back: + - DrinkShakerGold diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 085fcb5bbf..59e57739ce 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -270,6 +270,13 @@ - BartenderApron - BartenderWintercoat +- type: loadoutGroup + id: BartenderGoldenShaker + name: loadout-group-bartender-shaker + minLimit: 0 + loadouts: + - BartenderGoldenShaker + - type: loadoutGroup id: ChefHead name: loadout-group-chef-head diff --git a/Resources/Prototypes/Loadouts/role_loadouts.yml b/Resources/Prototypes/Loadouts/role_loadouts.yml index f0a782361c..30b1cb17d2 100644 --- a/Resources/Prototypes/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Loadouts/role_loadouts.yml @@ -61,6 +61,7 @@ - BartenderJumpsuit - CommonBackpack - BartenderOuterClothing + - BartenderGoldenShaker - Glasses - Survival - Trinkets diff --git a/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/icon.png b/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1cc87098887a2c9b490f0ae0782b7e8ae8258d GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo@GwnEjyr^ZK)BSX`Y^13>-iXD}xjxD+42tQV0J5OE3=IrGvOebzc&PSYUjVeN%G1R$B*Oje)Qwq(93&d{Us0895)eG7n{v^S z>Doq*xCNVKe=)S$xy3K)zp(D@s{)JLO~Jc5W_x>zvB!4FUJ|Jm-TQyb)F$~m1>fa& zzW;aU?{kf%7Aoq$4#YoxGl?-@KtKHV=5ErV3d0!k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zo^4|Izfa@aYSGOZKp_SNyT2AdinS!jFZe$YF#O)e7Yr2OEbxdd zW?%FBlnrvZ1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*K_CH$ zLHc1dnxzatzfWLiU;(NyFfuk^TmUf@q=R(<#H1-eHV7~Q&0zwo46?KUvY@&Q4GciC zKIad3sP z%ONm9a05fn)-6vOc#q$zNjS+kJ8ko{iK>=9jPmcc@|2gYR}I)LV&$;*TMS#09z)HH z?F}>DXy}SNs57youyCB<_@Nq*?j+vu_5w?RbqV7QKJ$i4GWO@2ZZG6~u>OBBLz<@Wt~$(69B`3hL`{V literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/inhand-right.png b/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a03626d8b0e29b33222feaa551966010c56fdc63 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}zo^4|Iwp#T6K8?*8Kp}>8<*)UC6l+P4U+{k*VEDa_FBmAmS>O>_ z%)r2R7=#&*=dVZs3QCl?MwA5SrRIOG-LeC!*_ImN znda%K#lQhFmO+Y!K*4Mt|LI1`X<$jHPX0HmXUIJ2DvES?2qgFpfh zgY?5_G)ozPexJb3zyefZU}S8-xBy}*NC)czh)Gj`Y!F}qn!^NE8DwbzWI=Tq8W@0N zea;{7Q0>3I0LYx_>Eaj?;r@1-BVU672g~$p|M%aVu*IP|Lm}%?;&YZX>syn%Un|~_ z4_Vm2)Y_!sa8GoxnN!rY2DOKKi(fdLms}8d|Cxf&UUdcEBj&Tcnl}855IA!7_%m_q z%l1NF-uyJ3wfh?*mqvib0*8eU+MAp_CDyQWsU~iE_F45{#N(fn5^_EsZz}OL_*U^t n-o7$AK!daSFZZbchsGl2UC#C*F%hEuAP0N8`njxgN@xNAiN=v_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/meta.json new file mode 100644 index 0000000000..3a5c625df4 --- /dev/null +++ b/Resources/Textures/Objects/Consumable/Drinks/shaker_gold.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "icon taken from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi ; inhand sprites made by Failed (Discord: greetings_). Color adjustments by Hitlinemoss.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 86b1be88dd93ccd59872328ffbad4528ed8c72fa Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 7 Oct 2025 23:38:51 +0000 Subject: [PATCH 077/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index dfc6676b72..c5e5f417f9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Picking up items with area pickups (e.g. trash bags) no longer lags the - game. - type: Fix - id: 8546 - time: '2025-05-21T06:16:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37638 - author: Errant changes: - message: High-energy shuttle impacts now deal much less damage. @@ -3958,3 +3950,11 @@ id: 9048 time: '2025-10-07T23:14:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40569 +- author: Hitlinemoss + changes: + - message: Bartenders with a significant amount of playtime can now select a golden + shaker in the loadout menu. + type: Add + id: 9049 + time: '2025-10-07T23:37:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40762 From 33cd3df45ae1ca64defbbd39cb541e22a7cdbc4c Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Wed, 8 Oct 2025 04:40:44 +0200 Subject: [PATCH 078/216] Change Energy Shotgun to fit as a Warden weapon (#40757) * Initial commit * Fix toggle mode name and also miscalculated charge times oops --- .../Objects/Weapons/Guns/Battery/battery_guns.yml | 14 ++++++-------- .../Weapons/Guns/Projectiles/projectiles.yml | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 008c177aa5..2f2ebfa5fd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -839,24 +839,22 @@ soundGunshot: path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg - type: ProjectileBatteryAmmoProvider - proto: BulletLaserSpread - fireCost: 150 + proto: BulletLaserSpreadNarrow + fireCost: 80 - type: BatteryWeaponFireModes fireModes: - - proto: BulletLaserSpread - fireCost: 150 - proto: BulletLaserSpreadNarrow - fireCost: 200 + fireCost: 80 - proto: BulletDisablerSmgSpread - fireCost: 120 + fireCost: 48 - type: Item size: Large sprite: Objects/Weapons/Guns/Battery/inhands_64x.rsi heldPrefix: energy - type: GunRequiresWield #remove when inaccuracy on spreads is fixed - type: Battery - maxCharge: 1200 - startingCharge: 1200 + maxCharge: 480 + startingCharge: 480 - type: entity name: energy magnum diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 080f73bdb7..d3e07c2e1b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -1305,7 +1305,7 @@ spread: 30 - type: entity - name: narrow laser barrage + name: lethal laser barrage id: BulletLaserSpreadNarrow categories: [ HideSpawnMenu ] parent: BulletLaser From 694fd0628ff7ea23cb2f86611a69f89085a9ee29 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 02:52:31 +0000 Subject: [PATCH 079/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c5e5f417f9..b308b05667 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Errant - changes: - - message: High-energy shuttle impacts now deal much less damage. - type: Tweak - id: 8547 - time: '2025-05-21T10:37:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37578 - author: metalgearsloth changes: - message: Shuttle impact force is now proportional to direction of impact. @@ -3958,3 +3951,11 @@ id: 9049 time: '2025-10-07T23:37:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40762 +- author: SlamBamActionman + changes: + - message: The Energy Shotgun no longer has a self-recharge or wide fire mode, but + charges faster in rechargers. + type: Tweak + id: 9050 + time: '2025-10-08T02:51:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40757 From 3f115fa1d48e3da132119fb5f96ed8a776559a1a Mon Sep 17 00:00:00 2001 From: Archee Date: Wed, 8 Oct 2025 12:19:17 +0100 Subject: [PATCH 080/216] Fix- Cobras killing adders (#37424) * fixed * adds SimpleHostile to SpaceAdder (the stealth snake) * whoops i branched this off a branch not master This reverts commit fe1562581f91a113950cfedd284a1790e51a48e6. --- Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index 58c4e9c22b..ba8ee70b1a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -393,6 +393,7 @@ - type: NpcFactionMember factions: - Xeno + - SimpleHostile - type: MeleeWeapon angle: 0 animation: WeaponArcBite From 44563dafdcef0294f4f4e82359223603571c5353 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 11:31:38 +0000 Subject: [PATCH 081/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b308b05667..50f5f2e149 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Shuttle impact force is now proportional to direction of impact. - type: Tweak - id: 8548 - time: '2025-05-21T13:32:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37667 - author: muburu changes: - message: Singularity beacons and powersinks now require two free hands to hold. @@ -3959,3 +3952,10 @@ id: 9050 time: '2025-10-08T02:51:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40757 +- author: archee1 + changes: + - message: Space Cobras no longer attack Space Adders automatically. + type: Fix + id: 9051 + time: '2025-10-08T11:30:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37424 From 0c9d33d5d6e4a355188185ae0fa4fdcf287857e5 Mon Sep 17 00:00:00 2001 From: B_Kirill <153602297+B-Kirill@users.noreply.github.com> Date: Wed, 8 Oct 2025 22:43:59 +1000 Subject: [PATCH 082/216] Cleanup warnings: CS0414, CS8524 (#40776) * Cleanup * CS8524 --- .../GameTicking/Commands/SetGamePresetCommand.cs | 2 -- Content.Server/Holopad/HolopadSystem.cs | 2 -- .../Systems/SurveillanceCameraSystem.cs | 2 -- Content.Shared/Humanoid/HumanoidCharacterAppearance.cs | 10 ++++++---- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Content.Server/GameTicking/Commands/SetGamePresetCommand.cs b/Content.Server/GameTicking/Commands/SetGamePresetCommand.cs index 6114a4ca0d..10ec2a5e9b 100644 --- a/Content.Server/GameTicking/Commands/SetGamePresetCommand.cs +++ b/Content.Server/GameTicking/Commands/SetGamePresetCommand.cs @@ -4,7 +4,6 @@ using Content.Server.GameTicking.Presets; using Content.Shared.Administration; using Linguini.Shared.Util; using Robust.Shared.Console; -using Robust.Shared.Prototypes; namespace Content.Server.GameTicking.Commands { @@ -12,7 +11,6 @@ namespace Content.Server.GameTicking.Commands public sealed class SetGamePresetCommand : IConsoleCommand { [Dependency] private readonly IEntityManager _entity = default!; - [Dependency] private readonly IPrototypeManager _prototype = default!; public string Command => "setgamepreset"; public string Description => Loc.GetString("set-game-preset-command-description", ("command", Command)); diff --git a/Content.Server/Holopad/HolopadSystem.cs b/Content.Server/Holopad/HolopadSystem.cs index 0cba4824db..5a4f4d93ce 100644 --- a/Content.Server/Holopad/HolopadSystem.cs +++ b/Content.Server/Holopad/HolopadSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Holopad; using Content.Shared.IdentityManagement; using Content.Shared.Labels.Components; using Content.Shared.Mobs; -using Content.Shared.Mobs.Systems; using Content.Shared.Power; using Content.Shared.Silicons.StationAi; using Content.Shared.Speech; @@ -40,7 +39,6 @@ public sealed class HolopadSystem : SharedHolopadSystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly PvsOverrideSystem _pvs = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; private float _updateTimer = 1.0f; private const float UpdateTime = 1.0f; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 7e275c78ce..70d9c8ae93 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -1,6 +1,5 @@ using Content.Server.Administration.Logs; using Content.Server.DeviceNetwork.Systems; -using Content.Shared.ActionBlocker; using Content.Shared.Database; using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Events; @@ -17,7 +16,6 @@ namespace Content.Server.SurveillanceCamera; public sealed class SurveillanceCameraSystem : SharedSurveillanceCameraSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; [Dependency] private readonly ViewSubscriberSystem _viewSubscriberSystem = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private readonly UserInterfaceSystem _userInterface = default!; diff --git a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs index 583341c815..a9dd6d8755 100644 --- a/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs +++ b/Content.Shared/Humanoid/HumanoidCharacterAppearance.cs @@ -100,6 +100,7 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance, { SkinColorationStrategyInput.Unary => skinColoration.FromUnary(speciesPrototype.DefaultHumanSkinTone), SkinColorationStrategyInput.Color => skinColoration.ClosestSkinColor(speciesPrototype.DefaultSkinTone), + _ => skinColoration.ClosestSkinColor(speciesPrototype.DefaultSkinTone), }; return new( @@ -109,11 +110,11 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance, Color.Black, Color.Black, skinColor, - new () + new() ); } - private static IReadOnlyList RealisticEyeColors = new List + private static IReadOnlyList _realisticEyeColors = new List { Color.Brown, Color.Gray, @@ -145,7 +146,7 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance, // TODO: Add random markings - var newEyeColor = random.Pick(RealisticEyeColors); + var newEyeColor = random.Pick(_realisticEyeColors); var protoMan = IoCManager.Resolve(); var skinType = protoMan.Index(species).SkinColoration; @@ -155,9 +156,10 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance, { SkinColorationStrategyInput.Unary => strategy.FromUnary(random.NextFloat(0f, 100f)), SkinColorationStrategyInput.Color => strategy.ClosestSkinColor(new Color(random.NextFloat(1), random.NextFloat(1), random.NextFloat(1), 1)), + _ => strategy.ClosestSkinColor(new Color(random.NextFloat(1), random.NextFloat(1), random.NextFloat(1), 1)), }; - return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ()); + return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new()); float RandomizeColor(float channel) { From 68b3c7a5206d63c3590f3c2be36d6df909cd161e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Wed, 8 Oct 2025 08:48:00 -0500 Subject: [PATCH 083/216] Clean up bucket.yml (#40772) SMASH that bucket Co-authored-by: iaada --- .../Drinks/drinks_base_materials.yml | 28 +++++++++++ .../Entities/Objects/Tools/bucket.yml | 46 ++----------------- 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base_materials.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base_materials.yml index 7db03edbf5..43df992b2a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base_materials.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_base_materials.yml @@ -117,6 +117,34 @@ materialComposition: Plastic: 25 +# Strong plastic +- type: entity + abstract: true + parent: DrinkBaseMaterialPlastic + id: DrinkBaseMaterialStrongPlastic + components: + - type: Destructible + thresholds: + - trigger: # Overkill threshold + !type:DamageTrigger + damage: 200 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 20 # can take a few more hits than basic plastic + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalCrunch # TODO a plastic break collection + - !type:SpillBehavior { } + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: PhysicalComposition + materialComposition: + Plastic: 100 + # Fragile cardboard - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml index c62b178366..3c95afe69e 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml @@ -1,22 +1,13 @@ - type: entity - parent: DrinkBase + parent: [ DrinkBaseMaterialStrongPlastic, DrinkBase, DrinkVisualsFill ] id: Bucket name: bucket description: It's a boring old bucket. components: - - type: Clickable - type: Edible - edible: Drink - solution: bucket - destroyOnEmpty: false utensil: Spoon - type: Sprite sprite: Objects/Tools/bucket.rsi - layers: - - state: icon - - map: ["enum.SolutionContainerLayers.Fill"] - state: fill-1 - visible: false - type: Item size: Normal - type: Clothing @@ -26,50 +17,23 @@ quickEquip: false - type: SolutionContainerManager solutions: - bucket: + drink: maxVol: 250 - - type: MixableSolution - solution: bucket - type: SolutionTransfer transferAmount: 100 maxTransferAmount: 100 minTransferAmount: 10 - canChangeTransferAmount: true - - type: UserInterface - interfaces: - enum.TransferAmountUiKey.Key: - type: TransferAmountBoundUserInterface - - type: MeleeWeapon - soundNoDamage: - path: "/Audio/Effects/Fluids/splat.ogg" - damage: - types: - Blunt: 0 - - type: Spillable - solution: bucket - type: SpillWhenWorn - solution: bucket - - type: DrawableSolution - solution: bucket - - type: RefillableSolution - solution: bucket - - type: DrainableSolution - solution: bucket - - type: SolutionItemStatus - solution: bucket - - type: Appearance + solution: drink - type: SolutionContainerVisuals maxFillLevels: 3 - fillBaseName: fill- - - type: ExaminableSolution - solution: bucket + inHandsFillBaseName: null - type: Tag tags: - Bucket - type: PhysicalComposition materialComposition: Plastic: 50 - - type: DnaSubstanceTrace - type: entity parent: Bucket @@ -79,5 +43,5 @@ components: - type: SolutionContainerManager solutions: - bucket: + drink: maxVol: 500 From 532564e05fab1e85d3e00b20f87b0cd6e86c5cc6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 13:59:45 +0000 Subject: [PATCH 084/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 50f5f2e149..4011609fb1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: muburu - changes: - - message: Singularity beacons and powersinks now require two free hands to hold. - type: Tweak - id: 8549 - time: '2025-05-21T17:11:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37683 - author: ElectroJr changes: - message: Microwaving the nuke disk will now slightly randomize the nuke countdown @@ -3959,3 +3952,10 @@ id: 9051 time: '2025-10-08T11:30:29.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37424 +- author: aada + changes: + - message: Buckets are now destructible. + type: Tweak + id: 9052 + time: '2025-10-08T13:58:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40772 From 91aa169784a59ff446cb4487cd134e6f95171342 Mon Sep 17 00:00:00 2001 From: UpAndLeaves <92269094+Alpha-Two@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:57:55 +0100 Subject: [PATCH 085/216] Slightly re-nerf zombification speed (#37445) Initial Commit --- Content.Shared/Zombies/PendingZombieComponent.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Zombies/PendingZombieComponent.cs b/Content.Shared/Zombies/PendingZombieComponent.cs index b199edeb00..310f731e07 100644 --- a/Content.Shared/Zombies/PendingZombieComponent.cs +++ b/Content.Shared/Zombies/PendingZombieComponent.cs @@ -17,7 +17,7 @@ public sealed partial class PendingZombieComponent : Component { DamageDict = new () { - { "Poison", 0.4 }, + { "Poison", 0.3 }, } }; @@ -34,7 +34,7 @@ public sealed partial class PendingZombieComponent : Component /// The amount of time left before the infected begins to take damage. /// [DataField("gracePeriod"), ViewVariables(VVAccess.ReadWrite)] - public TimeSpan GracePeriod = TimeSpan.Zero; + public TimeSpan GracePeriod = TimeSpan.FromMinutes(2); /// /// The minimum amount of time initial infected have before they start taking infection damage. From 4f93089e4240c2ec72684357ba95392fc49196a4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 14:12:08 +0000 Subject: [PATCH 086/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4011609fb1..2343c65dfd 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ElectroJr - changes: - - message: Microwaving the nuke disk will now slightly randomize the nuke countdown - timer. - type: Add - id: 8550 - time: '2025-05-21T18:06:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36114 - author: AsnDen changes: - message: Cyborgs now can scream. 9 new screaming sound were added. @@ -3959,3 +3951,11 @@ id: 9052 time: '2025-10-08T13:58:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40772 +- author: UpAndLeaves + changes: + - message: Zombie infections now take approximately three minutes longer to bring + a fully healed person to critical condition. + type: Tweak + id: 9053 + time: '2025-10-08T14:11:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37445 From 41c7229b9dda4ebbf426288d15fd199645cda482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Wed, 8 Oct 2025 09:14:49 -0500 Subject: [PATCH 087/216] cleanup and reorganize belts.yml (#40773) commit discipline? Never heard of it Co-authored-by: iaada --- .../Entities/Clothing/Belt/belts.yml | 642 ++---------------- .../Prototypes/Entities/Clothing/Belt/job.yml | 422 ++++++++++++ .../Entities/Clothing/Belt/quiver.yml | 28 - .../Entities/Clothing/Belt/simple.yml | 44 ++ Resources/migration.yml | 3 + 5 files changed, 522 insertions(+), 617 deletions(-) create mode 100644 Resources/Prototypes/Entities/Clothing/Belt/job.yml delete mode 100644 Resources/Prototypes/Entities/Clothing/Belt/quiver.yml create mode 100644 Resources/Prototypes/Entities/Clothing/Belt/simple.yml diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index 5273fa1453..d114136a04 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -1,529 +1,4 @@ -# Belts that need/have visualizers - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltUtility - name: utility belt - description: Can hold various things. - components: - - type: Sprite - sprite: Clothing/Belt/utility.rsi - - type: Clothing - sprite: Clothing/Belt/utility.rsi - - type: Storage - maxItemSize: Normal - # Don't add more than absolutely needed to this whitelist! - # Utility belts shouldn't just be free extra storage. - # This is only intended for basic engineering equipment. - whitelist: - tags: - - Powerdrill - - Wirecutter - - Crowbar - - Screwdriver - - Flashlight - - Wrench - - GeigerCounter - - Flare - - CableCoil - - CigPack - - Radio - - HolofanProjector - - Multitool - - AppraisalTool - - JawsOfLife - - GPS - - WeldingMask - - RemoteSignaller - - UtilityKnife - components: - - StationMap - - SprayPainter - - SprayPainterAmmo - - NetworkConfigurator - - RCD - - RCDAmmo - - Welder - - PowerCell - - Geiger - - TrayScanner - - GasAnalyzer - - HandLabeler - - type: ItemMapper - mapLayers: - drill: - whitelist: - tags: - - Powerdrill - cutters_red: - whitelist: - tags: - - Wirecutter - crowbar: - whitelist: - tags: - - Crowbar - crowbar_red: - whitelist: - tags: - - CrowbarRed - jaws: - whitelist: - tags: - - JawsOfLife - screwdriver_nuke: - whitelist: - tags: - - Screwdriver - wrench: - whitelist: - tags: - - Wrench - multitool: - whitelist: - tags: - - Multitool - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - - type: Tag - tags: - - UtilityBelt - - WhitelistChameleon - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltChiefEngineer - name: chief engineer's toolbelt - description: Holds tools, looks snazzy. - components: - - type: Sprite - sprite: Clothing/Belt/ce.rsi - - type: Clothing - sprite: Clothing/Belt/ce.rsi - - type: Storage - grid: - - 0,0,9,1 - # TODO: Fill this out more. - whitelist: - tags: - - Wirecutter - - Crowbar - - Screwdriver - - Flashlight - - Wrench - - GeigerCounter - - Flare - - CableCoil - - Powerdrill - - JawsOfLife - - CigPack - - Radio - - HolofanProjector - - Multitool - - AppraisalTool - - UtilityKnife - components: - - StationMap - - SprayPainter - - SprayPainterAmmo - - NetworkConfigurator - - RCD - - RCDAmmo - - Welder - - Flash - - Handcuff - - PowerCell - - Geiger - - TrayScanner - - GasAnalyzer - - type: ItemMapper - mapLayers: - drill: - whitelist: - tags: - - Powerdrill - cutters_red: - whitelist: - tags: - - Wirecutter - crowbar: - whitelist: - tags: - - Crowbar - crowbar_red: - whitelist: - tags: - - CrowbarRed - jaws: - whitelist: - tags: - - JawsOfLife - screwdriver_nuke: - whitelist: - tags: - - Screwdriver - multitool: - whitelist: - tags: - - Multitool - wrench: - whitelist: - tags: - - Wrench - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - - type: StealTarget - stealGroup: ChiefEngineerToolBelt - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltAssault - name: assault belt - description: A tactical assault belt. - components: - - type: Sprite - sprite: Clothing/Belt/assault.rsi - - type: Clothing - sprite: Clothing/Belt/assault.rsi - - type: Storage - whitelist: - tags: - - CigPack - - Taser - components: - - Stunbaton - - FlashOnTrigger - - SmokeOnTrigger - - Flash - - Handcuff - - BallisticAmmoProvider - - Ammo - - type: ItemMapper - mapLayers: - flashbang: - whitelist: - components: - - FlashOnTrigger - stunbaton: - whitelist: - components: - - Stunbaton - tear_gas_grenade: - whitelist: - components: - - SmokeOnTrigger - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltJanitor - name: janibelt - description: A belt used to hold most janitorial supplies. - components: - - type: Sprite - sprite: Clothing/Belt/janitor.rsi - - type: Clothing - sprite: Clothing/Belt/janitor.rsi - - type: Storage - whitelist: - tags: - - Wrench - - Bottle - - Spray - - Soap - - Flashlight - - CigPack - - TrashBag - - WetFloorSign - - HolosignProjector - - Plunger - - GoldenPlunger - - WireBrush - components: - - LightReplacer - - SmokeOnTrigger - maxItemSize: Large - - type: ItemMapper - mapLayers: - bottle: - whitelist: - tags: - - Bottle - bottle_spray: - whitelist: - tags: - - Spray - wrench: - whitelist: - tags: - - Wrench - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltMedical - name: medical belt - description: Can hold various medical equipment. - components: - - type: Sprite - sprite: Clothing/Belt/medical.rsi - - type: Clothing - sprite: Clothing/Belt/medical.rsi - - type: Storage - whitelist: - tags: - - Wrench - - Bottle - - Spray - - Brutepack - - Bloodpack - - Gauze - - Ointment - - CigPack - - PillCanister - - Radio - - DiscreteHealthAnalyzer - - SurgeryTool - - Dropper - components: - - Hypospray - - Injector - - Pill - - HandLabeler - - type: ItemMapper - mapLayers: - bottle: - whitelist: - tags: - - Bottle - hypo: - whitelist: - components: - - Hypospray - pill: - whitelist: - components: - - Pill - tags: - - PillCanister - bottle_spray: - whitelist: - tags: - - Spray - # spray_med: - # whitelist: - # tags: - # - SprayMedical - # wrench_medical: - # whitelist: - # tags: - # - WrenchMedical - wrench: - whitelist: - tags: - - Wrench - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - -- type: entity - parent: ClothingBeltMedical - id: ClothingBeltMedicalEMT - name: EMT belt - description: Perfect for holding various equipment for medical emergencies. - components: - - type: Sprite - sprite: Clothing/Belt/emt.rsi - - type: Clothing - sprite: Clothing/Belt/emt.rsi - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltPlant - name: botanical belt - description: A belt used to hold most hydroponics supplies. Suprisingly, not green. - components: - - type: Sprite - sprite: Clothing/Belt/plant.rsi - - type: Clothing - sprite: Clothing/Belt/plant.rsi - - type: Storage - whitelist: - tags: - # - PlantAnalyzer - - PlantSampleTaker - - BotanyShovel - - BotanyHoe - - BotanyHatchet - - PlantSampleTaker - - PlantBGone - - Bottle - - Syringe - - CigPack - - Dropper - components: - - Seed - - Smokable - - HandLabeler - - type: ItemMapper - mapLayers: - hatchet: - whitelist: - tags: - - BotanyHatchet - # hydro: - # whitelist: - # tags: - # - PlantAnalyzer # Dunno what to put here, should be aight. - hoe: - whitelist: - tags: - - BotanyHoe - secateurs: # We don't have secateurs and this looks similar enough. - whitelist: - tags: - - BotanyShovel - plantbgone: - whitelist: - tags: - - PlantBGone - bottle: - whitelist: - tags: - - Bottle - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltChef - name: chef belt - description: A belt used to hold kitchen knives and condiments for quick access. - components: - - type: Sprite - sprite: Clothing/Belt/chef.rsi - - type: Clothing - sprite: Clothing/Belt/chef.rsi - - type: Storage - whitelist: - tags: - - KitchenKnife - - Cleaver - - RollingPin - - Coldsauce - - Enzyme - - Hotsauce - - Ketchup - - BBQsauce - - SaltShaker - - PepperShaker - - CigPack - - Packet - - Skewer - - MonkeyCube - - Mayo - components: - - Mousetrap - - Smokable - - Utensil - - type: ItemMapper - mapLayers: - kitchenknife: - whitelist: - tags: - - KitchenKnife - cleaver: - whitelist: - tags: - - Cleaver - rollingpin: - whitelist: - tags: - - RollingPin - coldsauce: - whitelist: - tags: - - Coldsauce - enzyme: - whitelist: - tags: - - Enzyme - hotsauce: - whitelist: - tags: - - Hotsauce - ketchup: - whitelist: - tags: - - Ketchup - bbqsauce: - whitelist: - tags: - - BBQsauce - saltshaker: - whitelist: - tags: - - SaltShaker - peppershaker: - whitelist: - tags: - - PepperShaker - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance - -- type: entity - parent: [ClothingBeltStorageBase, ContentsExplosionResistanceBase, BaseSecurityContraband] - id: ClothingBeltSecurity - name: security belt - description: Can hold security gear like handcuffs and flashes. - components: - - type: Sprite - sprite: Clothing/Belt/security.rsi - - type: Clothing - sprite: Clothing/Belt/security.rsi - - type: ExplosionResistance - damageCoefficient: 0.9 - - type: Storage - whitelist: - tags: - - CigPack - - Taser - - SecBeltEquip - - Radio - - Sidearm - - MagazinePistol - - MagazineMagnum - - CombatKnife - - Truncheon - - HandGrenade - components: - - Stunbaton - - FlashOnTrigger - - SmokeOnTrigger - - Flash - - Handcuff - - BallisticAmmoProvider - - CartridgeAmmo - - DoorRemote - - Whistle - - BalloonPopper - - type: ItemMapper - mapLayers: - flashbang: - whitelist: - components: - - FlashOnTrigger - stunbaton: - whitelist: - components: - - Stunbaton - tear_gas_grenade: - whitelist: - components: - - SmokeOnTrigger - sprite: Clothing/Belt/belt_overlay.rsi - - type: Appearance +## Belts that need/have visualizers - type: entity parent: [ClothingBeltBase, ClothingSlotBase, BaseCommandContraband] @@ -557,7 +32,36 @@ - CaptainSabre - type: Appearance -# Belts without visualizers +- type: entity + parent: ClothingBeltStorageBase + id: ClothingBeltQuiver + name: quiver + description: Can hold up to 15 arrows, and fits snug around your waist. + components: + - type: Sprite + sprite: Clothing/Belt/quiver.rsi + layers: + - state: icon + - map: [ "enum.StorageContainerVisualLayers.Fill" ] + visible: false + - type: Clothing + - type: Storage + grid: + - 0,0,7,3 + maxItemSize: Small + whitelist: + tags: + - Arrow + - Plunger + - type: Appearance + - type: StorageContainerVisuals + maxFillLevels: 3 + fillBaseName: fill- + - type: Construction + graph: Quiver + node: Quiver + +## Belts without visualizers - type: entity parent: [ClothingBeltAmmoProviderBase, BaseSecurityBartenderContraband] @@ -578,19 +82,24 @@ capacity: 14 - type: entity - parent: ClothingBeltBase - id: ClothingBeltChampion - name: championship belt - description: Proves to the world that you are the strongest! + parent: [ ClothingBeltStorageBase, BaseMagicalContraband ] + id: ClothingBeltWand + name: wand belt + description: A belt designed to hold various rods of power. A veritable fanny pack of exotic magic. components: - type: Sprite - sprite: Clothing/Belt/champion.rsi + sprite: Clothing/Belt/wand.rsi - type: Clothing - sprite: Clothing/Belt/champion.rsi - quickEquip: true - - type: Tag - tags: - - Kangaroo + sprite: Clothing/Belt/wand.rsi + - type: Storage + grid: + - 0,0,15,1 + whitelist: + tags: + - WizardWand + - WhitelistChameleon + +## Holsters - type: entity parent: ClothingBeltStorageBase @@ -616,20 +125,22 @@ sprite: Clothing/Belt/syndieholster.rsi - type: Clothing sprite: Clothing/Belt/syndieholster.rsi - - type: Item - size: Ginormous - type: Storage maxItemSize: Huge grid: - 0,0,3,3 whitelist: components: - - Gun - - BallisticAmmoProvider - - CartridgeAmmo + - Gun + - BallisticAmmoProvider + - CartridgeAmmo - type: StaticPrice price: 500 +## Webbing + +# Weirdly the only webbing with a storage whitelist and item mapper. +# Might be worth making less common (armory only?) and removing the whitelist to eliminate the inconsistency. - type: entity parent: ClothingBeltSecurity id: ClothingBeltSecurityWebbing @@ -688,50 +199,3 @@ sprite: Clothing/Belt/militarywebbingmed.rsi - type: Clothing sprite: Clothing/Belt/militarywebbingmed.rsi - - type: Item - size: Huge - - type: ExplosionResistance - damageCoefficient: 0.1 - -- type: entity - parent: ClothingBeltBase - id: ClothingBeltSuspendersRed - name: red suspenders - description: For holding your pants up. - components: - - type: Tag - tags: - - MimeBelt - - type: Sprite - sprite: Clothing/Belt/suspenders_red.rsi - state: icon - - type: Clothing - sprite: Clothing/Belt/suspenders_red.rsi - quickEquip: true - -- type: entity - parent: ClothingBeltSuspendersRed - id: ClothingBeltSuspendersBlack - name: black suspenders - components: - - type: Sprite - sprite: Clothing/Belt/suspenders_black.rsi - - type: Clothing - sprite: Clothing/Belt/suspenders_black.rsi - -- type: entity - parent: [ ClothingBeltStorageBase, BaseMagicalContraband ] - id: ClothingBeltWand - name: wand belt - description: A belt designed to hold various rods of power. A veritable fanny pack of exotic magic. - components: - - type: Sprite - sprite: Clothing/Belt/wand.rsi - - type: Clothing - sprite: Clothing/Belt/wand.rsi - - type: Storage - grid: - - 0,0,15,1 - whitelist: - tags: - - WizardWand diff --git a/Resources/Prototypes/Entities/Clothing/Belt/job.yml b/Resources/Prototypes/Entities/Clothing/Belt/job.yml new file mode 100644 index 0000000000..9f170017f5 --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Belt/job.yml @@ -0,0 +1,422 @@ +# Belts meant to be used by a specific job to hold their tools + +- type: entity + abstract: true + parent: ClothingBeltStorageBase + id: BaseClothingBeltEngineering + components: + - type: Storage + # Don't add more than absolutely needed to this whitelist! + # Utility belts shouldn't just be free extra storage. + # This is only intended for basic engineering equipment. + whitelist: + tags: + - Powerdrill + - Wirecutter + - Crowbar + - Screwdriver + - Flashlight + - Wrench + - GeigerCounter + - Flare + - CableCoil + - CigPack + - Radio + - HolofanProjector + - Multitool + - AppraisalTool + - JawsOfLife + - GPS + - WeldingMask + - RemoteSignaller + - UtilityKnife + components: + - StationMap + - SprayPainter + - SprayPainterAmmo + - NetworkConfigurator + - RCD + - RCDAmmo + - Welder + - PowerCell + - Geiger + - TrayScanner + - GasAnalyzer + - HandLabeler + - type: ItemMapper + sprite: &BeltOverlay Clothing/Belt/belt_overlay.rsi + mapLayers: + drill: + whitelist: + tags: + - Powerdrill + cutters_red: + whitelist: + tags: + - Wirecutter + crowbar: + whitelist: + tags: + - Crowbar + crowbar_red: + whitelist: + tags: + - CrowbarRed + jaws: + whitelist: + tags: + - JawsOfLife + screwdriver_nuke: + whitelist: + tags: + - Screwdriver + wrench: + whitelist: + tags: + - Wrench + multitool: + whitelist: + tags: + - Multitool + - type: Appearance + +- type: entity + parent: BaseClothingBeltEngineering + id: ClothingBeltUtility + name: utility belt + description: Can hold various things. + components: + - type: Sprite + sprite: Clothing/Belt/utility.rsi + - type: Clothing + sprite: Clothing/Belt/utility.rsi + - type: Tag + tags: + - UtilityBelt + - WhitelistChameleon + +- type: entity + parent: BaseClothingBeltEngineering + id: ClothingBeltChiefEngineer + name: chief engineer's toolbelt + description: Holds tools, looks snazzy. + components: + - type: Sprite + sprite: Clothing/Belt/ce.rsi + - type: Clothing + sprite: Clothing/Belt/ce.rsi + - type: Storage + grid: + - 0,0,9,1 + - type: StealTarget + stealGroup: ChiefEngineerToolBelt + +- type: entity + parent: ClothingBeltStorageBase + id: ClothingBeltJanitor + name: janibelt + description: A belt used to hold most janitorial supplies. + components: + - type: Sprite + sprite: Clothing/Belt/janitor.rsi + - type: Clothing + sprite: Clothing/Belt/janitor.rsi + - type: Storage + maxItemSize: Large + whitelist: + tags: + - Wrench + - Bottle + - Spray + - Soap + - Flashlight + - CigPack + - TrashBag + - WetFloorSign + - HolosignProjector + - Plunger + - GoldenPlunger + - WireBrush + components: + - LightReplacer + - SmokeOnTrigger + - type: ItemMapper + sprite: *BeltOverlay + mapLayers: + bottle: + whitelist: + tags: + - Bottle + bottle_spray: + whitelist: + tags: + - Spray + wrench: + whitelist: + tags: + - Wrench + - type: Appearance + +- type: entity + parent: ClothingBeltStorageBase + id: ClothingBeltMedical + name: medical belt + description: Can hold various medical equipment. + components: + - type: Sprite + sprite: Clothing/Belt/medical.rsi + - type: Clothing + sprite: Clothing/Belt/medical.rsi + - type: Storage + whitelist: + tags: + - Wrench + - Bottle + - Spray + - Brutepack + - Bloodpack + - Gauze + - Ointment + - CigPack + - PillCanister + - Radio + - DiscreteHealthAnalyzer + - SurgeryTool + - Dropper + components: + - Hypospray + - Injector + - Pill + - HandLabeler + - type: ItemMapper + sprite: *BeltOverlay + mapLayers: + bottle: + whitelist: + tags: + - Bottle + hypo: + whitelist: + components: + - Hypospray + pill: + whitelist: + components: + - Pill + tags: + - PillCanister + bottle_spray: + whitelist: + tags: + - Spray + # spray_med: + # whitelist: + # tags: + # - SprayMedical + # wrench_medical: + # whitelist: + # tags: + # - WrenchMedical + wrench: + whitelist: + tags: + - Wrench + - type: Appearance + +- type: entity + parent: ClothingBeltMedical + id: ClothingBeltMedicalEMT + name: EMT belt + description: Perfect for holding various equipment for medical emergencies. + components: + - type: Sprite + sprite: Clothing/Belt/emt.rsi + - type: Clothing + sprite: Clothing/Belt/emt.rsi + +- type: entity + parent: ClothingBeltStorageBase + id: ClothingBeltPlant + name: botanical belt + description: A belt used to hold most hydroponics supplies. Suprisingly, not green. + components: + - type: Sprite + sprite: Clothing/Belt/plant.rsi + - type: Clothing + sprite: Clothing/Belt/plant.rsi + - type: Storage + whitelist: + tags: + # - PlantAnalyzer + - PlantSampleTaker + - BotanyShovel + - BotanyHoe + - BotanyHatchet + - PlantSampleTaker + - PlantBGone + - Bottle + - Syringe + - CigPack + - Dropper + components: + - Seed + - Smokable + - HandLabeler + - type: ItemMapper + sprite: *BeltOverlay + mapLayers: + hatchet: + whitelist: + tags: + - BotanyHatchet + # hydro: + # whitelist: + # tags: + # - PlantAnalyzer # Dunno what to put here, should be aight. + hoe: + whitelist: + tags: + - BotanyHoe + secateurs: # We don't have secateurs and this looks similar enough. + whitelist: + tags: + - BotanyShovel + plantbgone: + whitelist: + tags: + - PlantBGone + bottle: + whitelist: + tags: + - Bottle + - type: Appearance + +- type: entity + parent: ClothingBeltStorageBase + id: ClothingBeltChef + name: chef belt + description: A belt used to hold kitchen knives and condiments for quick access. + components: + - type: Sprite + sprite: Clothing/Belt/chef.rsi + - type: Clothing + sprite: Clothing/Belt/chef.rsi + - type: Storage + whitelist: + tags: + - KitchenKnife + - Cleaver + - RollingPin + - Coldsauce + - Enzyme + - Hotsauce + - Ketchup + - BBQsauce + - SaltShaker + - PepperShaker + - CigPack + - Packet + - Skewer + - MonkeyCube + - Mayo + components: + - Mousetrap + - Smokable + - Utensil + - type: ItemMapper + sprite: *BeltOverlay + mapLayers: + kitchenknife: + whitelist: + tags: + - KitchenKnife + cleaver: + whitelist: + tags: + - Cleaver + rollingpin: + whitelist: + tags: + - RollingPin + coldsauce: + whitelist: + tags: + - Coldsauce + enzyme: + whitelist: + tags: + - Enzyme + hotsauce: + whitelist: + tags: + - Hotsauce + ketchup: + whitelist: + tags: + - Ketchup + bbqsauce: + whitelist: + tags: + - BBQsauce + saltshaker: + whitelist: + tags: + - SaltShaker + peppershaker: + whitelist: + tags: + - PepperShaker + - type: Appearance + +- type: entity + parent: [ClothingBeltStorageBase, ContentsExplosionResistanceBase, BaseSecurityContraband] + id: ClothingBeltSecurity + name: security belt + description: Can hold security gear like handcuffs and flashes. + components: + - type: Sprite + sprite: Clothing/Belt/security.rsi + - type: Clothing + sprite: Clothing/Belt/security.rsi + - type: ExplosionResistance + damageCoefficient: 0.9 + - type: Storage + whitelist: + tags: + - CigPack + - Taser + - SecBeltEquip + - Radio + - Sidearm + - MagazinePistol + - MagazineMagnum + - CombatKnife + - Truncheon + - HandGrenade + components: + - Stunbaton + - FlashOnTrigger + - SmokeOnTrigger + - Flash + - Handcuff + - BallisticAmmoProvider + - CartridgeAmmo + - DoorRemote + - Whistle + - BalloonPopper + - type: ItemMapper + sprite: *BeltOverlay + mapLayers: + flashbang: + whitelist: + components: + - FlashOnTrigger + stunbaton: + whitelist: + components: + - Stunbaton + tear_gas_grenade: + whitelist: + components: + - SmokeOnTrigger + - type: Appearance diff --git a/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml b/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml deleted file mode 100644 index bb4e395c4f..0000000000 --- a/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml +++ /dev/null @@ -1,28 +0,0 @@ -- type: entity - parent: ClothingBeltStorageBase - id: ClothingBeltQuiver - name: quiver - description: Can hold up to 15 arrows, and fits snug around your waist. - components: - - type: Sprite - sprite: Clothing/Belt/quiver.rsi - layers: - - state: icon - - map: [ "enum.StorageContainerVisualLayers.Fill" ] - visible: false - - type: Clothing - - type: Storage - grid: - - 0,0,7,3 - maxItemSize: Small - whitelist: - tags: - - Arrow - - Plunger - - type: Appearance - - type: StorageContainerVisuals - maxFillLevels: 3 - fillBaseName: fill- - - type: Construction - graph: Quiver - node: Quiver diff --git a/Resources/Prototypes/Entities/Clothing/Belt/simple.yml b/Resources/Prototypes/Entities/Clothing/Belt/simple.yml new file mode 100644 index 0000000000..c1c9861f9f --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Belt/simple.yml @@ -0,0 +1,44 @@ +# For cosmetic belts parenting off ClothingBeltBase + +- type: entity + parent: ClothingBeltBase + id: ClothingBeltChampion + name: championship belt + description: Proves to the world that you are the strongest! + components: + - type: Sprite + sprite: Clothing/Belt/champion.rsi + - type: Clothing + sprite: Clothing/Belt/champion.rsi + quickEquip: true + - type: Tag + tags: + - Kangaroo # Kangaroo wearable. Dare to challenge the champ? + - WhitelistChameleon + +- type: entity + parent: ClothingBeltBase + id: ClothingBeltSuspendersRed + name: red suspenders + description: For holding your pants up. + components: + - type: Sprite + sprite: Clothing/Belt/suspenders_red.rsi + state: icon + - type: Clothing + sprite: Clothing/Belt/suspenders_red.rsi + quickEquip: true + - type: Tag + tags: + - MimeBelt + - WhitelistChameleon + +- type: entity + parent: ClothingBeltSuspendersRed + id: ClothingBeltSuspendersBlack + name: black suspenders + components: + - type: Sprite + sprite: Clothing/Belt/suspenders_black.rsi + - type: Clothing + sprite: Clothing/Belt/suspenders_black.rsi diff --git a/Resources/migration.yml b/Resources/migration.yml index ea991259ed..d05795def4 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -725,3 +725,6 @@ PrefilledSyringe: Syringe # 2025-10-6 BibleTanakh: null BibleSatanic: null + +# 2025-10-8 +ClothingBeltAssault: ClothingBeltMilitaryWebbing From 7cdd8cb2a9755cfb0e6ddaf133578c2ea0b679df Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Wed, 8 Oct 2025 16:50:23 +0200 Subject: [PATCH 088/216] Add disclaimer about AI generated content to Readme.md (#39334) * Add disclaimer about AI generated content to Readme.md * Update README.md * rephrase --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 400c25c6f9..2e88d9f547 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,15 @@ Just make sure your changes and pull requests are in accordance with the [contri We are not currently accepting translations of the game on our main repository. If you would like to translate the game into another language, consider creating a fork or contributing to a fork. +## AI-generated contributions disclaimer +This project does not accept low-effort or wholesale AI-generated contributions. Examples include, but are not limited to: + +- Any code (including yaml) generated by tools like GitHub Copilot, ChatGPT, or similar. +- AI-created artwork, sound files, or other assets. +- Auto-generated documentation, issue reports or pull request descriptions. + +Exceptions to this are simple tools like Rider's single-line completion feature. + ## Building 1. Clone this repo: From 92082f80914856cc608817d0449afb7430af99ab Mon Sep 17 00:00:00 2001 From: YoungThug Date: Wed, 8 Oct 2025 07:59:36 -0700 Subject: [PATCH 089/216] Fix the temperature gun not reflecting and going through windows (#37581) * Fix Temp Gun * Fix mask, muzzle flash --------- Co-authored-by: SlamBamActionman --- .../Weapons/Guns/Projectiles/projectiles.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index d3e07c2e1b..a853282d0b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -398,7 +398,7 @@ - state: omnilaser shader: unshaded - type: Ammo - muzzleFlash: null + muzzleFlash: MuzzleFlashEffectOmnilaser - type: Physics - type: Fixtures fixtures: @@ -408,7 +408,8 @@ bounds: "-0.2,-0.2,0.2,0.2" hard: false mask: - - Opaque + - Impassable + - BulletImpassable fly-by: *flybyfixture - type: Projectile # soundHit: Waiting on serv3 @@ -427,6 +428,9 @@ parent: WatcherBolt categories: [ HideSpawnMenu ] components: + - type: Reflective + reflective: + - Energy - type: Projectile # soundHit: Waiting on serv3 impactEffect: BulletImpactEffectDisabler @@ -441,7 +445,7 @@ - type: entity name: magmawing watcher bolt id: WatcherBoltMagmawing - parent: BaseBullet + parent: WatcherBolt categories: [ HideSpawnMenu ] components: - type: Sprite @@ -450,6 +454,8 @@ - state: omnilaser_greyscale shader: unshaded color: orangered + - type: Ammo + muzzleFlash: MuzzleFlashEffectHeavyLaser - type: Projectile # soundHit: Waiting on serv3 impactEffect: BulletImpactEffectOrangeDisabler @@ -465,6 +471,9 @@ parent: WatcherBoltMagmawing categories: [ HideSpawnMenu ] components: + - type: Reflective + reflective: + - Energy - type: Projectile # soundHit: Waiting on serv3 impactEffect: BulletImpactEffectOrangeDisabler From 2a5a72d5bd556c3edfb76c6b49e24e20009e5ff6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 15:11:27 +0000 Subject: [PATCH 090/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2343c65dfd..f9527fc182 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: AsnDen - changes: - - message: Cyborgs now can scream. 9 new screaming sound were added. - type: Tweak - id: 8551 - time: '2025-05-21T19:49:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32329 - author: ScarKy0 changes: - message: The "Help another traitor" objective now requires you help them complete @@ -3959,3 +3952,15 @@ id: 9053 time: '2025-10-08T14:11:01.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37445 +- author: YoungThugSS14 + changes: + - message: The temperature gun bolts now count as energy projectiles for the sake + of reflection. + type: Tweak + - message: The temperature gun's cold projectile can no longer pass through windows. + type: Fix + - message: The temperature gun now has color-appropriate muzzle flashes. + type: Fix + id: 9054 + time: '2025-10-08T15:10:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37581 From 1b62863e52f129dcc88386b508afbb41c741966b Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Thu, 9 Oct 2025 04:03:12 +1300 Subject: [PATCH 091/216] Fix: Allow energy shotgun lethal projectiles to hit holos (#37920) BulletLaser opaque mask --- .../Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index a853282d0b..49b9989730 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -1292,6 +1292,7 @@ bounds: "-0.15,-0.3,0.15,0.3" hard: false mask: + - Opaque - Impassable - BulletImpassable fly-by: *flybyfixture From e7f1d67df0f1e463e60dbe5b76f428a44ae0cb2b Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 15:24:10 +0000 Subject: [PATCH 092/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f9527fc182..f4e96d076d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: ScarKy0 - changes: - - message: The "Help another traitor" objective now requires you help them complete - all of their objectives. - type: Tweak - - message: The "Help another traitor" objective now updates it's progress according - to the progress of who you're supposed to help, allowing for partial completion. - type: Tweak - id: 8552 - time: '2025-05-21T20:45:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37679 - author: PJB3005 changes: - message: Significantly reduced video memory usage of the parallax system. @@ -3964,3 +3953,10 @@ id: 9054 time: '2025-10-08T15:10:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37581 +- author: K-Dynamic + changes: + - message: Energy shotgun lethal projectiles can now hit holo mobs. + type: Fix + id: 9055 + time: '2025-10-08T15:23:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37920 From f80f3223571bfd6cacbb2b22b63902508c4184cb Mon Sep 17 00:00:00 2001 From: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com> Date: Wed, 8 Oct 2025 11:37:34 -0400 Subject: [PATCH 093/216] Added folders and clipboards to trinkets tab (#39920) * Added folders to trinkets tab * Fixed loadout grouping * Added plastic clipboards to trinkets * Whoops, forgot to create BoxFolderPlasticClipboardThreePapers prototype * Added regular clipboards as trinkets (1 hour of command required) * Reduced folder bloat --- .../Entities/Objects/Misc/folders.yml | 52 ++++++++++++++++++- .../Loadouts/Miscellaneous/trinkets.yml | 25 +++++++++ .../Prototypes/Loadouts/loadout_groups.yml | 3 ++ 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Misc/folders.yml b/Resources/Prototypes/Entities/Objects/Misc/folders.yml index 632a27324a..9991709bcf 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/folders.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/folders.yml @@ -83,7 +83,7 @@ - type: entity abstract: true - id: BoxFolderFillThreePapers # Like BoxFolderFill, but always has exactly three sheets of standard paper; use for roles' startingGear + id: BoxFolderFillThreePapers # Like BoxFolderFill, but always has exactly three sheets of standard paper; use for things that should always be consistent, e.g roundstart items suffix: 3 papers components: - type: StorageFill @@ -95,6 +95,10 @@ parent: [BoxFolderBaseEmpty, BoxFolderFill] id: BoxFolderBase +- type: entity + parent: [BoxFolderBaseEmpty, BoxFolderFillThreePapers] + id: BoxFolderBaseThreePapers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderRedEmpty @@ -111,6 +115,11 @@ id: BoxFolderRed suffix: Red, Filled +- type: entity + parent: [BoxFolderRedEmpty, BoxFolderFillThreePapers] + id: BoxFolderRedThreePapers + suffix: Red, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderBlueEmpty @@ -127,6 +136,11 @@ id: BoxFolderBlue suffix: Blue, Filled +- type: entity + parent: [BoxFolderBlueEmpty, BoxFolderFillThreePapers] + id: BoxFolderBlueThreePapers + suffix: Blue, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderYellowEmpty @@ -143,6 +157,11 @@ id: BoxFolderYellow suffix: Yellow, Filled +- type: entity + parent: [BoxFolderYellowEmpty, BoxFolderFillThreePapers] + id: BoxFolderYellowThreePapers + suffix: Yellow, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderGreyEmpty @@ -159,6 +178,11 @@ id: BoxFolderGrey suffix: Grey, Filled +- type: entity + parent: [BoxFolderGreyEmpty, BoxFolderFillThreePapers] + id: BoxFolderGreyThreePapers + suffix: Grey, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderBlackEmpty @@ -175,6 +199,11 @@ id: BoxFolderBlack suffix: Black, Filled +- type: entity + parent: [BoxFolderBlackEmpty, BoxFolderFillThreePapers] + id: BoxFolderBlackThreePapers + suffix: Black, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderGreenEmpty @@ -191,6 +220,11 @@ id: BoxFolderGreen suffix: Green, Filled +- type: entity + parent: [BoxFolderGreenEmpty, BoxFolderFillThreePapers] + id: BoxFolderGreenThreePapers + suffix: Green, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderWhiteEmpty @@ -206,6 +240,11 @@ id: BoxFolderWhite suffix: White, Filled +- type: entity + parent: [BoxFolderWhiteEmpty, BoxFolderFillThreePapers] + id: BoxFolderWhiteThreePapers + suffix: White, 3 papers + - type: entity parent: BoxFolderBaseEmpty id: BoxFolderCentComEmpty @@ -221,7 +260,12 @@ - type: entity parent: [BoxFolderCentComEmpty, BoxFolderFill] id: BoxFolderCentCom - suffix: DO NOT MAP, Filled + suffix: DO NOT MAP; Filled + +- type: entity + parent: [BoxFolderCentComEmpty, BoxFolderFillThreePapers] + id: BoxFolderCentComThreePapers + suffix: DO NOT MAP; 3 papers - type: entity parent: BoxFolderBaseEmpty @@ -316,6 +360,10 @@ parent: [BoxFolderPlasticClipboardEmpty, BoxFolderFill] id: BoxFolderPlasticClipboard +- type: entity + parent: [BoxFolderPlasticClipboardEmpty, BoxFolderFillThreePapers] + id: BoxFolderPlasticClipboardThreePapers + - type: entity parent: BoxFolderClipboardEmpty id: BoxFolderCentComClipboardEmpty diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index ad58f9c58d..9b502bd7d1 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -106,6 +106,31 @@ - CigarGold groupBy: "smokeables" +# Folders +- type: loadout + id: BoxFolderBaseThreePapers + storage: + back: + - BoxFolderBaseThreePapers + groupBy: "folders" + +- type: loadout + id: BoxFolderPlasticClipboardThreePapers + storage: + back: + - BoxFolderPlasticClipboardThreePapers + groupBy: "folders" + +- type: loadout + id: BoxFolderClipboardThreePapers + effects: + - !type:GroupLoadoutEffect + proto: Command + storage: + back: + - BoxFolderClipboardThreePapers + groupBy: "folders" + # Pins - type: loadout id: ClothingNeckLGBTPin diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index 59e57739ce..6cd5b60fba 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -18,6 +18,9 @@ - CigPackBlack - CigarCase - CigarGold + - BoxFolderBaseThreePapers + - BoxFolderPlasticClipboardThreePapers + - BoxFolderClipboardThreePapers - ClothingNeckLGBTPin - ClothingNeckAllyPin - ClothingNeckAromanticPin From c566b17da77d5cffd7b69cd28827d8ca2fa0e280 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 15:50:29 +0000 Subject: [PATCH 094/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f4e96d076d..93f0799741 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: PJB3005 - changes: - - message: Significantly reduced video memory usage of the parallax system. - type: Tweak - id: 8553 - time: '2025-05-22T01:22:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37180 - author: ArtisticRoomba changes: - message: Tesla coils can now hold a max capacity of 5 MJ, and receive 5 MJ of @@ -3960,3 +3953,10 @@ id: 9055 time: '2025-10-08T15:23:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37920 +- author: Hitlinemoss + changes: + - message: Folders and clipboards are now available in the Trinkets loadout tab. + type: Add + id: 9056 + time: '2025-10-08T15:49:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39920 From 0805943c9879352aced2b73e2414a4b0ec8ee06f Mon Sep 17 00:00:00 2001 From: opl- Date: Wed, 8 Oct 2025 18:45:28 +0200 Subject: [PATCH 095/216] Fix wizard can teleport into the ATS wall (#40755) Co-authored-by: opl <4833621+opl@users.noreply.github.com> --- Resources/Maps/Shuttles/trading_outpost.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Maps/Shuttles/trading_outpost.yml b/Resources/Maps/Shuttles/trading_outpost.yml index 37a01b7c42..42b906eaa1 100644 --- a/Resources/Maps/Shuttles/trading_outpost.yml +++ b/Resources/Maps/Shuttles/trading_outpost.yml @@ -7011,7 +7011,7 @@ entities: - uid: 955 components: - type: Transform - pos: 5.5,-4.5 + pos: 7.5,-4.5 parent: 2 - type: WarpPoint location: Automated Trade Station From 3f2a58a1575c14969aac17fdd6d2edaec2363336 Mon Sep 17 00:00:00 2001 From: Vortebo <64214314+Vortebo@users.noreply.github.com> Date: Wed, 8 Oct 2025 09:48:07 -0700 Subject: [PATCH 096/216] Relic fixes and tweaks (#40537) * Various adjustments * More accurate floors * Changes * This should be good * Logic --- Resources/Maps/Shuttles/arrivals_relic.yml | 5 +- Resources/Maps/Shuttles/cargo_relic.yml | 139 +- Resources/Maps/Shuttles/emergency_relic.yml | 164 +- Resources/Maps/relic.yml | 4215 ++++++++++++------- Resources/Prototypes/Maps/relic.yml | 2 +- Resources/Prototypes/Parallaxes/relic.yml | 2 +- Resources/Textures/Parallaxes/oldspace.png | Bin 790 -> 927 bytes 7 files changed, 2983 insertions(+), 1544 deletions(-) diff --git a/Resources/Maps/Shuttles/arrivals_relic.yml b/Resources/Maps/Shuttles/arrivals_relic.yml index 4d586843fe..e169432419 100644 --- a/Resources/Maps/Shuttles/arrivals_relic.yml +++ b/Resources/Maps/Shuttles/arrivals_relic.yml @@ -66,7 +66,10 @@ entities: - type: OccluderTree - type: SpreaderGrid - type: Shuttle - dampingModifier: 0.25 + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ArrivalsShuttleTimer - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier diff --git a/Resources/Maps/Shuttles/cargo_relic.yml b/Resources/Maps/Shuttles/cargo_relic.yml index 7b3e935ea0..b85f71b0c5 100644 --- a/Resources/Maps/Shuttles/cargo_relic.yml +++ b/Resources/Maps/Shuttles/cargo_relic.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Grid - engineVersion: 264.0.0 + engineVersion: 267.1.0 forkId: "" forkVersion: "" - time: 08/06/2025 14:30:26 - entityCount: 176 + time: 09/27/2025 19:19:05 + entityCount: 180 maps: [] grids: - 1 @@ -93,34 +93,12 @@ entities: uniqueMixes: - volume: 2500 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 21.824879 + Nitrogen: 82.10312 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -155,6 +133,21 @@ entities: - type: Transform pos: 6.5,1.5 parent: 1 + - type: Fixtures + fixtures: {} +- proto: AtmosDeviceFanDirectional + entities: + - uid: 177 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 1 + - uid: 178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,1.5 + parent: 1 - proto: CableApcExtension entities: - uid: 111 @@ -464,6 +457,9 @@ entities: entities: - uid: 9 components: + - type: MetaData + desc: Used to pilot the prison shuttle. + name: prison shuttle console - type: Transform rot: -1.5707963267948966 rad pos: 13.5,-1.5 @@ -726,13 +722,6 @@ entities: rot: -1.5707963267948966 rad pos: 12.5,0.5 parent: 1 -- proto: PrefilledSyringe - entities: - - uid: 6 - components: - - type: Transform - pos: 13.5,-0.5 - parent: 1 - proto: RadioHandheld entities: - uid: 94 @@ -747,41 +736,57 @@ entities: - type: Transform pos: 5.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 53 components: - type: Transform pos: 9.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 54 components: - type: Transform pos: 12.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 55 components: - type: Transform pos: 12.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 56 components: - type: Transform pos: 14.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 57 components: - type: Transform pos: 14.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 58 components: - type: Transform pos: 14.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 89 components: - type: Transform pos: 5.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: SMESBasic entities: - uid: 100 @@ -806,6 +811,13 @@ entities: - type: Transform pos: 3.5,0.5 parent: 1 +- proto: Syringe + entities: + - uid: 6 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 1 - proto: Table entities: - uid: 76 @@ -1027,12 +1039,16 @@ entities: rot: 1.5707963267948966 rad pos: 9.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 74 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: WindoorSecureSecurityLocked entities: - uid: 11 @@ -1040,16 +1056,37 @@ entities: - type: Transform pos: 1.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 75 components: - type: Transform pos: 1.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 90 components: - type: Transform pos: 1.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 179 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-4.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: WindowDirectional entities: - uid: 36 @@ -1057,89 +1094,121 @@ entities: - type: Transform pos: 5.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 50 components: - type: Transform pos: 3.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 61 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 62 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 63 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 64 components: - type: Transform pos: 12.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 65 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 66 components: - type: Transform pos: 9.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 67 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 68 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 69 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 70 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 71 components: - type: Transform pos: 2.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 87 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 170 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 171 components: - type: Transform pos: 4.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 ... diff --git a/Resources/Maps/Shuttles/emergency_relic.yml b/Resources/Maps/Shuttles/emergency_relic.yml index b5c48b5786..6329599cbb 100644 --- a/Resources/Maps/Shuttles/emergency_relic.yml +++ b/Resources/Maps/Shuttles/emergency_relic.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Grid - engineVersion: 264.0.0 + engineVersion: 267.1.0 forkId: "" forkVersion: "" - time: 07/25/2025 18:00:45 - entityCount: 176 + time: 09/27/2025 19:18:41 + entityCount: 180 maps: [] grids: - 1 @@ -66,7 +66,7 @@ entities: 0,-1: 0: 61166 1,-1: - 0: 65262 + 0: 65278 1,0: 0: 14 2,0: @@ -83,18 +83,8 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 21.824879 + Nitrogen: 82.10312 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -114,31 +104,20 @@ entities: parent: 1 - type: Physics bodyType: Static -- proto: AirlockFreezerLocked +- proto: AirlockEngineeringLocked entities: - uid: 10 components: - type: Transform pos: 4.5,-0.5 parent: 1 - - type: AccessReader - access: - - - Atmospherics - - - Captain - - - CentralCommand - - - Chemistry - - - ChiefEngineer - - - ChiefMedicalOfficer - - - Command - - - Cryogenics - - - Engineering - - - Medical - - type: Door - secondsUntilStateChange: -613.913 - state: Opening - - type: DeviceLinkSource - lastSignals: - DoorStatus: True +- proto: AirlockMedicalLocked + entities: + - uid: 85 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 - proto: AirlockShuttle entities: - uid: 59 @@ -160,6 +139,21 @@ entities: rot: 1.5707963267948966 rad pos: 4.5,0.5 parent: 1 + - type: Fixtures + fixtures: {} +- proto: AtmosDeviceFanDirectional + entities: + - uid: 91 + components: + - type: Transform + pos: 8.5,-4.5 + parent: 1 + - uid: 177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,1.5 + parent: 1 - proto: CableApcExtension entities: - uid: 110 @@ -325,7 +319,7 @@ entities: components: - type: Transform rot: 1.5707963267948966 rad - pos: 5.5,-2.5 + pos: 5.5,-3.5 parent: 1 - uid: 52 components: @@ -630,11 +624,6 @@ entities: - type: Transform pos: 4.5,-3.5 parent: 1 - - uid: 85 - components: - - type: Transform - pos: 4.5,-2.5 - parent: 1 - proto: LockerWallMedicalFilled entities: - uid: 8 @@ -643,6 +632,8 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-4.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: MedkitBruteFilled entities: - uid: 6 @@ -753,13 +744,6 @@ entities: rot: -1.5707963267948966 rad pos: 12.5,0.5 parent: 1 -- proto: PrefilledSyringe - entities: - - uid: 175 - components: - - type: Transform - pos: 13.5,-0.5 - parent: 1 - proto: Rack entities: - uid: 88 @@ -788,16 +772,15 @@ entities: - type: Transform pos: 4.5,-1.5 parent: 1 - - uid: 91 - components: - - type: Transform - pos: 4.5,-2.5 - parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 92 components: - type: Transform pos: 4.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: ShuttleWindow entities: - uid: 32 @@ -805,41 +788,57 @@ entities: - type: Transform pos: 5.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 53 components: - type: Transform pos: 9.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 54 components: - type: Transform pos: 12.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 55 components: - type: Transform pos: 12.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 56 components: - type: Transform pos: 14.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 57 components: - type: Transform pos: 14.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 58 components: - type: Transform pos: 14.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 89 components: - type: Transform pos: 5.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: SMESBasic entities: - uid: 100 @@ -876,6 +875,13 @@ entities: - type: Transform pos: 3.5,0.5 parent: 1 +- proto: Syringe + entities: + - uid: 175 + components: + - type: Transform + pos: 13.5,-0.5 + parent: 1 - proto: Table entities: - uid: 76 @@ -1079,12 +1085,16 @@ entities: rot: 1.5707963267948966 rad pos: 9.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 74 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: WindowDirectional entities: - uid: 36 @@ -1092,68 +1102,116 @@ entities: - type: Transform pos: 5.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 61 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 62 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 63 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 64 components: - type: Transform pos: 12.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 65 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 66 components: - type: Transform pos: 9.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 67 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 68 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 69 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 70 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 87 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,0.5 parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-1.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 179 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-1.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 ... diff --git a/Resources/Maps/relic.yml b/Resources/Maps/relic.yml index 250c80a59a..d35ce8904a 100644 --- a/Resources/Maps/relic.yml +++ b/Resources/Maps/relic.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 264.0.0 + engineVersion: 267.1.0 forkId: "" forkVersion: "" - time: 08/24/2025 21:13:10 - entityCount: 11566 + time: 09/27/2025 20:04:57 + entityCount: 11501 maps: - 1 grids: @@ -27,6 +27,8 @@ tilemap: 18: FloorHullReinforced 1: FloorHydro 64: FloorKitchen + 21: FloorShowroom + 22: FloorShuttleBlue 98: FloorSteel 13: FloorSteelCheckerDark 12: FloorSteelCheckerLight @@ -60,93 +62,93 @@ entities: - type: MetaData name: oldstation - type: Transform - pos: -2.6405587,0.6332514 + pos: -3,0 parent: 1 - type: MapGrid chunks: 0,0: ind: 0,0 - tiles: YgAAAAADAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAQAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAMAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgAHAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAwAKAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAgAHAAAAAAAAYgAAAAACAGIAAAAAAwAKAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAgAAAAABAAIAAAAAAgACAAAAAAEAAgAAAAADAAIAAAAAAwACAAAAAAIABwAAAAAAAAMAAAAAAwADAAAAAAAAAwAAAAABAAMAAAAAAwADAAAAAAAAAwAAAAADAAMAAAAAAAADAAAAAAMAAwAAAAAAAAIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAADAAAAAAMAAwAAAAAAAAMAAAAAAQADAAAAAAMAAwAAAAADAAMAAAAAAQADAAAAAAAAAwAAAAABAAMAAAAAAAACAAAAAAEABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAAAHAAAAAAAAAwAAAAAAAAMAAAAAAQADAAAAAAMAAwAAAAACAAMAAAAAAQADAAAAAAIAAwAAAAACAAMAAAAAAAADAAAAAAAAAgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAAwAAAAAAAAMAAAAAAAADAAAAAAMAAwAAAAABAAMAAAAAAAADAAAAAAEAAwAAAAABAAMAAAAAAwADAAAAAAAAAwAAAAADAAIAAAAAAwAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAACAAcAAAAAAAADAAAAAAIAAwAAAAADAAMAAAAAAQADAAAAAAIAAwAAAAACAAMAAAAAAQADAAAAAAEAAwAAAAABAAMAAAAAAQACAAAAAAIABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAgADAAAAAAAAAwAAAAADAAMAAAAAAAADAAAAAAMAAwAAAAAAAAMAAAAAAwADAAAAAAIAAwAAAAABAAMAAAAAAwADAAAAAAAAAgAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMABwAAAAAAAAMAAAAAAAADAAAAAAMAAwAAAAACAAMAAAAAAAADAAAAAAEAAwAAAAAAAAMAAAAAAQADAAAAAAEAAwAAAAAAAA== + tiles: YgAAAAAAAGIAAAAAAQBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAwAKAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQAKAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAFQAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEABwAAAAAAAAMAAAAAAAADAAAAAAIAAwAAAAAAAAMAAAAAAwADAAAAAAEAAwAAAAACAAMAAAAAAwADAAAAAAIAAwAAAAABABUAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAADAAAAAAIAAwAAAAADAAMAAAAAAwADAAAAAAMAAwAAAAADAAMAAAAAAQADAAAAAAAAAwAAAAABAAMAAAAAAQAVAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAAAwAAAAACAAMAAAAAAAADAAAAAAIAAwAAAAACAAMAAAAAAgADAAAAAAEAAwAAAAAAAAMAAAAAAgADAAAAAAAAFQAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIAAwAAAAACAAMAAAAAAAADAAAAAAAAAwAAAAADAAMAAAAAAAADAAAAAAEAAwAAAAAAAAMAAAAAAQADAAAAAAIAAwAAAAAAABUAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAAADAAAAAAEAAwAAAAADAAMAAAAAAAADAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAAAAwAAAAABAAMAAAAAAwAVAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAgADAAAAAAAAAwAAAAACAAMAAAAAAgADAAAAAAMAAwAAAAAAAAMAAAAAAAADAAAAAAIAAwAAAAACAAMAAAAAAgADAAAAAAIAFQAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAEABwAAAAAAAAMAAAAAAgADAAAAAAEAAwAAAAADAAMAAAAAAgADAAAAAAAAAwAAAAACAAMAAAAAAAADAAAAAAMAAwAAAAAAAA== version: 7 0,-1: ind: 0,-1 - tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAEABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAgAHAAAAAAAAYgAAAAADAA== + tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAwAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAEABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAADAA== version: 7 -1,0: ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwAKAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAABiAAAAAAIACgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAMAAgAAAAAAAAIAAAAAAgACAAAAAAEAAgAAAAACAAIAAAAAAAACAAAAAAMAAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAAIAAAAAAgACAAAAAAIAAgAAAAADAAIAAAAAAwACAAAAAAEAAgAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAwACAAAAAAIAAgAAAAADAAIAAAAAAAACAAAAAAIAAgAAAAACAAIAAAAAAAACAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAgACAAAAAAEAAgAAAAAAAAIAAAAAAQACAAAAAAEAAgAAAAABAAIAAAAAAgACAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAAAAAIAAAAAAwACAAAAAAEAAgAAAAAAAAIAAAAAAwACAAAAAAIAAgAAAAACAAIAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAACAAAAAAEAAgAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAABAAIAAAAAAQACAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAAgAAAAADAAIAAAAAAwACAAAAAAIAAgAAAAACAAIAAAAAAwACAAAAAAAAAgAAAAABAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgAKAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAUAAAAAAAAFAAAAAAAABQAAAAAAABiAAAAAAIACgAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAQAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAADABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAA== version: 7 -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACAA== version: 7 1,-1: ind: 1,-1 - tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAAABAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAA== + tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAAABAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAA== version: 7 1,0: ind: 1,0 - tiles: YgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAgALAAAAAAAACwAAAAABAAsAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAAAwAAAAABAAMAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIABwAAAAAAAAMAAAAAAQADAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAABAAMAAAAAAwADAAAAAAEAAwAAAAACAAMAAAAAAAADAAAAAAIABwAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAwADAAAAAAEAAwAAAAABAAMAAAAAAQADAAAAAAAAAwAAAAAAAAMAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAAAAwAAAAADAAMAAAAAAQADAAAAAAEAAwAAAAAAAAMAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAAAAAMAAAAAAgADAAAAAAAAAwAAAAACAAMAAAAAAAADAAAAAAIAAwAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAgADAAAAAAIAAwAAAAAAAAMAAAAAAwADAAAAAAIAAwAAAAABAAMAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAAAAwAAAAACAAMAAAAAAAADAAAAAAAAAwAAAAACAAMAAAAAAAADAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAADAA== + tiles: YgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAgAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgALAAAAAAAACwAAAAACAAsAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAACAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAAAwAAAAADAAMAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAABwAAAAAAAAMAAAAAAAADAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAABAAMAAAAAAgADAAAAAAAAAwAAAAACAAMAAAAAAwADAAAAAAMABwAAAAAAAGIAAAAAAQAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAgADAAAAAAIAAwAAAAAAAAMAAAAAAgADAAAAAAEAAwAAAAADAAMAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAAwAAAAAAAAMAAAAAAgADAAAAAAIAAwAAAAADAAMAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAAMAAAAAAwADAAAAAAAAAwAAAAADAAMAAAAAAwADAAAAAAIAAwAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAQADAAAAAAMAAwAAAAADAAMAAAAAAgADAAAAAAAAAwAAAAADAAMAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAIAAwAAAAACAAMAAAAAAwADAAAAAAMAAwAAAAABAAMAAAAAAQADAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAA== version: 7 -1,1: ind: -1,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAACAAAAAAMAAgAAAAACAAIAAAAAAwACAAAAAAMAAgAAAAADAAIAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAgAAAAABAAIAAAAAAwACAAAAAAEAAgAAAAAAAAIAAAAAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 0,1: ind: 0,1 - tiles: AgAAAAABAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAMABwAAAAAAAAMAAAAAAwADAAAAAAEAAwAAAAABAAMAAAAAAgADAAAAAAAAAwAAAAAAAAMAAAAAAgADAAAAAAEAAwAAAAACAAIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAACAAAAAAMAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAABlAAAAAAIAYgAAAAADAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAGIAAAAAAwBlAAAAAAEAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAZQAAAAACAGUAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGUAAAAAAwBiAAAAAAAAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAAYgAAAAAAAGUAAAAAAwBiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUAAAAABABiAAAAAAMAZQAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGUAAAAAAQBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGUAAAAAAABiAAAAAAAAYgAAAAAAAGUAAAAAAABlAAAAAAAAYgAAAAABAA== + tiles: YgAAAAACAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAAABwAAAAAAAAMAAAAAAwADAAAAAAAAAwAAAAAAAAMAAAAAAQADAAAAAAEAAwAAAAADAAMAAAAAAgADAAAAAAAAAwAAAAADAGIAAAAAAgAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAABlAAAAAAIAYgAAAAAAAGIAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAGIAAAAAAgBlAAAAAAIAYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAZQAAAAACAGUAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAYgAAAAADAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGUAAAAAAQBiAAAAAAIAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAAYgAAAAADAGUAAAAAAABiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUAAAAAAgBiAAAAAAMAZQAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAABAAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAABAAcAAAAAAAAHAAAAAAAAEAAAAAABAGUAAAAAAQBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGUAAAAABABiAAAAAAAAYgAAAAABAGUAAAAAAgBlAAAAAAIAYgAAAAACAA== version: 7 1,1: ind: 1,1 - tiles: AwAAAAAAAAMAAAAAAgADAAAAAAEAAwAAAAAAAAMAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAADAAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAEgAAAAAAABIAAAAAAAAHAAAAAAAABwAAAAAAABIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAAAZQAAAAACAA== + tiles: AwAAAAADAAMAAAAAAAADAAAAAAMAAwAAAAABAAMAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAACAAcAAAAAAABiAAAAAAEADAAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAwAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAABAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAEgAAAAAAABIAAAAAAAAHAAAAAAAABwAAAAAAABIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAZQAAAAAAAA== version: 7 2,0: ind: 2,0 - tiles: BwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgAHAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAwAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAwAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQALAAAAAAEABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgAHAAAAAAAACwAAAAACAGIAAAAAAQBiAAAAAAAACwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAQAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQAHAAAAAAAACwAAAAACAAsAAAAAAgALAAAAAAIACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAA== + tiles: BwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgAHAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAIAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAABAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwALAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgAHAAAAAAAACwAAAAAAAGIAAAAAAgBiAAAAAAEACwAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwAHAAAAAAAACwAAAAADAAsAAAAAAgALAAAAAAMACwAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAA== version: 7 2,1: ind: 2,1 - tiles: YgAAAAACAGIAAAAAAwBiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgALAAAAAAMACwAAAAABAAsAAAAAAwALAAAAAAAACwAAAAAAAAsAAAAAAQALAAAAAAEACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAAsAAAAAAgALAAAAAAIACwAAAAACAAsAAAAAAQAHAAAAAAAACwAAAAACAAsAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAQAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAAcAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAAAAA== + tiles: YgAAAAACAGIAAAAAAgBiAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAAALAAAAAAMACwAAAAABAAsAAAAAAgALAAAAAAEACwAAAAADAAsAAAAAAQALAAAAAAMACwAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEABwAAAAAAAAsAAAAAAQALAAAAAAEACwAAAAACAAsAAAAAAwAHAAAAAAAACwAAAAAAAAsAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAwAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAAcAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAA== version: 7 0,2: ind: 0,2 - tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAA== + tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAA== version: 7 1,2: ind: 1,2 - tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAABAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAIABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAQAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAA== + tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAEABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAACAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAABAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAwAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAA== version: 7 2,2: ind: 2,2 - tiles: YgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQAKAAAAAAAAYgAAAAADAAoAAAAAAABiAAAAAAEACgAAAAAAAA== + tiles: YgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAKAAAAAAAAYgAAAAAAAAoAAAAAAABiAAAAAAEACgAAAAAAAA== version: 7 3,1: ind: 3,1 - tiles: CwAAAAABAAsAAAAAAwALAAAAAAMACwAAAAACAAsAAAAAAgALAAAAAAEACwAAAAAAAAsAAAAAAQAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAABwAAAAAAAAsAAAAAAQALAAAAAAMACwAAAAADAAsAAAAAAAALAAAAAAEACwAAAAACAAsAAAAAAAAHAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAAAgAAAAACAAIAAAAAAgACAAAAAAAAAgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAIAAAAAAwACAAAAAAMAAgAAAAACAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAACAAAAAAMAAgAAAAAAAAIAAAAAAwACAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAAsAAAAAAwALAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAAAgAAAAAAAAIAAAAAAwACAAAAAAAAAgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAQALAAAAAAMACwAAAAADAAsAAAAAAgAHAAAAAAAABwAAAAAAAAIAAAAAAQACAAAAAAMAAgAAAAAAAAIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAABAAsAAAAAAAALAAAAAAEABwAAAAAAAAcAAAAAAAACAAAAAAIAAgAAAAADAAIAAAAAAQACAAAAAAEAAgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgALAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAIAAAAAAwAHAAAAAAAAAgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAACAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAMAYgAAAAAAAAIAAAAAAAACAAAAAAEAAgAAAAADAAIAAAAAAQACAAAAAAMAAgAAAAADAAIAAAAAAgACAAAAAAMAAgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAgACAAAAAAIAAgAAAAADAAIAAAAAAwACAAAAAAAAAgAAAAAAAAIAAAAAAgACAAAAAAAAAgAAAAACAAIAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAEAAgAAAAADAAIAAAAAAQACAAAAAAMAAgAAAAABAAIAAAAAAgACAAAAAAAAAgAAAAADAAIAAAAAAgACAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAAAAAIAAAAAAQACAAAAAAIAAgAAAAACAAIAAAAAAgACAAAAAAEAAgAAAAAAAAIAAAAAAwACAAAAAAAAAgAAAAADAA== + tiles: CwAAAAABAAsAAAAAAQALAAAAAAIACwAAAAADAAsAAAAAAQALAAAAAAIACwAAAAACAAsAAAAAAgALAAAAAAIACwAAAAABAAsAAAAAAQALAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAIABwAAAAAAAAsAAAAAAgALAAAAAAEACwAAAAABAAsAAAAAAAALAAAAAAEACwAAAAABAAsAAAAAAgAHAAAAAAAAYgAAAAABAGIAAAAAAQALAAAAAAIACwAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAEACwAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAAYgAAAAABAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAAsAAAAAAQALAAAAAAEACwAAAAACAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwALAAAAAAEACwAAAAADAAsAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAAsAAAAAAgALAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAAALAAAAAAEACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAA== version: 7 3,2: ind: 3,2 - tiles: BwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAAIAAAAAAQACAAAAAAAAAgAAAAACAAIAAAAAAAACAAAAAAIAAgAAAAABAAIAAAAAAgACAAAAAAMAAgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAwACAAAAAAIAAgAAAAADAAIAAAAAAQACAAAAAAEAAgAAAAAAAAIAAAAAAgACAAAAAAEAAgAAAAADAAIAAAAAAwAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAEAAgAAAAACAAIAAAAAAQACAAAAAAMAAgAAAAAAAAIAAAAAAQACAAAAAAEAAgAAAAABAAIAAAAAAwACAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAMACwAAAAAAAGIAAAAAAABiAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAEACwAAAAAAAAsAAAAAAgALAAAAAAEACwAAAAACAAsAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAAACwAAAAABAAsAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQAHAAAAAAAACwAAAAACAAsAAAAAAQALAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAAABwAAAAAAAAsAAAAAAAALAAAAAAAACwAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAIABwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAAAAAcAAAAAAAAIAAAAAAAAYgAAAAACAAoAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAwAHAAAAAAAABwAAAAAAAA== + tiles: BwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAMACwAAAAABAGIAAAAAAwBiAAAAAAIABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAAACwAAAAADAAsAAAAAAwALAAAAAAMACwAAAAABAAsAAAAAAwBiAAAAAAEAYgAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAALAAAAAAAACwAAAAABAAsAAAAAAgAHAAAAAAAAYgAAAAACAGIAAAAAAwAHAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAwAHAAAAAAAACwAAAAAAAAsAAAAAAAALAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEABwAAAAAAAAsAAAAAAQALAAAAAAAACwAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAwAHAAAAAAAACAAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAAAAAcAAAAAAAAIAAAAAAAAYgAAAAACAAoAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAAAHAAAAAAAABwAAAAAAAA== version: 7 2,-1: ind: 2,-1 - tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAAAHAAAAAAAABAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAACAAcAAAAAAABiAAAAAAEAYgAAAAAAAAcAAAAAAAAEAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAQAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAIABwAAAAAAAAsAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAABAAcAAAAAAAALAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAEABwAAAAAAAAsAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAADAAcAAAAAAAALAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIABwAAAAAAAAsAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAABAAcAAAAAAABiAAAAAAEABwAAAAAAAA== + tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAQAHAAAAAAAABAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAABAAcAAAAAAAAEAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAgAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAEABwAAAAAAAAsAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAACAAcAAAAAAAALAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAMABwAAAAAAAAsAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAABAAcAAAAAAAALAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgAHAAAAAAAACwAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEABwAAAAAAAAsAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAIABwAAAAAAAA== version: 7 2,-2: ind: 2,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAEACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgALAAAAAAEAYgAAAAABAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAMACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAAALAAAAAAMAYgAAAAACAA== version: 7 3,-1: ind: 3,-1 - tiles: YgAAAAAAAAsAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACwAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAwALAAAAAAMABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAMAYgAAAAABAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABiAAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAMAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAAAAA== + tiles: YgAAAAAAAAsAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACwAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgALAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABiAAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAEAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgAVAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAQAHAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAADAA== version: 7 3,-2: ind: 3,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAALAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACwAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAsAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAALAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAgALAAAAAAMACwAAAAADAAsAAAAAAQALAAAAAAIACwAAAAADAAsAAAAAAQALAAAAAAAACwAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAALAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACwAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAsAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAALAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAAALAAAAAAAACwAAAAADAAsAAAAAAQALAAAAAAIACwAAAAADAAsAAAAAAQALAAAAAAEACwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 3,0: ind: 3,0 - tiles: YgAAAAACAGIAAAAAAwBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgALAAAAAAIACwAAAAADAAsAAAAAAgALAAAAAAEACwAAAAACAGIAAAAAAQBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAsAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAACAAsAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAIABwAAAAAAAGIAAAAAAwBiAAAAAAAACwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAAsAAAAAAwALAAAAAAAAYgAAAAADAGIAAAAAAAADAAAAAAAABwAAAAAAAAcAAAAAAAADAAAAAAAAAwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAIABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAwAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAAATAAAAAAAAEwAAAAAAABMAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAAAEwAAAAAAABMAAAAAAAATAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAAAABMAAAAAAAATAAAAAAAAEwAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAAALAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAgAHAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAIABwAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAACQAAAAAAAAkAAAAAAAAJAAAAAAAABwAAAAAAAA== + tiles: YgAAAAAAAGIAAAAAAQBiAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwALAAAAAAIACwAAAAAAAAsAAAAAAAALAAAAAAMACwAAAAABAGIAAAAAAQBiAAAAAAAABwAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAAHAAAAAAAAYgAAAAADAAsAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAAAAAsAAAAAAABiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAEACwAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAAAAAsAAAAAAwALAAAAAAAAYgAAAAACAGIAAAAAAgADAAAAAAIABwAAAAAAAAcAAAAAAAADAAAAAAMAAwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAAwAAAAADAAMAAAAAAgADAAAAAAEAAwAAAAACAAMAAAAAAQBiAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAgAHAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAMABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAgATAAAAAAAAEwAAAAAAABMAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAACAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAIAEwAAAAAAABMAAAAAAAATAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAwAHAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAADABMAAAAAAAATAAAAAAAAEwAAAAAAAGIAAAAAAwAHAAAAAAAAYgAAAAACAGIAAAAAAgALAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAwBiAAAAAAMABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIABwAAAAAAAAcAAAAAAAALAAAAAAEACwAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAADAAcAAAAAAABiAAAAAAMACwAAAAAAAAsAAAAAAwALAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAQAHAAAAAAAAYgAAAAAAAGIAAAAAAgALAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAMABwAAAAAAAGIAAAAAAAALAAAAAAMACwAAAAABAAsAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAACwAAAAABAAsAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAAABwAAAAAAAA== version: 7 -1,-2: ind: -1,-2 @@ -154,27 +156,27 @@ entities: version: 7 0,-2: ind: 0,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAA== version: 7 1,-2: ind: 1,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAA== version: 7 0,3: ind: 0,3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 1,3: ind: 1,3 - tiles: BwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAEABwAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAsAAAAAAgAHAAAAAAAACwAAAAADAAcAAAAAAAAAAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAAsAAAAAAgAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAAsAAAAAAQALAAAAAAEABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAALAAAAAAEABwAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAALAAAAAAIACwAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAACwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAQAHAAAAAAAACwAAAAADAAcAAAAAAAAHAAAAAAAACwAAAAACAAsAAAAAAQAHAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAAABwAAAAAAAAsAAAAAAwAHAAAAAAAABwAAAAAAAAsAAAAAAgALAAAAAAIABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAADAAcAAAAAAAALAAAAAAIABwAAAAAAAGIAAAAAAQAHAAAAAAAAYgAAAAAAAAcAAAAAAAALAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAMACwAAAAADAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAAAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAAALAAAAAAEACwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: BwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAIABwAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAAsAAAAAAQAHAAAAAAAACwAAAAADAAcAAAAAAAAAAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAAsAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAABAAsAAAAAAAALAAAAAAAABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAALAAAAAAEABwAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAAACwAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAACwAAAAACAAcAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAAAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAACwAAAAACAAsAAAAAAgAHAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAsAAAAAAQAHAAAAAAAABwAAAAAAAAsAAAAAAwALAAAAAAMABwAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAALAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAAYgAAAAADAAcAAAAAAAALAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAEACwAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAAYgAAAAABAAcAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAwAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAgALAAAAAAIACwAAAAABAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 4,0: ind: 4,0 - tiles: CwAAAAABAAsAAAAAAQALAAAAAAMABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAACAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: CwAAAAACAAsAAAAAAgALAAAAAAIABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 4,-1: ind: 4,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgAIAAAAAAAAYgAAAAADAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABiAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACwAAAAABAAsAAAAAAQAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwALAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAwAIAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABiAAAAAAIABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAwAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACwAAAAACAAsAAAAAAQAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQALAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 4,1: ind: 4,1 @@ -186,7 +188,7 @@ entities: version: 7 3,3: ind: 3,3 - tiles: YgAAAAABAAoAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAADAAoAAAAAAAAKAAAAAAAACgAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAAoAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAAYgAAAAAAAGIAAAAAAAAKAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAMABwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAABAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAQAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAAALAAAAAAIACwAAAAACAAsAAAAAAAALAAAAAAAACwAAAAABAAsAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAA== + tiles: YgAAAAABAAoAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAAoAAAAAAAAKAAAAAAAACgAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAAoAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAADAAcAAAAAAAAIAAAAAAAAYgAAAAADAGIAAAAAAwAKAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAEABwAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAAALAAAAAAMACwAAAAAAAAsAAAAAAwALAAAAAAEACwAAAAAAAAsAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAMABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAFgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAADAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAgAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAMABwAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAA== version: 7 4,3: ind: 4,3 @@ -202,7 +204,7 @@ entities: version: 7 2,3: ind: 2,3 - tiles: YgAAAAAAAGIAAAAAAwBiAAAAAAMABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAKAAAAAAAAYgAAAAAAAAoAAAAAAABiAAAAAAAACgAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAAAALAAAAAAEACwAAAAAAAAsAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIACgAAAAAAAGIAAAAAAwBiAAAAAAAACwAAAAACAAsAAAAAAQALAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAAoAAAAAAABiAAAAAAIAYgAAAAACAAsAAAAAAwALAAAAAAEACwAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAEACwAAAAADAAsAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACwAAAAADAAsAAAAAAQALAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAIABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAgALAAAAAAIACwAAAAABAAsAAAAAAAALAAAAAAMACwAAAAABAAcAAAAAAAALAAAAAAIACwAAAAADAAsAAAAAAQALAAAAAAEACwAAAAADAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: YgAAAAACAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQAKAAAAAAAAYgAAAAABAAoAAAAAAABiAAAAAAIACgAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAACgAAAAAAAAoAAAAAAAALAAAAAAAACwAAAAAAAAsAAAAAAgAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAEACgAAAAAAAGIAAAAAAABiAAAAAAIACwAAAAADAAsAAAAAAAALAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAAoAAAAAAABiAAAAAAMAYgAAAAAAAAsAAAAAAwALAAAAAAAACwAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAADAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAALAAAAAAAACwAAAAABAAsAAAAAAgAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAACAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACwAAAAAAAAsAAAAAAgALAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAAALAAAAAAMACwAAAAACAAsAAAAAAwALAAAAAAEACwAAAAAAAAcAAAAAAAALAAAAAAMACwAAAAAAAAsAAAAAAwALAAAAAAMACwAAAAABAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 -1,2: ind: -1,2 @@ -210,7 +212,7 @@ entities: version: 7 4,-2: ind: 4,-2 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAYgAAAAADAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAABiAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAGIAAAAAAQAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgAIAAAAAAAAYgAAAAABAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 - type: Broadphase - type: Physics @@ -274,22 +276,7 @@ entities: decals: 331: 62,12 332: 61,12 - 333: 62,13 - 334: 62,14 - 335: 61,13 336: 62,18 - 337: 57,18 - 340: 59,18 - 341: 59,17 - 342: 58,18 - 343: 56,16 - 344: 57,16 - 345: 58,16 - 346: 58,15 - 347: 58,14 - 348: 58,13 - 349: 58,12 - 350: 57,15 - node: color: '#FFFFFFFF' id: WarnCornerSmallNW @@ -409,7 +396,7 @@ entities: 0,-4: 0: 30704 0,-5: - 1: 61440 + 1: 61455 0,-3: 0: 63351 -1,-3: @@ -424,7 +411,7 @@ entities: 1,-2: 0: 12287 1,-5: - 1: 61440 + 1: 61455 2,-4: 0: 61680 2,-3: @@ -432,7 +419,7 @@ entities: 2,-2: 0: 1911 2,-5: - 1: 61440 + 1: 61455 3,-4: 0: 45296 3,-3: @@ -440,7 +427,7 @@ entities: 3,-2: 0: 4095 3,-5: - 1: 61440 + 1: 61455 4,-4: 0: 61680 4,-3: @@ -483,7 +470,7 @@ entities: -1,-5: 1: 48031 4,-5: - 1: 61440 + 1: 61455 5,-4: 0: 55792 5,-3: @@ -495,7 +482,7 @@ entities: 0: 4561 3: 49152 5,-5: - 1: 61440 + 1: 61727 5,0: 0: 52497 3: 12 @@ -510,7 +497,7 @@ entities: 0: 8958 4: 32768 6,-5: - 1: 61440 + 1: 61455 6,0: 0: 65282 4: 8 @@ -525,7 +512,7 @@ entities: 0: 19541 4: 4096 7,-5: - 1: 61440 + 1: 61455 7,0: 4: 1 0: 65356 @@ -904,7 +891,7 @@ entities: 16,9: 1: 1 8,-5: - 1: 61440 + 1: 61455 9,-4: 0: 57584 9,-3: @@ -912,7 +899,7 @@ entities: 9,-2: 0: 61182 9,-5: - 1: 12288 + 1: 13383 10,-4: 0: 61680 10,-3: @@ -963,10 +950,6 @@ entities: 14,-6: 1: 20480 0: 8192 - 15,-8: - 1: 3840 - 16,-8: - 1: 3840 13,1: 0: 65535 13,2: @@ -998,7 +981,7 @@ entities: 0: 760 4,15: 0: 1 - 1: 14 + 1: 3598 4,13: 1: 8738 0: 34952 @@ -1007,26 +990,26 @@ entities: 5,14: 0: 62 5,15: - 1: 15 + 1: 3855 5,13: 0: 43690 6,12: 0: 43904 6,15: - 1: 15 + 1: 3855 6,13: 0: 43690 6,14: 0: 46 1: 32768 7,15: - 1: 15 + 1: 3855 7,13: 0: 36044 8,13: 0: 12151 8,15: - 1: 15 + 1: 3855 16,-1: 0: 26112 1: 4 @@ -1063,19 +1046,19 @@ entities: 1: 15 0: 3840 12,15: - 1: 57359 + 1: 58127 11,15: - 1: 15 + 1: 3855 12,16: 1: 43554 13,13: 1: 65518 13,14: 1: 15 - 0: 1792 + 0: 18176 13,15: - 1: 28679 - 0: 8 + 1: 28675 + 0: 1100 14,13: 1: 12561 0: 2252 @@ -1121,7 +1104,7 @@ entities: 0: 3840 1: 14 9,15: - 1: 15 + 1: 3855 9,13: 0: 546 1: 34956 @@ -1131,99 +1114,33 @@ entities: 1: 15 0: 3328 10,15: - 1: 15 + 1: 3855 -1,10: 1: 34952 16,-6: - 0: 1284 - 1: 12834 - 16,-5: - 1: 1 - 16,-7: - 1: 8738 - 0: 1028 - 17,-8: - 1: 4352 - 17,-7: - 1: 4369 + 0: 17472 17,-6: - 1: 4369 + 1: 4368 uniqueMixes: - volume: 2500 temperature: 293.15 moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 21.824879 + Nitrogen: 82.10312 - volume: 2500 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} + - volume: 2500 + temperature: 293.15 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Nitrogen: 6666.982 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -1234,7 +1151,7 @@ entities: - type: MetaData name: Prison Station - type: Transform - pos: 150.92255,68.575584 + pos: 100,68 parent: 1 - type: MapGrid chunks: @@ -1248,19 +1165,19 @@ entities: version: 7 0,-2: ind: 0,-2 - tiles: CAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAACAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAGIAAAAAAABiAAAAAAEACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABiAAAAAAMAYgAAAAADAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAACAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAYgAAAAAAAGIAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAGIAAAAAAgBiAAAAAAIACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAABiAAAAAAAAYgAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAYgAAAAADAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAGIAAAAAAwBiAAAAAAIACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: CAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAGIAAAAAAwBiAAAAAAIACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABiAAAAAAEAYgAAAAACAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAABAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAYgAAAAACAGIAAAAAAgAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAGIAAAAAAwBiAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAABiAAAAAAIAYgAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAYgAAAAABAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAGIAAAAAAgBiAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 0,-3: ind: 0,-3 - tiles: CAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAABAGIAAAAAAwAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAGIAAAAAAgBiAAAAAAEABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEACAAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAADAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAIACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAACAA== + tiles: CAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQAHAAAAAAAAYgAAAAAAAGIAAAAAAQAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIABwAAAAAAAGIAAAAAAQBiAAAAAAEABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAEACAAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAACAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAgAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAABiAAAAAAAAYgAAAAADAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAA== version: 7 0,-4: ind: 0,-4 - tiles: CAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAwAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAADAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAABAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAA== + tiles: CAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAgAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAIACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAABAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAEACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAA== version: 7 0,-5: ind: 0,-5 - tiles: CAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwAHAAAAAAAABwAAAAAAAA== + tiles: CAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgAIAAAAAAAAAAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAAACAAAAAAAAAAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAAAHAAAAAAAABwAAAAAAAA== version: 7 0,-6: ind: 0,-6 @@ -1268,23 +1185,23 @@ entities: version: 7 1,-3: ind: 1,-3 - tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAABwAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAABAAcAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAADAAcAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAMABwAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwAHAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAMABwAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAACAAcAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAwAHAAAAAAAAYgAAAAACAA== + tiles: BwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAAABwAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAAcAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgAHAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAAABwAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEABwAAAAAAAAAAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAACAAcAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAQBiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQAHAAAAAAAAYgAAAAABAA== version: 7 1,-4: ind: 1,-4 - tiles: YgAAAAACAGIAAAAAAwAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAIABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAQAHAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAEABwAAAAAAAGIAAAAAAwBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAEABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAQAHAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAABwAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAAAAAcAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAEABwAAAAAAAAAAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAADAAcAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAgAHAAAAAAAAAAAAAAAAAA== + tiles: YgAAAAABAGIAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQAHAAAAAAAABwAAAAAAAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgAHAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIABwAAAAAAAGIAAAAAAwBiAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAADAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAABAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAIABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAMABwAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAADAAcAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAMABwAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAAAAAcAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAAAHAAAAAAAAAAAAAAAAAA== version: 7 1,-2: ind: 1,-2 - tiles: YgAAAAADAGIAAAAAAQBiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAMABwAAAAAAAGIAAAAAAgBiAAAAAAMAEQAAAAADABEAAAAAAgARAAAAAAMAEQAAAAABAGIAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgAHAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAABiAAAAAAMAYgAAAAADABEAAAAAAQADAAAAAAEAAwAAAAAAABEAAAAAAgBiAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEABwAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAAAHAAAAAAAAEQAAAAABABEAAAAAAQARAAAAAAMAAwAAAAABAAMAAAAAAQARAAAAAAEAEQAAAAABABEAAAAAAwBiAAAAAAEAYgAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAIABwAAAAAAABEAAAAAAgADAAAAAAEAAwAAAAAAAAMAAAAAAwADAAAAAAIAAwAAAAABAAMAAAAAAwARAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAARAAAAAAMAAwAAAAADAAMAAAAAAAADAAAAAAEAAwAAAAAAAAMAAAAAAQADAAAAAAMAEQAAAAABAGIAAAAAAwBiAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAEQAAAAADABEAAAAAAQARAAAAAAIAAwAAAAAAAAMAAAAAAwARAAAAAAMAEQAAAAAAABEAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAIAEQAAAAABAAMAAAAAAQADAAAAAAMAEQAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAACABEAAAAAAQARAAAAAAAAEQAAAAABABEAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAA== + tiles: YgAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAMAYgAAAAADAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAgBiAAAAAAEAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAIABwAAAAAAAGIAAAAAAQBiAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAABAAcAAAAAAABiAAAAAAMAYgAAAAADABUAAAAAAAADAAAAAAEAAwAAAAADABUAAAAAAABiAAAAAAIAYgAAAAACAGIAAAAAAQBiAAAAAAIABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAAAHAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAAwAAAAACAAMAAAAAAwAVAAAAAAAAFQAAAAAAABUAAAAAAABiAAAAAAAAYgAAAAABAAcAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAMABwAAAAAAABUAAAAAAAADAAAAAAMAAwAAAAAAAAMAAAAAAAADAAAAAAEAAwAAAAADAAMAAAAAAgAVAAAAAAAAYgAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAVAAAAAAAAAwAAAAABAAMAAAAAAAADAAAAAAEAAwAAAAACAAMAAAAAAAADAAAAAAMAFQAAAAAAAGIAAAAAAgBiAAAAAAMABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAAwAAAAAAAAMAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAFQAAAAAAAAMAAAAAAAADAAAAAAIAFQAAAAAAAGIAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAAABwAAAAAAAA== version: 7 2,-3: ind: 2,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 2,-2: ind: 2,-2 - tiles: BwAAAAAAAAcAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAQAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAACAGIAAAAAAgBiAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMAYgAAAAACAGIAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAMAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAMAYgAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: BwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAQAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAMAYgAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAACAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAABAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 1,-1: ind: 1,-1 @@ -1292,15 +1209,15 @@ entities: version: 7 2,-4: ind: 2,-4 - tiles: YgAAAAACAGIAAAAAAQBiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAADAGIAAAAAAgBiAAAAAAAAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAEABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAgBiAAAAAAMAYgAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: YgAAAAACAGIAAAAAAgBiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAABAGIAAAAAAwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAEAYgAAAAADAGIAAAAAAQBiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAEAYgAAAAAAAGIAAAAAAgBiAAAAAAAAYgAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAABAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 1,-5: ind: 1,-5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAEABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgBiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAGIAAAAAAQAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAADAGIAAAAAAgBiAAAAAAIAYgAAAAABAGIAAAAAAABiAAAAAAMAYgAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAABiAAAAAAMABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAAAYgAAAAABAAcAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAADAGIAAAAAAwBiAAAAAAAAYgAAAAAAAGIAAAAAAgBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAIAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAACAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAABiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAACAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAGIAAAAAAwBiAAAAAAAAYgAAAAABAGIAAAAAAQBiAAAAAAMAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAAAAGIAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAABiAAAAAAAAYgAAAAACAGIAAAAAAABiAAAAAAEAYgAAAAACAGIAAAAAAgBiAAAAAAMAYgAAAAADAGIAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAQBiAAAAAAEAYgAAAAABAGIAAAAAAQBiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAEAYgAAAAACAGIAAAAAAwBiAAAAAAEABwAAAAAAAGIAAAAAAgBiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAEAYgAAAAACAGIAAAAAAABiAAAAAAIAYgAAAAADAGIAAAAAAwBiAAAAAAIAYgAAAAADAGIAAAAAAQBiAAAAAAMAYgAAAAADAAcAAAAAAABiAAAAAAMAYgAAAAABAGIAAAAAAwBiAAAAAAEAYgAAAAABAGIAAAAAAgBiAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAMAYgAAAAACAGIAAAAAAwBiAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAYgAAAAABAGIAAAAAAwBiAAAAAAAAYgAAAAADAGIAAAAAAwBiAAAAAAMAYgAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQBiAAAAAAIAYgAAAAADAA== version: 7 2,-5: ind: 2,-5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAABiAAAAAAAAYgAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAADAGIAAAAAAQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAAAAGIAAAAAAQBiAAAAAAIABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAIAYgAAAAACAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAABAGIAAAAAAgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAMABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAgBiAAAAAAMAYgAAAAABAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAAAYgAAAAAAAGIAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAABAGIAAAAAAgBiAAAAAAMABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIAAAAAAQBiAAAAAAAAYgAAAAABAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAAAIAYgAAAAABAGIAAAAAAQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgAAAAADAGIAAAAAAABiAAAAAAEABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 - type: Broadphase - type: Physics @@ -1309,6 +1226,8 @@ entities: bodyType: Dynamic - type: Fixtures fixtures: {} + - type: BecomesStation + id: Relic - type: OccluderTree - type: SpreaderGrid - type: Shuttle @@ -1613,79 +1532,23 @@ entities: uniqueMixes: - volume: 2500 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 21.824879 + Nitrogen: 82.10312 - volume: 2500 temperature: 293.15 moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 6666.982 + - volume: 2500 + temperature: 293.15 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Nitrogen: 6666.982 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -1715,6 +1578,8 @@ entities: - 3322 - 3315 - 3242 + - type: Fixtures + fixtures: {} - uid: 1602 components: - type: Transform @@ -1729,6 +1594,8 @@ entities: - 1752 - 2790 - 2757 + - type: Fixtures + fixtures: {} - uid: 2968 components: - type: Transform @@ -1743,6 +1610,8 @@ entities: - 3980 - 2978 - 2979 + - type: Fixtures + fixtures: {} - uid: 3162 components: - type: Transform @@ -1763,6 +1632,8 @@ entities: - 11451 - 11454 - 11450 + - type: Fixtures + fixtures: {} - uid: 5210 components: - type: Transform @@ -1780,6 +1651,8 @@ entities: - 2828 - 2071 - 8530 + - type: Fixtures + fixtures: {} - uid: 5864 components: - type: Transform @@ -1801,6 +1674,8 @@ entities: - 2936 - 11482 - 11500 + - type: Fixtures + fixtures: {} - uid: 6165 components: - type: Transform @@ -1832,6 +1707,8 @@ entities: - 3433 - 3492 - 3510 + - type: Fixtures + fixtures: {} - uid: 6523 components: - type: Transform @@ -1843,6 +1720,8 @@ entities: - 8244 - 4181 - 2464 + - type: Fixtures + fixtures: {} - uid: 6524 components: - type: Transform @@ -1858,6 +1737,8 @@ entities: - 4154 - 1477 - 7733 + - type: Fixtures + fixtures: {} - uid: 6526 components: - type: Transform @@ -1870,6 +1751,8 @@ entities: - 4051 - 8221 - 2073 + - type: Fixtures + fixtures: {} - uid: 6527 components: - type: Transform @@ -1895,6 +1778,8 @@ entities: - 3800 - 8549 - 8559 + - type: Fixtures + fixtures: {} - uid: 6529 components: - type: Transform @@ -1922,6 +1807,8 @@ entities: - 4190 - 4191 - 4192 + - type: Fixtures + fixtures: {} - uid: 6530 components: - type: Transform @@ -1935,6 +1822,8 @@ entities: - 4190 - 4191 - 2972 + - type: Fixtures + fixtures: {} - uid: 6531 components: - type: Transform @@ -1956,6 +1845,8 @@ entities: - 2955 - 2965 - 2969 + - type: Fixtures + fixtures: {} - uid: 6532 components: - type: Transform @@ -1972,6 +1863,8 @@ entities: - 3680 - 2970 - 2969 + - type: Fixtures + fixtures: {} - uid: 6533 components: - type: Transform @@ -1992,6 +1885,8 @@ entities: - 3659 - 3649 - 3671 + - type: Fixtures + fixtures: {} - uid: 6534 components: - type: Transform @@ -2007,6 +1902,8 @@ entities: - 4195 - 3843 - 3844 + - type: Fixtures + fixtures: {} - uid: 6535 components: - type: Transform @@ -2026,6 +1923,8 @@ entities: - 3889 - 3890 - 3872 + - type: Fixtures + fixtures: {} - uid: 6536 components: - type: Transform @@ -2039,6 +1938,8 @@ entities: - 3874 - 3873 - 3875 + - type: Fixtures + fixtures: {} - uid: 6537 components: - type: Transform @@ -2057,6 +1958,8 @@ entities: - 4197 - 2957 - 2956 + - type: Fixtures + fixtures: {} - uid: 6538 components: - type: Transform @@ -2070,6 +1973,8 @@ entities: - 4197 - 4198 - 4200 + - type: Fixtures + fixtures: {} - uid: 6539 components: - type: Transform @@ -2086,6 +1991,8 @@ entities: - 3611 - 3609 - 3349 + - type: Fixtures + fixtures: {} - uid: 6542 components: - type: Transform @@ -2103,6 +2010,8 @@ entities: - 8225 - 2947 - 6540 + - type: Fixtures + fixtures: {} - uid: 6543 components: - type: Transform @@ -2117,6 +2026,8 @@ entities: - 4207 - 3518 - 3349 + - type: Fixtures + fixtures: {} - uid: 6545 components: - type: Transform @@ -2131,6 +2042,8 @@ entities: - 4208 - 3456 - 3455 + - type: Fixtures + fixtures: {} - uid: 6546 components: - type: Transform @@ -2142,6 +2055,8 @@ entities: - 4209 - 4207 - 3489 + - type: Fixtures + fixtures: {} - uid: 6547 components: - type: Transform @@ -2149,15 +2064,16 @@ entities: parent: 2 - type: DeviceList devices: - - 8237 - - 2923 - - 4210 - - 8233 - - 4207 - - 3206 - - 3316 - - 3419 - 3418 + - 3419 + - 3316 + - 3206 + - 4207 + - 8233 + - 4210 + - 2923 + - type: Fixtures + fixtures: {} - uid: 6554 components: - type: Transform @@ -2171,6 +2087,8 @@ entities: - 396 - 3979 - 3978 + - type: Fixtures + fixtures: {} - uid: 6555 components: - type: Transform @@ -2187,6 +2105,8 @@ entities: - 8534 - 4272 - 4222 + - type: Fixtures + fixtures: {} - uid: 6556 components: - type: Transform @@ -2201,6 +2121,8 @@ entities: - 1309 - 4221 - 8534 + - type: Fixtures + fixtures: {} - uid: 6558 components: - type: Transform @@ -2216,6 +2138,8 @@ entities: - 2071 - 4225 - 2867 + - type: Fixtures + fixtures: {} - uid: 6559 components: - type: Transform @@ -2241,6 +2165,8 @@ entities: - 2790 - 4225 - 8534 + - type: Fixtures + fixtures: {} - uid: 6563 components: - type: Transform @@ -2257,6 +2183,8 @@ entities: - 2628 - 4216 - 2944 + - type: Fixtures + fixtures: {} - uid: 6564 components: - type: Transform @@ -2281,6 +2209,8 @@ entities: - 4214 - 4212 - 1462 + - type: Fixtures + fixtures: {} - uid: 6572 components: - type: Transform @@ -2301,6 +2231,8 @@ entities: - 2964 - 2963 - 2962 + - type: Fixtures + fixtures: {} - uid: 6614 components: - type: Transform @@ -2313,6 +2245,8 @@ entities: - 8539 - 6659 - 6671 + - type: Fixtures + fixtures: {} - uid: 7434 components: - type: Transform @@ -2339,12 +2273,16 @@ entities: - 8545 - 8546 - 11449 + - type: Fixtures + fixtures: {} - uid: 8220 components: - type: Transform rot: 1.5707963267948966 rad pos: 57.5,47.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8222 components: - type: Transform @@ -2368,6 +2306,8 @@ entities: - 2954 - 2953 - 2952 + - type: Fixtures + fixtures: {} - uid: 8228 components: - type: Transform @@ -2380,6 +2320,8 @@ entities: - 4199 - 4200 - 3610 + - type: Fixtures + fixtures: {} - uid: 8231 components: - type: Transform @@ -2396,6 +2338,8 @@ entities: - 3379 - 2931 - 8225 + - type: Fixtures + fixtures: {} - uid: 8236 components: - type: Transform @@ -2403,13 +2347,14 @@ entities: parent: 2 - type: DeviceList devices: - - 2922 - - 8237 - - 8233 - - 4210 - - 4211 - - 3200 - 11438 + - 3200 + - 4211 + - 4210 + - 8233 + - 2922 + - type: Fixtures + fixtures: {} - uid: 8240 components: - type: Transform @@ -2423,6 +2368,8 @@ entities: - 3495 - 3497 - 3496 + - type: Fixtures + fixtures: {} - uid: 8241 components: - type: Transform @@ -2442,6 +2389,8 @@ entities: - 2928 - 2929 - 2931 + - type: Fixtures + fixtures: {} - uid: 8509 components: - type: Transform @@ -2465,6 +2414,8 @@ entities: - 8534 - 2071 - 4272 + - type: Fixtures + fixtures: {} - uid: 8532 components: - type: Transform @@ -2491,6 +2442,8 @@ entities: - 2071 - 6688 - 4191 + - type: Fixtures + fixtures: {} - uid: 8538 components: - type: Transform @@ -2508,6 +2461,8 @@ entities: - 6654 - 6650 - 6651 + - type: Fixtures + fixtures: {} - uid: 8540 components: - type: Transform @@ -2518,6 +2473,8 @@ entities: - 6675 - 6688 - 2790 + - type: Fixtures + fixtures: {} - uid: 8542 components: - type: Transform @@ -2533,6 +2490,8 @@ entities: - 8543 - 6644 - 6643 + - type: Fixtures + fixtures: {} - uid: 8544 components: - type: Transform @@ -2545,6 +2504,8 @@ entities: - 4211 - 4191 - 2916 + - type: Fixtures + fixtures: {} - uid: 10232 components: - type: Transform @@ -2565,6 +2526,8 @@ entities: - 10056 - 10029 - 10031 + - type: Fixtures + fixtures: {} - uid: 10233 components: - type: Transform @@ -2604,6 +2567,8 @@ entities: - 10015 - 10012 - 9926 + - type: Fixtures + fixtures: {} - uid: 10234 components: - type: Transform @@ -2622,6 +2587,8 @@ entities: - 10178 - 10177 - 10182 + - type: Fixtures + fixtures: {} - uid: 10235 components: - type: Transform @@ -2639,6 +2606,8 @@ entities: - 10200 - 10199 - 10197 + - type: Fixtures + fixtures: {} - uid: 10236 components: - type: Transform @@ -2658,6 +2627,8 @@ entities: - 10130 - 10131 - 10134 + - type: Fixtures + fixtures: {} - uid: 10237 components: - type: Transform @@ -2671,6 +2642,8 @@ entities: - 10220 - 10221 - 9808 + - type: Fixtures + fixtures: {} - uid: 10238 components: - type: Transform @@ -2686,6 +2659,8 @@ entities: - 10222 - 9809 - 9807 + - type: Fixtures + fixtures: {} - uid: 10239 components: - type: Transform @@ -2718,6 +2693,8 @@ entities: - 9853 - 9854 - 9872 + - type: Fixtures + fixtures: {} - uid: 10240 components: - type: Transform @@ -2734,6 +2711,8 @@ entities: - 9837 - 9836 - 9834 + - type: Fixtures + fixtures: {} - uid: 10241 components: - type: Transform @@ -2752,6 +2731,8 @@ entities: - 9880 - 9881 - 9879 + - type: Fixtures + fixtures: {} - uid: 11566 components: - type: Transform @@ -2760,6 +2741,8 @@ entities: - type: DeviceList devices: - 7749 + - type: Fixtures + fixtures: {} - proto: AirCanister entities: - uid: 53 @@ -2790,7 +2773,7 @@ entities: pos: 36.5,-6.5 parent: 2 - type: Door - secondsUntilStateChange: -12907.095 + secondsUntilStateChange: -21848.14 state: Opening - type: DeviceLinkSource lastSignals: @@ -2802,6 +2785,11 @@ entities: parent: 2 - proto: AirlockChapelLocked entities: + - uid: 270 + components: + - type: Transform + pos: 3.5,17.5 + parent: 2 - uid: 7158 components: - type: Transform @@ -2976,6 +2964,8 @@ entities: rot: -1.5707963267948966 rad pos: 13.5,27.5 parent: 2 + - type: AccessReader + accessListsOriginal: [] - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -3110,18 +3100,6 @@ entities: - InputB - type: DeviceLinkSink invokeCounter: 1 - - uid: 3266 - components: - - type: Transform - pos: 57.5,-20.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 3235: - - - DoorStatus - - InputA - - - DockStatus - - InputB - proto: AirlockExternalGlassShuttleEscape entities: - uid: 674 @@ -3136,6 +3114,20 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,24.5 parent: 2 +- proto: AirlockExternalGlassShuttleLocked + entities: + - uid: 3266 + components: + - type: Transform + pos: 57.5,-20.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 3235: + - - DoorStatus + - InputA + - - DockStatus + - InputB - proto: AirlockExternalLocked entities: - uid: 2795 @@ -4111,209 +4103,281 @@ entities: rot: -1.5707963267948966 rad pos: 19.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4235 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,28.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4916 components: - type: Transform pos: 43.5,52.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4917 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,57.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4918 components: - type: Transform rot: -1.5707963267948966 rad pos: 62.5,49.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4919 components: - type: Transform rot: -1.5707963267948966 rad pos: 55.5,39.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4920 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,27.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4921 components: - type: Transform rot: 1.5707963267948966 rad pos: 55.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4925 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4927 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,27.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4928 components: - type: Transform pos: 44.5,21.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4932 components: - type: Transform pos: 9.5,39.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4933 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,39.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4934 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,31.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4936 components: - type: Transform rot: -1.5707963267948966 rad pos: 40.5,14.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4937 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,12.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4942 components: - type: Transform rot: -3.141592653589793 rad pos: 59.5,4.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4943 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,11.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4944 components: - type: Transform rot: 1.5707963267948966 rad pos: 55.5,-1.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4945 components: - type: Transform pos: 35.5,3.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4948 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-10.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4949 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,-1.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4950 components: - type: Transform rot: -1.5707963267948966 rad pos: 21.5,-2.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4951 components: - type: Transform rot: 1.5707963267948966 rad pos: -0.5,-1.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4952 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,2.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4953 components: - type: Transform pos: -2.5,8.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4955 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,9.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4956 components: - type: Transform rot: 3.141592653589793 rad pos: 11.5,8.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4957 components: - type: Transform rot: -1.5707963267948966 rad pos: 35.5,14.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 5005 components: - type: Transform pos: 25.5,-13.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6164 components: - type: Transform rot: 1.5707963267948966 rad pos: 47.5,6.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6660 components: - type: Transform rot: 3.141592653589793 rad pos: 43.5,30.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7012 components: - type: Transform rot: -1.5707963267948966 rad pos: 21.5,-6.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7571 components: - type: Transform rot: -1.5707963267948966 rad pos: 29.5,-2.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8274 components: - type: Transform pos: 50.5,15.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8290 components: - type: Transform rot: -1.5707963267948966 rad pos: 31.5,24.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: APCHighCapacity entities: - uid: 9462 @@ -4321,78 +4385,104 @@ entities: - type: Transform pos: 15.5,-39.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9463 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,-39.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9464 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-31.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9465 components: - type: Transform rot: 1.5707963267948966 rad pos: 33.5,-31.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9466 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,-30.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9467 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,-20.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9468 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,-59.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9469 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,-60.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9470 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-64.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9471 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,-60.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9472 components: - type: Transform rot: 3.141592653589793 rad pos: 28.5,-70.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9473 components: - type: Transform rot: 3.141592653589793 rad pos: 15.5,-68.5 parent: 3564 + - type: Fixtures + fixtures: {} - uid: 9651 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-46.5 parent: 3564 + - type: Fixtures + fixtures: {} - proto: ArrivalsShuttleTimer entities: - uid: 6152 @@ -4400,11 +4490,15 @@ entities: - type: Transform pos: 62.5,53.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6153 components: - type: Transform pos: 62.5,44.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: ArtistCircuitBoard entities: - uid: 3812 @@ -4495,12 +4589,6 @@ entities: - type: Transform pos: 57.5,-4.5 parent: 2 - - uid: 8306 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,12.5 - parent: 2 - uid: 8309 components: - type: Transform @@ -4921,12 +5009,12 @@ entities: - uid: 1275 components: - type: Transform - pos: 31.945509,-11.86088 + pos: 31.5,-12.5 parent: 1 - uid: 1277 components: - type: Transform - pos: 37.848846,32.127415 + pos: 37.5,31.5 parent: 1 - proto: BaseGasCondenser entities: @@ -5372,7 +5460,7 @@ entities: parent: 2 - proto: BlastDoor entities: - - uid: 207 + - uid: 122 components: - type: Transform pos: -8.5,12.5 @@ -5834,13 +5922,6 @@ entities: - type: Transform pos: 42.5,21.5 parent: 2 -- proto: BrigmedicIDCard - entities: - - uid: 11116 - components: - - type: Transform - pos: 30.5,-21.5 - parent: 3564 - proto: Brutepack1 entities: - uid: 3227 @@ -18954,13 +19035,6 @@ entities: - type: Transform pos: 59.49891,26.586502 parent: 2 -- proto: CaptainSabre - entities: - - uid: 7174 - components: - - type: Transform - pos: 59.5,23.5 - parent: 2 - proto: CarbonDioxideCanister entities: - uid: 138 @@ -18988,450 +19062,6 @@ entities: - type: Transform pos: 43.5,-7.5 parent: 2 -- proto: Carpet - entities: - - uid: 2037 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 59.5,12.5 - parent: 2 - - uid: 2040 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 59.5,13.5 - parent: 2 - - uid: 2041 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 59.5,14.5 - parent: 2 - - uid: 5599 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,13.5 - parent: 2 - - uid: 5621 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,14.5 - parent: 2 - - uid: 5623 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,12.5 - parent: 2 -- proto: CarpetBlack - entities: - - uid: 7309 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,13.5 - parent: 2 - - uid: 7310 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,13.5 - parent: 2 - - uid: 7311 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,13.5 - parent: 2 - - uid: 7312 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,13.5 - parent: 2 - - uid: 7313 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,11.5 - parent: 2 - - uid: 7314 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,11.5 - parent: 2 - - uid: 7315 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,11.5 - parent: 2 - - uid: 7316 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,11.5 - parent: 2 - - uid: 7317 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,15.5 - parent: 2 - - uid: 7318 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,15.5 - parent: 2 - - uid: 7319 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,15.5 - parent: 2 - - uid: 7586 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 0.5,15.5 - parent: 2 -- proto: CarpetBlue - entities: - - uid: 2408 - components: - - type: Transform - pos: 57.5,24.5 - parent: 2 - - uid: 2409 - components: - - type: Transform - pos: 58.5,24.5 - parent: 2 - - uid: 2410 - components: - - type: Transform - pos: 59.5,23.5 - parent: 2 - - uid: 2411 - components: - - type: Transform - pos: 59.5,22.5 - parent: 2 - - uid: 2414 - components: - - type: Transform - pos: 56.5,22.5 - parent: 2 - - uid: 2415 - components: - - type: Transform - pos: 56.5,23.5 - parent: 2 - - uid: 2416 - components: - - type: Transform - pos: 57.5,23.5 - parent: 2 - - uid: 2417 - components: - - type: Transform - pos: 58.5,23.5 - parent: 2 - - uid: 2418 - components: - - type: Transform - pos: 58.5,22.5 - parent: 2 - - uid: 2419 - components: - - type: Transform - pos: 57.5,22.5 - parent: 2 - - uid: 2420 - components: - - type: Transform - pos: 57.5,21.5 - parent: 2 - - uid: 2421 - components: - - type: Transform - pos: 58.5,21.5 - parent: 2 -- proto: CarpetChapel - entities: - - uid: 268 - components: - - type: Transform - pos: -2.5,9.5 - parent: 2 - - uid: 270 - components: - - type: Transform - pos: -0.5,9.5 - parent: 2 - - uid: 271 - components: - - type: Transform - pos: -0.5,11.5 - parent: 2 - - uid: 323 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,14.5 - parent: 2 - - uid: 324 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,15.5 - parent: 2 - - uid: 325 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,10.5 - parent: 2 - - uid: 327 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,10.5 - parent: 2 - - uid: 328 - components: - - type: Transform - pos: -4.5,9.5 - parent: 2 - - uid: 329 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -3.5,9.5 - parent: 2 - - uid: 330 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,12.5 - parent: 2 - - uid: 331 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,10.5 - parent: 2 - - uid: 332 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,15.5 - parent: 2 - - uid: 333 - components: - - type: Transform - pos: -6.5,14.5 - parent: 2 - - uid: 334 - components: - - type: Transform - pos: -6.5,9.5 - parent: 2 - - uid: 335 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,9.5 - parent: 2 - - uid: 336 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,15.5 - parent: 2 - - uid: 383 - components: - - type: Transform - pos: -0.5,13.5 - parent: 2 - - uid: 527 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,10.5 - parent: 2 - - uid: 528 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,10.5 - parent: 2 - - uid: 529 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,12.5 - parent: 2 - - uid: 530 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,14.5 - parent: 2 - - uid: 531 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,12.5 - parent: 2 - - uid: 561 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,14.5 - parent: 2 - - uid: 1366 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,14.5 - parent: 2 - - uid: 1367 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -6.5,15.5 - parent: 2 - - uid: 1368 - components: - - type: Transform - pos: -4.5,14.5 - parent: 2 - - uid: 1756 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,10.5 - parent: 2 - - uid: 3150 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,14.5 - parent: 2 - - uid: 4853 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,9.5 - parent: 2 - - uid: 6987 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,11.5 - parent: 2 - - uid: 7147 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -1.5,13.5 - parent: 2 - - uid: 7305 - components: - - type: Transform - pos: -2.5,13.5 - parent: 2 - - uid: 7306 - components: - - type: Transform - pos: -2.5,11.5 - parent: 2 - - uid: 7307 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,12.5 - parent: 2 - - uid: 7308 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,14.5 - parent: 2 - - uid: 7323 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,10.5 - parent: 2 - - uid: 7324 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,10.5 - parent: 2 - - uid: 7583 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,9.5 - parent: 2 - - uid: 7584 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,11.5 - parent: 2 - - uid: 7585 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,13.5 - parent: 2 -- proto: CarpetSBlue - entities: - - uid: 2031 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 56.5,12.5 - parent: 2 - - uid: 2032 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 57.5,12.5 - parent: 2 - - uid: 2033 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 57.5,13.5 - parent: 2 - - uid: 2034 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 56.5,13.5 - parent: 2 - - uid: 2035 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 56.5,14.5 - parent: 2 - - uid: 2036 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 57.5,14.5 - parent: 2 - proto: Catwalk entities: - uid: 847 @@ -20269,13 +19899,175 @@ entities: - type: Transform pos: 5.5,-41.5 parent: 3564 - - uid: 7267 - components: - - type: Transform - pos: 54.5,60.5 - parent: 2 - proto: Chair entities: + - uid: 207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,14.5 + parent: 2 + - uid: 267 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,15.5 + parent: 2 + - uid: 330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,14.5 + parent: 2 + - uid: 331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,13.5 + parent: 2 + - uid: 332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,11.5 + parent: 2 + - uid: 333 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,10.5 + parent: 2 + - uid: 334 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,9.5 + parent: 2 + - uid: 335 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,11.5 + parent: 2 + - uid: 336 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,10.5 + parent: 2 + - uid: 337 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,9.5 + parent: 2 + - uid: 338 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,9.5 + parent: 2 + - uid: 339 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,14.5 + parent: 2 + - uid: 340 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,13.5 + parent: 2 + - uid: 341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,15.5 + parent: 2 + - uid: 342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,15.5 + parent: 2 + - uid: 343 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,14.5 + parent: 2 + - uid: 344 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,10.5 + parent: 2 + - uid: 345 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,9.5 + parent: 2 + - uid: 346 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,15.5 + parent: 2 + - uid: 347 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,10.5 + parent: 2 + - uid: 348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 57.5,33.5 + parent: 2 + - uid: 349 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,30.5 + parent: 2 + - uid: 350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,31.5 + parent: 2 + - uid: 351 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,32.5 + parent: 2 + - uid: 352 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,33.5 + parent: 2 + - uid: 353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,33.5 + parent: 2 + - uid: 354 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,33.5 + parent: 2 + - uid: 383 + components: + - type: Transform + pos: 58.5,29.5 + parent: 2 - uid: 446 components: - type: Transform @@ -20288,6 +20080,27 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,13.5 parent: 2 + - uid: 527 + components: + - type: Transform + pos: 60.5,29.5 + parent: 2 + - uid: 528 + components: + - type: Transform + pos: 59.5,29.5 + parent: 2 + - uid: 529 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,33.5 + parent: 2 + - uid: 530 + components: + - type: Transform + pos: 61.5,29.5 + parent: 2 - uid: 618 components: - type: Transform @@ -20588,134 +20401,6 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,-65.5 parent: 3564 -- proto: ChairWood - entities: - - uid: 122 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,14.5 - parent: 2 - - uid: 267 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,15.5 - parent: 2 - - uid: 337 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,14.5 - parent: 2 - - uid: 338 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,13.5 - parent: 2 - - uid: 339 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,11.5 - parent: 2 - - uid: 340 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,10.5 - parent: 2 - - uid: 341 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,9.5 - parent: 2 - - uid: 342 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,11.5 - parent: 2 - - uid: 343 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,10.5 - parent: 2 - - uid: 344 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,9.5 - parent: 2 - - uid: 345 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,15.5 - parent: 2 - - uid: 346 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,14.5 - parent: 2 - - uid: 347 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -1.5,13.5 - parent: 2 - - uid: 348 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,15.5 - parent: 2 - - uid: 349 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,15.5 - parent: 2 - - uid: 350 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,14.5 - parent: 2 - - uid: 351 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,10.5 - parent: 2 - - uid: 352 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -2.5,9.5 - parent: 2 - - uid: 353 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,9.5 - parent: 2 - - uid: 354 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,15.5 - parent: 2 - - uid: 11350 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,10.5 - parent: 2 - proto: CheckerBoard entities: - uid: 10309 @@ -21096,6 +20781,8 @@ entities: - type: Transform pos: 59.5,35.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: ClosetWallFireFilledRandom entities: - uid: 2436 @@ -21103,6 +20790,8 @@ entities: - type: Transform pos: 60.5,35.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: ClothingBackpack entities: - uid: 7551 @@ -22005,6 +21694,13 @@ entities: - type: Transform pos: 30.5,16.5 parent: 2 +- proto: ClothingMaskWeldingGas + entities: + - uid: 7147 + components: + - type: Transform + pos: 13.5,30.5 + parent: 2 - proto: ClothingNeckClownmedal entities: - uid: 2262 @@ -22600,76 +22296,6 @@ entities: - type: Transform pos: 45.5,21.5 parent: 2 -- proto: ComfyChair - entities: - - uid: 2432 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 57.5,33.5 - parent: 2 - - uid: 2439 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,32.5 - parent: 2 - - uid: 2440 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,31.5 - parent: 2 - - uid: 2441 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 62.5,30.5 - parent: 2 - - uid: 2442 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 60.5,33.5 - parent: 2 - - uid: 2443 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 59.5,33.5 - parent: 2 - - uid: 2444 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,33.5 - parent: 2 - - uid: 2445 - components: - - type: Transform - pos: 58.5,29.5 - parent: 2 - - uid: 2446 - components: - - type: Transform - pos: 59.5,29.5 - parent: 2 - - uid: 2447 - components: - - type: Transform - pos: 60.5,29.5 - parent: 2 - - uid: 2450 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 56.5,33.5 - parent: 2 - - uid: 2981 - components: - - type: Transform - pos: 61.5,29.5 - parent: 2 - proto: ComputerAlert entities: - uid: 1459 @@ -22910,18 +22536,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - uid: 2798 components: - type: Transform @@ -23179,14 +22795,6 @@ entities: - type: Transform pos: 7.5,16.5 parent: 2 -- proto: CurtainsBlack - entities: - - uid: 7154 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,17.5 - parent: 2 - proto: DefaultStationBeaconAI entities: - uid: 7619 @@ -23419,12 +23027,16 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,13.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6330 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,11.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: DefibrillatorCompact entities: - uid: 2051 @@ -24256,6 +23868,8 @@ entities: - 2918 - 2916 - 2922 + - type: Fixtures + fixtures: {} - uid: 35 components: - type: Transform @@ -24265,6 +23879,8 @@ entities: devices: - 2921 - 3246 + - type: Fixtures + fixtures: {} - uid: 433 components: - type: Transform @@ -24273,6 +23889,8 @@ entities: - type: DeviceList devices: - 396 + - type: Fixtures + fixtures: {} - uid: 1968 components: - type: Transform @@ -24283,6 +23901,8 @@ entities: - 6540 - 2949 - 2950 + - type: Fixtures + fixtures: {} - uid: 2009 components: - type: Transform @@ -24291,6 +23911,8 @@ entities: - type: DeviceList devices: - 2944 + - type: Fixtures + fixtures: {} - uid: 2770 components: - type: Transform @@ -24302,6 +23924,8 @@ entities: - 2406 - 1741 - 1735 + - type: Fixtures + fixtures: {} - uid: 2967 components: - type: Transform @@ -24310,6 +23934,8 @@ entities: - type: DeviceList devices: - 2972 + - type: Fixtures + fixtures: {} - uid: 2982 components: - type: Transform @@ -24325,6 +23951,8 @@ entities: - 6541 - 2927 - 2926 + - type: Fixtures + fixtures: {} - uid: 5865 components: - type: Transform @@ -24334,11 +23962,15 @@ entities: devices: - 2935 - 2936 + - type: Fixtures + fixtures: {} - uid: 6170 components: - type: Transform pos: 59.5,38.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6528 components: - type: Transform @@ -24349,6 +23981,8 @@ entities: devices: - 2970 - 2969 + - type: Fixtures + fixtures: {} - uid: 6565 components: - type: Transform @@ -24366,6 +24000,8 @@ entities: - 2936 - 2935 - 3246 + - type: Fixtures + fixtures: {} - uid: 6567 components: - type: Transform @@ -24378,6 +24014,8 @@ entities: - 2951 - 2954 - 2955 + - type: Fixtures + fixtures: {} - uid: 6568 components: - type: Transform @@ -24393,6 +24031,8 @@ entities: - 2954 - 2953 - 2952 + - type: Fixtures + fixtures: {} - uid: 6569 components: - type: Transform @@ -24407,6 +24047,8 @@ entities: - 2964 - 2963 - 2962 + - type: Fixtures + fixtures: {} - uid: 6570 components: - type: Transform @@ -24422,6 +24064,8 @@ entities: - 2970 - 2972 - 2974 + - type: Fixtures + fixtures: {} - uid: 6573 components: - type: Transform @@ -24431,6 +24075,8 @@ entities: - type: DeviceList devices: - 2912 + - type: Fixtures + fixtures: {} - uid: 6578 components: - type: Transform @@ -24440,6 +24086,8 @@ entities: devices: - 396 - 8475 + - type: Fixtures + fixtures: {} - uid: 6582 components: - type: Transform @@ -24448,8 +24096,9 @@ entities: parent: 2 - type: DeviceList devices: - - 8237 - 2923 + - type: Fixtures + fixtures: {} - uid: 6584 components: - type: Transform @@ -24466,12 +24115,16 @@ entities: - 6541 - 2927 - 2926 + - type: Fixtures + fixtures: {} - uid: 6585 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 57.5,45.5 + rot: -1.5707963267948966 rad + pos: 62.5,50.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6586 components: - type: Transform @@ -24482,6 +24135,8 @@ entities: devices: - 2926 - 2927 + - type: Fixtures + fixtures: {} - uid: 6587 components: - type: Transform @@ -24492,6 +24147,8 @@ entities: devices: - 6541 - 2947 + - type: Fixtures + fixtures: {} - uid: 6588 components: - type: Transform @@ -24502,6 +24159,8 @@ entities: - 8225 - 2947 - 6540 + - type: Fixtures + fixtures: {} - uid: 6591 components: - type: Transform @@ -24512,6 +24171,8 @@ entities: devices: - 2951 - 2949 + - type: Fixtures + fixtures: {} - uid: 6592 components: - type: Transform @@ -24522,6 +24183,8 @@ entities: devices: - 2956 - 2957 + - type: Fixtures + fixtures: {} - uid: 6593 components: - type: Transform @@ -24531,6 +24194,8 @@ entities: - type: DeviceList devices: - 2958 + - type: Fixtures + fixtures: {} - uid: 6594 components: - type: Transform @@ -24543,6 +24208,8 @@ entities: - 2957 - 2975 - 2976 + - type: Fixtures + fixtures: {} - uid: 6595 components: - type: Transform @@ -24554,6 +24221,8 @@ entities: - 2961 - 2975 - 2976 + - type: Fixtures + fixtures: {} - uid: 6642 components: - type: Transform @@ -24564,6 +24233,8 @@ entities: devices: - 8539 - 8543 + - type: Fixtures + fixtures: {} - uid: 7781 components: - type: Transform @@ -24572,6 +24243,8 @@ entities: - type: DeviceList devices: - 2934 + - type: Fixtures + fixtures: {} - uid: 8218 components: - type: Transform @@ -24583,6 +24256,8 @@ entities: - 2955 - 2965 - 2969 + - type: Fixtures + fixtures: {} - uid: 8219 components: - type: Transform @@ -24594,6 +24269,8 @@ entities: - 2974 - 2978 - 8549 + - type: Fixtures + fixtures: {} - uid: 8223 components: - type: Transform @@ -24603,6 +24280,8 @@ entities: - type: DeviceList devices: - 8221 + - type: Fixtures + fixtures: {} - uid: 8230 components: - type: Transform @@ -24613,6 +24292,8 @@ entities: devices: - 2931 - 8225 + - type: Fixtures + fixtures: {} - uid: 8232 components: - type: Transform @@ -24628,6 +24309,8 @@ entities: - 2918 - 2919 - 2925 + - type: Fixtures + fixtures: {} - uid: 8235 components: - type: Transform @@ -24636,7 +24319,8 @@ entities: - type: DeviceList devices: - 2922 - - 8237 + - type: Fixtures + fixtures: {} - uid: 8238 components: - type: Transform @@ -24645,6 +24329,8 @@ entities: - type: DeviceList devices: - 2924 + - type: Fixtures + fixtures: {} - uid: 8242 components: - type: Transform @@ -24656,6 +24342,8 @@ entities: - 2928 - 2929 - 2931 + - type: Fixtures + fixtures: {} - uid: 8247 components: - type: Transform @@ -24665,6 +24353,8 @@ entities: devices: - 8248 - 8246 + - type: Fixtures + fixtures: {} - uid: 8249 components: - type: Transform @@ -24673,6 +24363,8 @@ entities: - type: DeviceList devices: - 8245 + - type: Fixtures + fixtures: {} - uid: 8307 components: - type: Transform @@ -24681,6 +24373,8 @@ entities: - type: DeviceList devices: - 2901 + - type: Fixtures + fixtures: {} - uid: 8356 components: - type: Transform @@ -24690,6 +24384,8 @@ entities: - type: DeviceList devices: - 8539 + - type: Fixtures + fixtures: {} - uid: 8528 components: - type: Transform @@ -24706,6 +24402,8 @@ entities: - 1831 - 8477 - 2912 + - type: Fixtures + fixtures: {} - uid: 8529 components: - type: Transform @@ -24714,6 +24412,8 @@ entities: - type: DeviceList devices: - 2904 + - type: Fixtures + fixtures: {} - uid: 8531 components: - type: Transform @@ -24729,6 +24429,8 @@ entities: - 1741 - 1735 - 8475 + - type: Fixtures + fixtures: {} - uid: 8533 components: - type: Transform @@ -24744,6 +24446,8 @@ entities: - 7657 - 1831 - 8477 + - type: Fixtures + fixtures: {} - uid: 8541 components: - type: Transform @@ -24753,6 +24457,8 @@ entities: - type: DeviceList devices: - 8543 + - type: Fixtures + fixtures: {} - uid: 10242 components: - type: Transform @@ -24762,6 +24468,8 @@ entities: devices: - 9647 - 9646 + - type: Fixtures + fixtures: {} - uid: 10243 components: - type: Transform @@ -24772,6 +24480,8 @@ entities: devices: - 9645 - 9646 + - type: Fixtures + fixtures: {} - uid: 10244 components: - type: Transform @@ -24781,6 +24491,8 @@ entities: devices: - 9648 - 9649 + - type: Fixtures + fixtures: {} - uid: 10245 components: - type: Transform @@ -24792,6 +24504,8 @@ entities: - 9643 - 9644 - 9648 + - type: Fixtures + fixtures: {} - uid: 10246 components: - type: Transform @@ -24809,6 +24523,8 @@ entities: - 9649 - 9647 - 9650 + - type: Fixtures + fixtures: {} - uid: 10247 components: - type: Transform @@ -24827,6 +24543,8 @@ entities: - 9637 - 9640 - 9641 + - type: Fixtures + fixtures: {} - uid: 10248 components: - type: Transform @@ -24835,6 +24553,8 @@ entities: - type: DeviceList devices: - 9635 + - type: Fixtures + fixtures: {} - uid: 10249 components: - type: Transform @@ -24844,6 +24564,8 @@ entities: devices: - 9634 - 9633 + - type: Fixtures + fixtures: {} - uid: 10250 components: - type: Transform @@ -24854,6 +24576,8 @@ entities: devices: - 9631 - 9632 + - type: Fixtures + fixtures: {} - uid: 10251 components: - type: Transform @@ -24866,6 +24590,8 @@ entities: - 9638 - 9637 - 9639 + - type: Fixtures + fixtures: {} - proto: FireExtinguisher entities: - uid: 1071 @@ -25718,18 +25444,6 @@ entities: - 8231 - 6588 - 6542 - - uid: 8237 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 0.5,16.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 8235 - - 8236 - - 6582 - - 6547 - uid: 8245 components: - type: Transform @@ -44296,7 +44010,7 @@ entities: - uid: 134 components: - type: Transform - pos: 68.5,-23.5 + pos: 6.5,-19.5 parent: 2 - uid: 153 components: @@ -44973,11 +44687,31 @@ entities: - type: Transform pos: -0.5,36.5 parent: 2 + - uid: 2033 + components: + - type: Transform + pos: 5.5,-19.5 + parent: 2 - uid: 2038 components: - type: Transform pos: 5.5,30.5 parent: 2 + - uid: 2040 + components: + - type: Transform + pos: 11.5,-19.5 + parent: 2 + - uid: 2041 + components: + - type: Transform + pos: 12.5,-19.5 + parent: 2 + - uid: 2047 + components: + - type: Transform + pos: 13.5,-19.5 + parent: 2 - uid: 2059 components: - type: Transform @@ -45084,6 +44818,11 @@ entities: rot: -1.5707963267948966 rad pos: 9.5,46.5 parent: 2 + - uid: 2191 + components: + - type: Transform + pos: 14.5,-19.5 + parent: 2 - uid: 2345 components: - type: Transform @@ -45124,6 +44863,126 @@ entities: - type: Transform pos: 64.5,28.5 parent: 2 + - uid: 2392 + components: + - type: Transform + pos: 19.5,-19.5 + parent: 2 + - uid: 2408 + components: + - type: Transform + pos: 27.5,-19.5 + parent: 2 + - uid: 2409 + components: + - type: Transform + pos: 28.5,-19.5 + parent: 2 + - uid: 2410 + components: + - type: Transform + pos: 30.5,-19.5 + parent: 2 + - uid: 2411 + components: + - type: Transform + pos: 23.5,-19.5 + parent: 2 + - uid: 2414 + components: + - type: Transform + pos: 24.5,-19.5 + parent: 2 + - uid: 2415 + components: + - type: Transform + pos: 35.5,-19.5 + parent: 2 + - uid: 2416 + components: + - type: Transform + pos: 36.5,-19.5 + parent: 2 + - uid: 2417 + components: + - type: Transform + pos: 38.5,-19.5 + parent: 2 + - uid: 2418 + components: + - type: Transform + pos: 38.5,-18.5 + parent: 2 + - uid: 2419 + components: + - type: Transform + pos: 33.5,-19.5 + parent: 2 + - uid: 2420 + components: + - type: Transform + pos: 1.5,-19.5 + parent: 2 + - uid: 2421 + components: + - type: Transform + pos: 47.5,62.5 + parent: 2 + - uid: 2432 + components: + - type: Transform + pos: 19.5,62.5 + parent: 2 + - uid: 2439 + components: + - type: Transform + pos: 20.5,62.5 + parent: 2 + - uid: 2440 + components: + - type: Transform + pos: 21.5,62.5 + parent: 2 + - uid: 2441 + components: + - type: Transform + pos: 22.5,62.5 + parent: 2 + - uid: 2442 + components: + - type: Transform + pos: 26.5,62.5 + parent: 2 + - uid: 2443 + components: + - type: Transform + pos: 28.5,62.5 + parent: 2 + - uid: 2444 + components: + - type: Transform + pos: 35.5,62.5 + parent: 2 + - uid: 2445 + components: + - type: Transform + pos: 36.5,62.5 + parent: 2 + - uid: 2446 + components: + - type: Transform + pos: 37.5,62.5 + parent: 2 + - uid: 2447 + components: + - type: Transform + pos: 38.5,62.5 + parent: 2 + - uid: 2450 + components: + - type: Transform + pos: 39.5,62.5 + parent: 2 - uid: 2462 components: - type: Transform @@ -45174,6 +45033,26 @@ entities: - type: Transform pos: 68.5,-18.5 parent: 2 + - uid: 2792 + components: + - type: Transform + pos: 40.5,62.5 + parent: 2 + - uid: 2981 + components: + - type: Transform + pos: 33.5,62.5 + parent: 2 + - uid: 3048 + components: + - type: Transform + pos: 32.5,62.5 + parent: 2 + - uid: 3150 + components: + - type: Transform + pos: 46.5,62.5 + parent: 2 - uid: 3260 components: - type: Transform @@ -45240,6 +45119,16 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-45.5 parent: 3564 + - uid: 3753 + components: + - type: Transform + pos: 45.5,62.5 + parent: 2 + - uid: 3784 + components: + - type: Transform + pos: 42.5,62.5 + parent: 2 - uid: 3923 components: - type: Transform @@ -45393,51 +45282,36 @@ entities: - type: Transform pos: 68.5,-17.5 parent: 2 - - uid: 7390 + - uid: 7267 + components: + - type: Transform + pos: 68.5,-23.5 + parent: 2 + - uid: 7285 components: - type: Transform pos: 68.5,-24.5 parent: 2 - - uid: 7391 + - uid: 7287 components: - type: Transform pos: 68.5,-25.5 parent: 2 - - uid: 7392 + - uid: 7288 components: - type: Transform pos: 68.5,-26.5 parent: 2 - - uid: 7393 + - uid: 7289 components: - type: Transform pos: 68.5,-27.5 parent: 2 - - uid: 7394 - components: - - type: Transform - pos: 64.5,-19.5 - parent: 2 - - uid: 7406 + - uid: 7305 components: - type: Transform pos: 68.5,-28.5 parent: 2 - - uid: 7407 - components: - - type: Transform - pos: 68.5,-29.5 - parent: 2 - - uid: 7408 - components: - - type: Transform - pos: 67.5,-29.5 - parent: 2 - - uid: 7410 - components: - - type: Transform - pos: 66.5,-29.5 - parent: 2 - uid: 7460 components: - type: Transform @@ -45449,41 +45323,16 @@ entities: rot: 3.141592653589793 rad pos: 47.5,26.5 parent: 2 - - uid: 7656 - components: - - type: Transform - pos: 65.5,-29.5 - parent: 2 - uid: 7748 components: - type: Transform pos: 21.5,23.5 parent: 2 - - uid: 7750 - components: - - type: Transform - pos: 64.5,-29.5 - parent: 2 - uid: 7754 components: - type: Transform pos: 21.5,22.5 parent: 2 - - uid: 7777 - components: - - type: Transform - pos: 63.5,-29.5 - parent: 2 - - uid: 7790 - components: - - type: Transform - pos: 62.5,-29.5 - parent: 2 - - uid: 7824 - components: - - type: Transform - pos: 61.5,-29.5 - parent: 2 - uid: 7830 components: - type: Transform @@ -47375,46 +47224,11 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,37.5 parent: 2 - - uid: 8214 - components: - - type: Transform - pos: 60.5,-29.5 - parent: 2 - - uid: 8215 - components: - - type: Transform - pos: 64.5,-20.5 - parent: 2 - - uid: 8216 - components: - - type: Transform - pos: 65.5,-20.5 - parent: 2 - - uid: 8217 - components: - - type: Transform - pos: 65.5,-21.5 - parent: 2 - - uid: 8297 - components: - - type: Transform - pos: 65.5,-22.5 - parent: 2 - - uid: 8298 - components: - - type: Transform - pos: 65.5,-23.5 - parent: 2 - uid: 8301 components: - type: Transform pos: 24.5,-1.5 parent: 2 - - uid: 8308 - components: - - type: Transform - pos: 65.5,-24.5 - parent: 2 - uid: 8310 components: - type: Transform @@ -47427,11 +47241,6 @@ entities: rot: 3.141592653589793 rad pos: 44.5,26.5 parent: 2 - - uid: 8314 - components: - - type: Transform - pos: 65.5,-25.5 - parent: 2 - uid: 8315 components: - type: Transform @@ -48678,16 +48487,6 @@ entities: - type: Transform pos: 26.5,-41.5 parent: 3564 - - uid: 9925 - components: - - type: Transform - pos: 65.5,-26.5 - parent: 2 - - uid: 10614 - components: - - type: Transform - pos: 65.5,-27.5 - parent: 2 - uid: 11213 components: - type: Transform @@ -49531,173 +49330,6 @@ entities: - type: Transform pos: 36.5,54.5 parent: 2 -- proto: HolopadAiMain - entities: - - uid: 7792 - components: - - type: Transform - pos: 45.5,50.5 - parent: 2 -- proto: HolopadAiUpload - entities: - - uid: 7793 - components: - - type: Transform - pos: 31.5,54.5 - parent: 2 -- proto: HolopadCommandBridge - entities: - - uid: 7546 - components: - - type: Transform - pos: 57.5,31.5 - parent: 2 - - type: Label - currentLabel: Command - Control Room -- proto: HolopadCommandCaptain - entities: - - uid: 7545 - components: - - type: Transform - pos: 57.5,22.5 - parent: 2 - - type: Label - currentLabel: Command - Secure Storage -- proto: HolopadCommandHop - entities: - - uid: 2392 - components: - - type: Transform - pos: 45.5,27.5 - parent: 2 -- proto: HolopadEngineeringAME - entities: - - uid: 7786 - components: - - type: Transform - pos: 45.5,36.5 - parent: 2 -- proto: HolopadEngineeringAtmosMain - entities: - - uid: 7782 - components: - - type: Transform - pos: 28.5,-8.5 - parent: 2 -- proto: HolopadEngineeringAtmosTeg - entities: - - uid: 1562 - components: - - type: Transform - pos: 20.5,33.5 - parent: 2 -- proto: HolopadEngineeringMain - entities: - - uid: 5342 - components: - - type: Transform - pos: 33.5,31.5 - parent: 2 -- proto: HolopadEngineeringStorage - entities: - - uid: 4742 - components: - - type: Transform - pos: 20.5,41.5 - parent: 2 -- proto: HolopadEngineeringTelecoms - entities: - - uid: 1505 - components: - - type: Transform - pos: -4.5,6.5 - parent: 2 -- proto: HolopadGeneralArrivals - entities: - - uid: 7783 - components: - - type: Transform - pos: 60.5,48.5 - parent: 2 -- proto: HolopadGeneralCryosleep - entities: - - uid: 5211 - components: - - type: Transform - pos: 2.5,-1.5 - parent: 2 -- proto: HolopadGeneralEvac - entities: - - uid: 3048 - components: - - type: Transform - pos: 59.5,-0.5 - parent: 2 - - uid: 7751 - components: - - type: Transform - pos: 47.5,-14.5 - parent: 2 - - type: Label - currentLabel: General - Observation -- proto: HolopadGeneralEVAStorage - entities: - - uid: 3753 - components: - - type: Transform - pos: 51.5,40.5 - parent: 2 -- proto: HolopadMedicalChemistry - entities: - - uid: 5862 - components: - - type: Transform - pos: 32.5,10.5 - parent: 2 -- proto: HolopadMedicalMedbay - entities: - - uid: 2191 - components: - - type: Transform - pos: 17.5,11.5 - parent: 2 -- proto: HolopadMedicalMorgue - entities: - - uid: 2047 - components: - - type: Transform - pos: 3.5,14.5 - parent: 2 -- proto: HolopadScienceFront - entities: - - uid: 1539 - components: - - type: Transform - pos: 51.5,5.5 - parent: 2 -- proto: HolopadSecurityCourtroom - entities: - - uid: 5345 - components: - - type: Transform - pos: 58.5,15.5 - parent: 2 - - type: Label - currentLabel: Security - Assembly Room -- proto: HolopadSecurityFront - entities: - - uid: 1535 - components: - - type: Transform - pos: 38.5,0.5 - parent: 2 -- proto: HolopadServiceChapel - entities: - - uid: 6177 - components: - - type: Transform - pos: -1.5,12.5 - parent: 2 - proto: HydroponicsToolMiniHoe entities: - uid: 10556 @@ -49826,17 +49458,23 @@ entities: - type: Transform pos: 57.5,35.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4183 components: - type: Transform pos: 44.5,52.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7474 components: - type: Transform rot: -1.5707963267948966 rad pos: 48.5,28.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: IntercomCommon entities: - uid: 36 @@ -49844,57 +49482,77 @@ entities: - type: Transform pos: 26.5,8.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4185 components: - type: Transform pos: 46.5,52.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4930 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7492 components: - type: Transform pos: 35.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7501 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7504 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,-0.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7554 components: - type: Transform rot: -1.5707963267948966 rad pos: 3.5,-11.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7577 components: - type: Transform pos: 56.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7581 components: - type: Transform rot: -1.5707963267948966 rad pos: 63.5,15.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8537 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,28.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: IntercomEngineering entities: - uid: 846 @@ -49902,52 +49560,70 @@ entities: - type: Transform pos: 29.5,32.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 3008 components: - type: Transform pos: 15.5,40.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 3072 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,20.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 5122 components: - type: Transform rot: 1.5707963267948966 rad pos: 21.5,-7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6553 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,36.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6557 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,25.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6598 components: - type: Transform pos: 31.5,36.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7482 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,33.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8563 components: - type: Transform rot: 3.141592653589793 rad pos: 29.5,1.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: IntercomMedical entities: - uid: 1913 @@ -49956,12 +49632,16 @@ entities: rot: 3.141592653589793 rad pos: 24.5,12.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7443 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,8.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: IntercomSecurity entities: - uid: 4184 @@ -49969,6 +49649,8 @@ entities: - type: Transform pos: 45.5,52.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: JetpackBlueFilled entities: - uid: 8636 @@ -50075,9 +49757,9 @@ entities: - type: Transform pos: 23.5,-16.5 parent: 3564 -- proto: LockerCaptainFilledNoLaser +- proto: LockerCaptainFilledHardsuit entities: - - uid: 6176 + - uid: 561 components: - type: Transform pos: 59.5,24.5 @@ -50091,10 +49773,10 @@ entities: parent: 2 - proto: LockerChiefEngineerFilledHardsuit entities: - - uid: 8325 + - uid: 2036 components: - type: Transform - pos: 18.5,42.5 + pos: 17.5,41.5 parent: 2 - proto: LockerChiefMedicalOfficerFilledHardsuit entities: @@ -50284,6 +49966,11 @@ entities: parent: 2 - proto: LockerSteel entities: + - uid: 135 + components: + - type: Transform + pos: 58.5,45.5 + parent: 2 - uid: 935 components: - type: Transform @@ -50294,6 +49981,11 @@ entities: - type: Transform pos: 58.5,47.5 parent: 2 + - uid: 1367 + components: + - type: Transform + pos: 58.5,44.5 + parent: 2 - uid: 2618 components: - type: Transform @@ -50389,13 +50081,6 @@ entities: - type: Transform pos: 33.5,-30.5 parent: 3564 -- proto: LockerWardenFilled - entities: - - uid: 1353 - components: - - type: Transform - pos: 33.5,0.5 - parent: 2 - proto: LockerWardenFilledHardsuit entities: - uid: 10431 @@ -50410,6 +50095,50 @@ entities: - type: Transform pos: 23.5,42.5 parent: 2 +- proto: LogicGateAnd + entities: + - uid: 1839 + components: + - type: Transform + pos: 57.5,-3.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 1829: + - - Output + - Open + - - Output + - AutoClose + - uid: 1879 + components: + - type: Transform + pos: 57.5,-13.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 1848: + - - Output + - Open + - - Output + - AutoClose + - uid: 3235 + components: + - type: Transform + pos: 57.5,-19.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 3232: + - - Output + - Open + - - Output + - AutoClose - proto: LogicGateOr entities: - uid: 6692 @@ -50424,52 +50153,6 @@ entities: 2984: - - Output - DoorBolt -- proto: LogicGateXor - entities: - - uid: 1839 - components: - - type: Transform - anchored: True - pos: 57.5,-3.5 - parent: 2 - - type: Physics - canCollide: False - bodyType: Static - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 1829: - - - Output - - DoorBolt - - uid: 1879 - components: - - type: Transform - anchored: True - pos: 57.5,-13.5 - parent: 2 - - type: Physics - canCollide: False - bodyType: Static - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 1848: - - - Output - - DoorBolt - - uid: 3235 - components: - - type: Transform - pos: 57.5,-19.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 3232: - - - Output - - DoorBolt - proto: LootSpawnerArmory entities: - uid: 10455 @@ -50491,6 +50174,13 @@ entities: - type: Transform pos: 36.5,-59.5 parent: 3564 +- proto: Machete + entities: + - uid: 6987 + components: + - type: Transform + pos: 13.5,30.5 + parent: 2 - proto: MachineAnomalyVessel entities: - uid: 2379 @@ -50531,6 +50221,18 @@ entities: - type: Transform pos: 31.5,8.5 parent: 2 +- proto: MachineFrameDestroyed + entities: + - uid: 4742 + components: + - type: Transform + pos: 54.5,59.5 + parent: 2 + - uid: 4853 + components: + - type: Transform + pos: 54.5,62.5 + parent: 2 - proto: MagazinePistolSubMachineGun entities: - uid: 1914 @@ -50922,18 +50624,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - uid: 1318 components: - type: Transform @@ -51317,6 +51009,38 @@ entities: parent: 2 - proto: Paper entities: + - uid: 271 + components: + - type: MetaData + desc: A piece of important paper. + name: Important Information (please do not ignore) + - type: Transform + pos: 34.5,0.5 + parent: 2 + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedColor: '#006600FF' + stampedName: stamp-component-stamped-name-centcom + content: >- + Need guns? Check out the prison station! Just a hop, skip and a jump to the east, easily reachable via your very own prison shuttle! Just use the prison shuttle console, located next to the security wardrobe. + + + Do [italic]not[/italic] say CentComm never did anything for you. + - uid: 7174 + components: + - type: MetaData + desc: A piece of important paper. + name: Important Information (please do not ignore) + - type: Transform + pos: 25.5,-21.5 + parent: 3564 + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedColor: '#006600FF' + stampedName: stamp-component-stamped-name-centcom + content: Unfortunately, we cannot locate our backstock of brigmedic IDs. The brigmedic locker opens with your medical ID. We recommend keeping both it and the provided security ID easily available. Good luck! - uid: 10429 components: - type: Transform @@ -51483,6 +51207,8 @@ entities: - type: Transform pos: 7.3686285,34.76087 parent: 2 + - type: Paper + content: bingle - uid: 11517 components: - type: MetaData @@ -52171,30 +51897,40 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6839 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7168 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7182 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7195 components: - type: Transform rot: 3.141592653589793 rad pos: 26.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: PlayerStationAi entities: - uid: 4561 @@ -52537,7 +52273,7 @@ entities: components: - type: Transform rot: -1.5707963267948966 rad - pos: 34.5,11.5 + pos: 34.5,12.5 parent: 2 - uid: 218 components: @@ -54107,33 +53843,6 @@ entities: - type: Transform pos: 61.5,23.5 parent: 2 -- proto: PrefilledSyringe - entities: - - uid: 7191 - components: - - type: Transform - pos: 63.5,29.5 - parent: 2 - - uid: 7326 - components: - - type: Transform - pos: 32.5,16.5 - parent: 2 - - uid: 7448 - components: - - type: Transform - pos: 15.5,13.5 - parent: 2 - - uid: 7451 - components: - - type: Transform - pos: 13.5,13.5 - parent: 2 - - uid: 10621 - components: - - type: Transform - pos: 29.5,-16.5 - parent: 3564 - proto: PresentTrash entities: - uid: 7521 @@ -54212,8 +53921,30 @@ entities: - type: Transform pos: 55.5,29.5 parent: 2 +- proto: PuddleBlood + entities: + - uid: 5862 + components: + - type: Transform + pos: 13.5,30.5 + parent: 2 + - uid: 6176 + components: + - type: Transform + pos: 14.5,20.5 + parent: 2 - proto: PuddleBloodSmall entities: + - uid: 5621 + components: + - type: Transform + pos: 12.5,24.5 + parent: 2 + - uid: 5623 + components: + - type: Transform + pos: 11.5,24.5 + parent: 2 - uid: 6348 components: - type: Transform @@ -54414,6 +54145,38 @@ entities: - type: Transform pos: 28.5,-6.5 parent: 2 +- proto: RandomArtifactSpawner + entities: + - uid: 324 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,-20.5 + parent: 2 + - uid: 325 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-0.5 + parent: 2 + - uid: 327 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,23.5 + parent: 2 + - uid: 328 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 40.5,58.5 + parent: 2 + - uid: 329 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 17.5,-45.5 + parent: 3564 - proto: RandomEngineerCorpseSpawner entities: - uid: 7286 @@ -54428,11 +54191,6 @@ entities: - type: Transform pos: 9.5,0.5 parent: 2 - - uid: 7287 - components: - - type: Transform - pos: 58.5,44.5 - parent: 2 - uid: 7360 components: - type: Transform @@ -54539,211 +54297,295 @@ entities: - type: Transform pos: 23.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 150 components: - type: Transform pos: 24.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 165 components: - type: Transform pos: 24.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 176 components: - type: Transform pos: 22.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 186 components: - type: Transform pos: 23.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 551 components: - type: Transform pos: 24.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 553 components: - type: Transform pos: 26.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 554 components: - type: Transform pos: 28.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 626 components: - type: Transform pos: 24.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 629 components: - type: Transform pos: 27.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 675 components: - type: Transform pos: 24.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 699 components: - type: Transform pos: 23.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 710 components: - type: Transform pos: 22.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 726 components: - type: Transform pos: 26.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 761 components: - type: Transform pos: 26.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 766 components: - type: Transform pos: 24.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 903 components: - type: Transform pos: 22.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 913 components: - type: Transform pos: 19.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 914 components: - type: Transform pos: 25.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 963 components: - type: Transform pos: 24.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1465 components: - type: Transform pos: 20.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1731 components: - type: Transform pos: 22.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2899 components: - type: Transform pos: 24.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4014 components: - type: Transform pos: 27.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4057 components: - type: Transform pos: 29.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4058 components: - type: Transform pos: 28.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4664 components: - type: Transform pos: 18.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4665 components: - type: Transform pos: 23.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4682 components: - type: Transform pos: 17.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9661 components: - type: Transform pos: 14.5,-57.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9662 components: - type: Transform pos: 14.5,-58.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9663 components: - type: Transform pos: 14.5,-59.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9664 components: - type: Transform pos: 13.5,-59.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9665 components: - type: Transform pos: 12.5,-59.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9666 components: - type: Transform pos: 12.5,-58.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9667 components: - type: Transform pos: 12.5,-57.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9668 components: - type: Transform pos: 11.5,-59.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9676 components: - type: Transform pos: 15.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9677 components: - type: Transform pos: 16.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9678 components: - type: Transform pos: 17.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9679 components: - type: Transform pos: 14.5,-63.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9680 components: - type: Transform pos: 14.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - proto: ReinforcedWindow entities: - uid: 9 @@ -54751,1265 +54593,1747 @@ entities: - type: Transform pos: -0.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10 components: - type: Transform pos: -0.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11 components: - type: Transform pos: 2.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12 components: - type: Transform pos: 0.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13 components: - type: Transform pos: 1.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14 components: - type: Transform pos: 0.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15 components: - type: Transform pos: 1.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16 components: - type: Transform pos: 2.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 126 components: - type: Transform pos: 20.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 127 components: - type: Transform pos: 18.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 128 components: - type: Transform pos: 16.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 129 components: - type: Transform pos: 17.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 130 components: - type: Transform pos: 15.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 144 components: - type: Transform pos: 17.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 145 components: - type: Transform pos: 16.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 191 components: - type: Transform pos: 19.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 196 components: - type: Transform pos: 18.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 198 components: - type: Transform pos: 7.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 199 components: - type: Transform pos: 41.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 200 components: - type: Transform pos: 42.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 201 components: - type: Transform pos: 40.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 202 components: - type: Transform pos: 11.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 228 components: - type: Transform pos: 15.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 232 components: - type: Transform pos: 43.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 237 components: - type: Transform pos: 12.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 238 components: - type: Transform pos: 10.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 261 components: - type: Transform pos: 39.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 273 components: - type: Transform pos: -7.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 274 components: - type: Transform pos: -7.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 279 components: - type: Transform pos: -7.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 280 components: - type: Transform pos: -7.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 281 components: - type: Transform pos: -7.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 282 components: - type: Transform pos: -7.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 312 components: - type: Transform pos: 13.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 360 components: - type: Transform pos: 9.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 371 components: - type: Transform pos: 6.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 372 components: - type: Transform pos: 5.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 373 components: - type: Transform pos: 4.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 405 components: - type: Transform pos: 0.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 406 components: - type: Transform pos: 1.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 407 components: - type: Transform pos: -0.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 408 components: - type: Transform pos: -0.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 409 components: - type: Transform pos: -0.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 411 components: - type: Transform pos: -0.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 412 components: - type: Transform pos: -0.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 413 components: - type: Transform pos: -0.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 414 components: - type: Transform pos: 0.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 415 components: - type: Transform pos: 1.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 416 components: - type: Transform pos: 2.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 468 components: - type: Transform pos: 2.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 562 components: - type: Transform pos: 51.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 568 components: - type: Transform pos: 7.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 647 components: - type: Transform pos: 21.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 713 components: - type: Transform pos: 8.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 714 components: - type: Transform pos: 12.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 736 components: - type: Transform pos: -0.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 740 components: - type: Transform pos: 8.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 870 components: - type: Transform pos: 46.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 882 components: - type: Transform pos: 45.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 967 components: - type: Transform pos: 47.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1083 components: - type: Transform pos: 21.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1088 components: - type: Transform pos: 21.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1118 components: - type: Transform pos: 33.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1119 components: - type: Transform pos: 33.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1120 components: - type: Transform pos: 43.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1121 components: - type: Transform pos: 44.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1122 components: - type: Transform pos: 45.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1123 components: - type: Transform pos: 46.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1124 components: - type: Transform pos: 47.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1125 components: - type: Transform pos: 48.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1126 components: - type: Transform pos: 50.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1127 components: - type: Transform pos: 50.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1128 components: - type: Transform pos: 50.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1149 components: - type: Transform pos: 37.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1150 components: - type: Transform pos: 36.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1151 components: - type: Transform pos: 34.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1152 components: - type: Transform pos: 35.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1153 components: - type: Transform pos: 33.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1154 components: - type: Transform pos: 31.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1155 components: - type: Transform pos: 30.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1156 components: - type: Transform pos: 29.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1157 components: - type: Transform pos: 28.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1158 components: - type: Transform pos: 27.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1159 components: - type: Transform pos: 25.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1160 components: - type: Transform pos: 24.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1161 components: - type: Transform pos: 23.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1162 components: - type: Transform pos: 22.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1163 components: - type: Transform pos: 21.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1251 components: - type: Transform pos: 51.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1252 components: - type: Transform pos: 52.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1253 components: - type: Transform pos: 53.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1255 components: - type: Transform pos: 54.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1271 components: - type: Transform pos: 31.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1272 components: - type: Transform pos: 33.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1295 components: - type: Transform pos: 7.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1296 components: - type: Transform pos: 3.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1387 components: - type: Transform pos: 41.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1412 components: - type: Transform pos: 41.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1814 components: - type: Transform pos: 64.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1818 components: - type: Transform pos: 62.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1819 components: - type: Transform pos: 56.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1824 components: - type: Transform pos: 59.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1825 components: - type: Transform pos: 60.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1826 components: - type: Transform pos: 66.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1827 components: - type: Transform pos: 58.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1830 components: - type: Transform pos: 58.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1837 components: - type: Transform pos: 56.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1844 components: - type: Transform pos: 56.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1849 components: - type: Transform pos: 58.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1850 components: - type: Transform pos: 55.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1855 components: - type: Transform pos: 65.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1856 components: - type: Transform pos: 61.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1857 components: - type: Transform pos: 58.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1861 components: - type: Transform pos: 58.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1862 components: - type: Transform pos: 56.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1873 components: - type: Transform pos: 56.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1876 components: - type: Transform pos: 58.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1877 components: - type: Transform pos: 56.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1878 components: - type: Transform pos: 58.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1880 components: - type: Transform pos: 56.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1882 components: - type: Transform pos: 58.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1901 components: - type: Transform pos: 13.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1933 components: - type: Transform pos: 51.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1970 components: - type: Transform pos: 52.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1976 components: - type: Transform pos: 50.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2069 components: - type: Transform pos: 49.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2083 components: - type: Transform pos: 63.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2100 components: - type: Transform pos: 49.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2106 components: - type: Transform pos: 51.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2127 components: - type: Transform pos: 53.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2130 components: - type: Transform pos: 44.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2139 components: - type: Transform pos: 9.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2140 components: - type: Transform pos: 10.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2142 components: - type: Transform pos: 8.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2143 components: - type: Transform pos: 7.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2146 components: - type: Transform pos: 6.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2147 components: - type: Transform pos: 7.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2148 components: - type: Transform pos: 8.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2149 components: - type: Transform pos: 0.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2150 components: - type: Transform pos: 5.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2151 components: - type: Transform pos: 54.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2152 components: - type: Transform pos: 4.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2153 components: - type: Transform pos: 3.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2174 components: - type: Transform pos: 52.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2175 components: - type: Transform pos: 51.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2353 components: - type: Transform pos: 64.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2354 components: - type: Transform pos: 64.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2355 components: - type: Transform pos: 64.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2356 components: - type: Transform pos: 64.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2357 components: - type: Transform pos: 64.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2358 components: - type: Transform pos: 64.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2359 components: - type: Transform pos: 64.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2463 components: - type: Transform pos: 64.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2590 components: - type: Transform pos: 62.5,58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2595 components: - type: Transform pos: 60.5,63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2596 components: - type: Transform pos: 59.5,63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2597 components: - type: Transform pos: 57.5,63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2598 components: - type: Transform pos: 56.5,63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2756 components: - type: Transform pos: -0.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3245 components: - type: Transform pos: 58.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3247 components: - type: Transform pos: 58.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3248 components: - type: Transform pos: 58.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3249 components: - type: Transform pos: 56.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3250 components: - type: Transform pos: 56.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3259 components: - type: Transform pos: 56.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3567 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-39.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 3568 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-40.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 3569 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-42.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 3570 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-43.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 3571 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-44.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 3572 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-45.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 4494 components: - type: Transform pos: 55.5,61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4685 components: - type: Transform pos: 25.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4686 components: - type: Transform pos: 25.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4697 components: - type: Transform pos: 25.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6011 components: - type: Transform pos: 54.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6012 components: - type: Transform pos: 55.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6013 components: - type: Transform pos: 56.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6015 components: - type: Transform pos: 58.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6025 components: - type: Transform pos: 53.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6345 components: - type: Transform pos: 46.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7192 components: - type: Transform pos: 25.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7702 components: - type: Transform pos: 47.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8318 components: - type: Transform pos: 46.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8320 components: - type: Transform pos: 45.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8393 components: - type: Transform pos: 47.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8394 components: - type: Transform pos: 44.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9452 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-46.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9453 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-46.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9712 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-60.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9734 components: - type: Transform rot: -1.5707963267948966 rad pos: 31.5,-18.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9735 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-24.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9736 components: - type: Transform rot: -1.5707963267948966 rad pos: 25.5,-24.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9737 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-25.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9738 components: - type: Transform rot: -1.5707963267948966 rad pos: 21.5,-24.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9739 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-24.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9740 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-29.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9741 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-32.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9742 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-33.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9743 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-27.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9744 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-30.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9745 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-26.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9746 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-25.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9747 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-30.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9748 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-29.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9749 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-28.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9750 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-33.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9751 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-34.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9752 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-36.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9753 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-37.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9754 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-36.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9755 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-37.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9758 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-40.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9759 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-41.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9760 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-44.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9761 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-45.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9762 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-44.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9763 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-45.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9764 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-48.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9765 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-49.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9766 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-48.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9767 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-49.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9768 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-52.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9769 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-53.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9770 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-52.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9771 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,-53.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9772 components: - type: Transform rot: -1.5707963267948966 rad pos: 24.5,-56.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9773 components: - type: Transform rot: -1.5707963267948966 rad pos: 25.5,-56.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9774 components: - type: Transform rot: -1.5707963267948966 rad pos: 21.5,-56.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9775 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-56.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9776 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9777 components: - type: Transform rot: -1.5707963267948966 rad pos: 21.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9778 components: - type: Transform rot: -1.5707963267948966 rad pos: 25.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9779 components: - type: Transform rot: -1.5707963267948966 rad pos: 24.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9780 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-63.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9781 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-64.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9782 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-65.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9783 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-67.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9784 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-68.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 9785 components: - type: Transform rot: -1.5707963267948966 rad pos: 26.5,-69.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 11559 components: - type: Transform pos: 23.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: RemoteSignaller entities: - uid: 421 @@ -56188,16 +56512,22 @@ entities: - type: Transform pos: 61.5,3.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4998 components: - type: Transform pos: 45.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7409 components: - type: Transform pos: 49.5,-12.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: Screwdriver entities: - uid: 6566 @@ -56225,6 +56555,13 @@ entities: - type: Transform pos: 27.5,26.5 parent: 2 +- proto: SecurityIDCard + entities: + - uid: 7154 + components: + - type: Transform + pos: 30.5,-21.5 + parent: 3564 - proto: SecurityTechFab entities: - uid: 10398 @@ -56542,16 +56879,22 @@ entities: - type: Transform pos: 40.5,49.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 2424 components: - type: Transform pos: 61.5,35.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7236 components: - type: Transform pos: 55.5,59.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignAiUpload entities: - uid: 4663 @@ -56559,6 +56902,8 @@ entities: - type: Transform pos: 28.5,51.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignalButton entities: - uid: 473 @@ -56581,6 +56926,8 @@ entities: 1254: - - Pressed - Toggle + - type: Fixtures + fixtures: {} - proto: SignalSwitchDirectional entities: - uid: 694 @@ -56625,6 +56972,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 1473 components: - type: Transform @@ -56658,6 +57007,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 2505 components: - type: Transform @@ -56681,6 +57032,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 2602 components: - type: Transform @@ -56704,6 +57057,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 2621 components: - type: Transform @@ -56732,6 +57087,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 2633 components: - type: Transform @@ -56750,6 +57107,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 2983 components: - type: Transform @@ -56763,6 +57122,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 3006 components: - type: Transform @@ -56785,6 +57146,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 3033 components: - type: Transform @@ -56798,6 +57161,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 3710 components: - type: Transform @@ -56811,6 +57176,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 4510 components: - type: Transform @@ -56824,6 +57191,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 4652 components: - type: Transform @@ -56857,6 +57226,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 4683 components: - type: Transform @@ -56870,6 +57241,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 5852 components: - type: Transform @@ -56883,6 +57256,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 5861 components: - type: Transform @@ -56896,6 +57271,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 5943 components: - type: Transform @@ -56913,6 +57290,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 6579 components: - type: Transform @@ -56926,6 +57305,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 6694 components: - type: Transform @@ -56954,6 +57335,8 @@ entities: - Off - - Off - On + - type: Fixtures + fixtures: {} - uid: 6731 components: - type: Transform @@ -57001,6 +57384,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 7005 components: - type: Transform @@ -57037,6 +57422,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7330 components: - type: Transform @@ -57065,6 +57452,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 7430 components: - type: Transform @@ -57102,6 +57491,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7435 components: - type: Transform @@ -57124,6 +57515,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7459 components: - type: Transform @@ -57150,6 +57543,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7461 components: - type: Transform @@ -57182,6 +57577,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7462 components: - type: Transform @@ -57204,6 +57601,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7467 components: - type: Transform @@ -57256,6 +57655,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7471 components: - type: Transform @@ -57278,6 +57679,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7473 components: - type: Transform @@ -57310,6 +57713,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7475 components: - type: Transform @@ -57327,6 +57732,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7477 components: - type: Transform @@ -57339,6 +57746,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 7480 components: - type: Transform @@ -57391,6 +57800,8 @@ entities: - On lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7481 components: - type: Transform @@ -57418,6 +57829,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7484 components: - type: Transform @@ -57440,6 +57853,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7488 components: - type: Transform @@ -57467,6 +57882,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7490 components: - type: Transform @@ -57493,6 +57910,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7491 components: - type: Transform @@ -57510,6 +57929,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7499 components: - type: Transform @@ -57531,6 +57952,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7502 components: - type: Transform @@ -57553,6 +57976,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7503 components: - type: Transform @@ -57585,6 +58010,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7507 components: - type: Transform @@ -57601,6 +58028,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7508 components: - type: Transform @@ -57617,6 +58046,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7509 components: - type: Transform @@ -57644,6 +58075,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7556 components: - type: Transform @@ -57661,6 +58094,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7557 components: - type: Transform @@ -57682,6 +58117,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7558 components: - type: Transform @@ -57703,6 +58140,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7562 components: - type: Transform @@ -57734,6 +58173,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7569 components: - type: Transform @@ -57760,6 +58201,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7570 components: - type: Transform @@ -57782,6 +58225,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7575 components: - type: Transform @@ -57824,6 +58269,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7576 components: - type: Transform @@ -57850,6 +58297,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7580 components: - type: Transform @@ -57876,6 +58325,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7590 components: - type: Transform @@ -57908,6 +58359,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7594 components: - type: Transform @@ -57935,6 +58388,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7596 components: - type: Transform @@ -57952,6 +58407,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 7600 components: - type: Transform @@ -57989,6 +58446,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7601 components: - type: Transform @@ -58006,6 +58465,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 7623 components: - type: Transform @@ -58037,6 +58498,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7626 components: - type: Transform @@ -58059,6 +58522,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7627 components: - type: Transform @@ -58131,6 +58596,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 7762 components: - type: Transform @@ -58154,6 +58621,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 7828 components: - type: Transform @@ -58181,6 +58650,8 @@ entities: - Off lastSignals: Status: True + - type: Fixtures + fixtures: {} - uid: 8324 components: - type: Transform @@ -58203,6 +58674,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 8339 components: - type: Transform @@ -58231,6 +58704,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 8343 components: - type: Transform @@ -58264,6 +58739,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 8593 components: - type: Transform @@ -58292,6 +58769,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 8598 components: - type: Transform @@ -58315,6 +58794,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10708 components: - type: Transform @@ -58328,6 +58809,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10747 components: - type: Transform @@ -58381,6 +58864,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10765 components: - type: Transform @@ -58409,6 +58894,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10766 components: - type: Transform @@ -58421,6 +58908,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10767 components: - type: Transform @@ -58434,6 +58923,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10768 components: - type: Transform @@ -58447,6 +58938,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10769 components: - type: Transform @@ -58460,6 +58953,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10770 components: - type: Transform @@ -58473,6 +58968,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10771 components: - type: Transform @@ -58486,6 +58983,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10772 components: - type: Transform @@ -58499,6 +58998,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10773 components: - type: Transform @@ -58512,6 +59013,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10774 components: - type: Transform @@ -58525,6 +59028,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10775 components: - type: Transform @@ -58538,6 +59043,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10776 components: - type: Transform @@ -58551,6 +59058,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10777 components: - type: Transform @@ -58564,6 +59073,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10778 components: - type: Transform @@ -58577,6 +59088,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10779 components: - type: Transform @@ -58590,6 +59103,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10780 components: - type: Transform @@ -58608,6 +59123,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10781 components: - type: Transform @@ -58626,6 +59143,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10782 components: - type: Transform @@ -58653,6 +59172,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10783 components: - type: Transform @@ -58671,6 +59192,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10784 components: - type: Transform @@ -58684,6 +59207,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10785 components: - type: Transform @@ -58702,6 +59227,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10786 components: - type: Transform @@ -58715,6 +59242,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - uid: 10788 components: - type: Transform @@ -58728,6 +59257,8 @@ entities: - Toggle - - Off - Toggle + - type: Fixtures + fixtures: {} - proto: SignAtmos entities: - uid: 3301 @@ -58735,6 +59266,8 @@ entities: - type: Transform pos: 31.5,1.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignBridge entities: - uid: 11400 @@ -58742,6 +59275,8 @@ entities: - type: Transform pos: 17.5,59.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignCans entities: - uid: 2013 @@ -58749,12 +59284,16 @@ entities: - type: Transform pos: 36.5,-5.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 2530 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,36.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignCansScience entities: - uid: 4939 @@ -58762,6 +59301,8 @@ entities: - type: Transform pos: 49.5,10.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignChapel entities: - uid: 696 @@ -58769,6 +59310,8 @@ entities: - type: Transform pos: 4.5,8.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignChem entities: - uid: 607 @@ -58777,6 +59320,8 @@ entities: rot: -1.5707963267948966 rad pos: 34.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalBridge entities: - uid: 4848 @@ -58785,18 +59330,24 @@ entities: rot: 3.141592653589793 rad pos: 35.5,8.75 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8278 components: - type: Transform rot: 3.141592653589793 rad pos: 36.5,17.75 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8281 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,6.75 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalDorms entities: - uid: 1075 @@ -58805,11 +59356,15 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,6.25 parent: 2 + - type: Fixtures + fixtures: {} - uid: 11404 components: - type: Transform pos: 36.5,17.25 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalEng entities: - uid: 5174 @@ -58818,32 +59373,58 @@ entities: rot: 3.141592653589793 rad pos: 35.5,8.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8285 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,6.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalEvac entities: + - uid: 268 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,-15.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 323 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 56.5,-15.5 + parent: 2 + - type: Fixtures + fixtures: {} - uid: 970 components: - type: Transform rot: 1.5707963267948966 rad pos: 28.5,6.75 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4849 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,17.75 parent: 2 + - type: Fixtures + fixtures: {} - uid: 8280 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,7.75 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalMed entities: - uid: 11401 @@ -58851,12 +59432,16 @@ entities: - type: Transform pos: 36.5,17.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 11405 components: - type: Transform rot: -1.5707963267948966 rad pos: 35.5,8.25 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalSci entities: - uid: 381 @@ -58865,17 +59450,23 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,6.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 1801 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 11403 components: - type: Transform pos: 40.5,17.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignDirectionalSec entities: - uid: 1376 @@ -58884,11 +59475,15 @@ entities: rot: 1.5707963267948966 rad pos: 28.5,6.25 parent: 2 + - type: Fixtures + fixtures: {} - uid: 11402 components: - type: Transform pos: 40.5,17.25 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignEngineering entities: - uid: 8279 @@ -58897,6 +59492,8 @@ entities: rot: -1.5707963267948966 rad pos: 36.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignEVA entities: - uid: 8468 @@ -58904,6 +59501,8 @@ entities: - type: Transform pos: 54.5,37.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignInterrogation entities: - uid: 10323 @@ -58911,6 +59510,8 @@ entities: - type: Transform pos: 19.5,-31.5 parent: 3564 + - type: Fixtures + fixtures: {} - proto: SignMaterials entities: - uid: 1773 @@ -58919,12 +59520,16 @@ entities: rot: 1.5707963267948966 rad pos: 35.5,30.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 5763 components: - type: Transform rot: 1.5707963267948966 rad pos: 38.5,32.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignMedical entities: - uid: 1481 @@ -58932,11 +59537,15 @@ entities: - type: Transform pos: 21.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 1482 components: - type: Transform pos: 14.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignMorgue entities: - uid: 427 @@ -58945,6 +59554,8 @@ entities: rot: 3.141592653589793 rad pos: 6.5,15.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignScience entities: - uid: 4066 @@ -58952,11 +59563,15 @@ entities: - type: Transform pos: 47.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 7163 components: - type: Transform pos: 57.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignSecurearea entities: - uid: 2772 @@ -58965,24 +59580,32 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,61.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 2773 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,58.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 2774 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,56.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6525 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,51.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignSecurity entities: - uid: 11406 @@ -58991,6 +59614,8 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,4.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignServer entities: - uid: 3129 @@ -58998,6 +59623,8 @@ entities: - type: Transform pos: 3.5,5.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignShipDock entities: - uid: 2058 @@ -59006,12 +59633,16 @@ entities: rot: 1.5707963267948966 rad pos: 59.5,3.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 6590 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,-17.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignTelecomms entities: - uid: 2480 @@ -59019,6 +59650,8 @@ entities: - type: Transform pos: 3.5,7.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: SignToolStorage entities: - uid: 1436 @@ -59027,14 +59660,24 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,18.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 4852 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,22.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: Sink entities: + - uid: 1505 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 34.5,11.5 + parent: 2 - uid: 10557 components: - type: Transform @@ -59104,7 +59747,7 @@ entities: desc: A relaxing grenade that releases a large, long-lasting cloud of fun when used. name: party grenade - type: Transform - pos: 34.523518,48.651146 + pos: 56.550304,22.555624 parent: 2 - type: SmokeOnTrigger solution: @@ -59125,7 +59768,7 @@ entities: desc: A relaxing grenade that releases a large, long-lasting cloud of fun when used. name: party grenade - type: Transform - pos: 34.36329,48.41327 + pos: 56.456554,22.493124 parent: 2 - type: SmokeOnTrigger solution: @@ -59146,7 +59789,7 @@ entities: desc: A relaxing grenade that releases a large, long-lasting cloud of fun when used. name: party grenade - type: Transform - pos: 34.316414,48.522644 + pos: 56.59718,22.289999 parent: 2 - type: SmokeOnTrigger solution: @@ -59167,7 +59810,7 @@ entities: desc: A relaxing grenade that releases a large, long-lasting cloud of fun when used. name: party grenade - type: Transform - pos: 34.523518,48.32302 + pos: 56.40968,22.633749 parent: 2 - type: SmokeOnTrigger solution: @@ -59188,7 +59831,7 @@ entities: desc: A relaxing grenade that releases a large, long-lasting cloud of fun when used. name: party grenade - type: Transform - pos: 34.733295,48.78693 + pos: 56.28468,22.399374 parent: 2 - type: SmokeOnTrigger solution: @@ -60269,6 +60912,27 @@ entities: - type: Transform pos: 36.5,1.5 parent: 2 +- proto: SpawnPointGhostDerelictEngineeringCyborg + entities: + - uid: 139 + components: + - type: Transform + pos: 17.5,55.5 + parent: 2 +- proto: SpawnPointGhostDerelictJanitorCyborg + entities: + - uid: 1368 + components: + - type: Transform + pos: -4.5,5.5 + parent: 2 +- proto: SpawnPointGhostDerelictSyndicateAssaultCyborg + entities: + - uid: 5211 + components: + - type: Transform + pos: 10.5,-37.5 + parent: 3564 - proto: SpawnPointHeadOfPersonnel entities: - uid: 2532 @@ -60534,11 +61198,15 @@ entities: rot: 1.5707963267948966 rad pos: 14.5,2.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 11523 components: - type: Transform pos: 50.5,27.5 parent: 2 + - type: Fixtures + fixtures: {} - proto: Stool entities: - uid: 1925 @@ -60653,6 +61321,13 @@ entities: - type: Transform pos: 24.5,42.5 parent: 2 +- proto: SuitStorageSec + entities: + - uid: 1366 + components: + - type: Transform + pos: 33.5,0.5 + parent: 2 - proto: SurveillanceCameraCommand entities: - uid: 7457 @@ -61240,6 +61915,33 @@ entities: parent: 2 - type: SurveillanceCamera id: Chapel +- proto: Syringe + entities: + - uid: 7191 + components: + - type: Transform + pos: 63.5,29.5 + parent: 2 + - uid: 7326 + components: + - type: Transform + pos: 32.5,16.5 + parent: 2 + - uid: 7448 + components: + - type: Transform + pos: 15.5,13.5 + parent: 2 + - uid: 7451 + components: + - type: Transform + pos: 13.5,13.5 + parent: 2 + - uid: 10621 + components: + - type: Transform + pos: 29.5,-16.5 + parent: 3564 - proto: Table entities: - uid: 31 @@ -61282,6 +61984,11 @@ entities: - type: Transform pos: 10.5,-8.5 parent: 2 + - uid: 531 + components: + - type: Transform + pos: -4.5,10.5 + parent: 2 - uid: 548 components: - type: Transform @@ -62194,14 +62901,6 @@ entities: - type: Transform pos: 26.5,-59.5 parent: 3564 -- proto: TableFancyBlack - entities: - - uid: 11351 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -4.5,10.5 - parent: 2 - proto: TableGlass entities: - uid: 793 @@ -62245,6 +62944,8 @@ entities: - type: PointLight color: '#FF3300FF' - type: ExplodeOnTrigger + keysIn: + - trigger - type: Explosive canCreateVacuum: False totalIntensity: 30 @@ -63970,11 +64671,6 @@ entities: - type: Transform pos: 67.5,-13.5 parent: 2 - - uid: 2792 - components: - - type: Transform - pos: 67.5,-23.5 - parent: 2 - uid: 2896 components: - type: Transform @@ -64692,11 +65388,6 @@ entities: - type: Transform pos: 41.5,47.5 parent: 2 - - uid: 7233 - components: - - type: Transform - pos: 67.5,-24.5 - parent: 2 - uid: 7239 components: - type: Transform @@ -64707,11 +65398,6 @@ entities: - type: Transform pos: 14.5,47.5 parent: 2 - - uid: 7396 - components: - - type: Transform - pos: 67.5,-28.5 - parent: 2 - uid: 8397 components: - type: Transform @@ -66842,18 +67528,6 @@ entities: parent: 3564 - proto: WallReinforcedRust entities: - - uid: 135 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,-27.5 - parent: 2 - - uid: 139 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 67.5,-26.5 - parent: 2 - uid: 496 components: - type: Transform @@ -68098,6 +68772,12 @@ entities: rot: -1.5707963267948966 rad pos: 67.5,-22.5 parent: 2 + - uid: 7233 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,-23.5 + parent: 2 - uid: 7237 components: - type: Transform @@ -68188,59 +68868,53 @@ entities: rot: -1.5707963267948966 rad pos: 67.5,-12.5 parent: 2 - - uid: 7339 + - uid: 7306 components: - type: Transform rot: -1.5707963267948966 rad - pos: 67.5,-18.5 + pos: 67.5,-24.5 parent: 2 - - uid: 7388 + - uid: 7307 components: - type: Transform rot: -1.5707963267948966 rad pos: 67.5,-25.5 parent: 2 - - uid: 7397 + - uid: 7308 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,-26.5 + parent: 2 + - uid: 7309 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,-27.5 + parent: 2 + - uid: 7310 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,-28.5 + parent: 2 + - uid: 7311 components: - type: Transform rot: -1.5707963267948966 rad pos: 66.5,-28.5 parent: 2 - - uid: 7399 + - uid: 7312 components: - type: Transform rot: -1.5707963267948966 rad pos: 65.5,-28.5 parent: 2 - - uid: 7401 + - uid: 7339 components: - type: Transform rot: -1.5707963267948966 rad - pos: 64.5,-28.5 - parent: 2 - - uid: 7402 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 63.5,-28.5 - parent: 2 - - uid: 7403 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.5,-28.5 - parent: 2 - - uid: 7404 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 61.5,-28.5 - parent: 2 - - uid: 7405 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,-28.5 + pos: 67.5,-18.5 parent: 2 - proto: WallSolid entities: @@ -72271,11 +72945,15 @@ entities: - type: Transform pos: 26.5,-1.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 9672 components: - type: Transform pos: 13.5,-59.5 parent: 3564 + - type: Fixtures + fixtures: {} - proto: WarningO2 entities: - uid: 326 @@ -72283,11 +72961,15 @@ entities: - type: Transform pos: 24.5,-1.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 9671 components: - type: Transform pos: 11.5,-59.5 parent: 3564 + - type: Fixtures + fixtures: {} - proto: WarningWaste entities: - uid: 3111 @@ -72295,11 +72977,15 @@ entities: - type: Transform pos: 24.5,-3.5 parent: 2 + - type: Fixtures + fixtures: {} - uid: 9687 components: - type: Transform pos: 16.5,-62.5 parent: 3564 + - type: Fixtures + fixtures: {} - proto: WaterTankFull entities: - uid: 1474 @@ -72386,66 +73072,131 @@ entities: - type: Transform pos: 33.5,55.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 1920 components: - type: Transform pos: 31.5,55.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 2188 components: - type: Transform pos: 34.5,50.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 2607 components: - type: Transform pos: 27.5,49.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 2762 components: - type: Transform pos: 21.5,57.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 2764 components: - type: Transform pos: 20.5,57.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 2766 components: - type: Transform pos: 19.5,49.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 2767 components: - type: Transform pos: 23.5,49.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 7555 components: - type: Transform pos: 25.5,57.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 7622 components: - type: Transform pos: 37.5,49.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 7628 components: - type: Transform pos: 42.5,47.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 7629 components: - type: Transform pos: 50.5,49.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - uid: 7630 components: - type: Transform pos: 49.5,50.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6658 + - 4557 + - 6155 - proto: WeaponEnergyTurretAIControlPanel entities: - uid: 4557 @@ -72454,18 +73205,70 @@ entities: rot: 3.141592653589793 rad pos: 29.5,49.5 parent: 2 + - type: DeviceList + devices: + - 2764 + - 2762 + - 2766 + - 2767 + - 7555 + - 2607 + - 1920 + - 1540 + - 2188 + - 7622 + - 7628 + - 7630 + - 7629 - uid: 6155 components: - type: Transform rot: 3.141592653589793 rad pos: 17.5,56.5 parent: 2 + - type: DeviceList + devices: + - 2764 + - 2762 + - 2766 + - 2767 + - 7555 + - 2607 + - 1920 + - 1540 + - 2188 + - 7622 + - 7628 + - 7630 + - 7629 - uid: 6658 components: - type: Transform rot: 3.141592653589793 rad pos: 46.5,46.5 parent: 2 + - type: DeviceList + devices: + - 2764 + - 2762 + - 2766 + - 2767 + - 7555 + - 2607 + - 1920 + - 1540 + - 2188 + - 7622 + - 7628 + - 7630 + - 7629 +- proto: WeldedSteelApronBase + entities: + - uid: 6177 + components: + - type: Transform + pos: 13.5,30.5 + parent: 2 - proto: Welder entities: - uid: 7549 @@ -72528,428 +73331,566 @@ entities: rot: 1.5707963267948966 rad pos: 14.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 44 components: - type: Transform pos: 19.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 57 components: - type: Transform rot: 1.5707963267948966 rad pos: 21.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 59 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 80 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 84 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 123 components: - type: Transform pos: 50.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 147 components: - type: Transform pos: 43.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 167 components: - type: Transform pos: 5.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 257 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 266 components: - type: Transform pos: 44.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 467 components: - type: Transform pos: 18.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 493 components: - type: Transform pos: 27.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 505 components: - type: Transform pos: 28.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 513 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 697 components: - type: Transform rot: 1.5707963267948966 rad pos: 14.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 792 components: - type: Transform pos: 38.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 956 components: - type: Transform pos: 32.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1167 components: - type: Transform pos: 17.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1291 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1294 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1370 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1396 components: - type: Transform pos: 61.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1692 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1807 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1922 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1945 components: - type: Transform rot: 1.5707963267948966 rad pos: 64.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2045 components: - type: Transform rot: 3.141592653589793 rad pos: 57.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2046 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2132 components: - type: Transform pos: 37.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2380 components: - type: Transform pos: 50.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2959 components: - type: Transform pos: 58.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2960 components: - type: Transform rot: 1.5707963267948966 rad pos: 64.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2966 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3171 components: - type: Transform pos: 37.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3234 components: - type: Transform rot: 1.5707963267948966 rad pos: 55.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3313 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3760 components: - type: Transform pos: 51.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3984 components: - type: Transform pos: 61.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4417 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5848 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6338 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6655 components: - type: Transform pos: 43.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7157 components: - type: Transform pos: 5.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7247 components: - type: Transform pos: 4.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7249 components: - type: Transform pos: 5.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7387 components: - type: Transform pos: 18.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7414 components: - type: Transform pos: 43.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8367 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8392 components: - type: Transform rot: 1.5707963267948966 rad pos: 44.5,31.5 parent: 2 - - uid: 10344 - components: - - type: Transform - pos: 23.5,-24.5 - parent: 3564 - - uid: 10345 - components: - - type: Transform - pos: 24.5,-24.5 - parent: 3564 + - type: DeltaPressure + gridUid: 2 - uid: 10346 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,-26.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10347 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,-27.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10348 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-38.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10349 components: - type: Transform rot: 1.5707963267948966 rad pos: 25.5,-38.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10350 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-34.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10351 components: - type: Transform rot: 1.5707963267948966 rad pos: 25.5,-34.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10352 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-38.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10353 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,-38.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10354 components: - type: Transform rot: 1.5707963267948966 rad pos: 25.5,-42.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10355 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-42.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10356 components: - type: Transform rot: 1.5707963267948966 rad pos: 25.5,-46.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10357 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-46.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10358 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-46.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10359 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,-46.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10360 components: - type: Transform rot: 1.5707963267948966 rad pos: 25.5,-50.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10361 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-50.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10362 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-50.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10363 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,-50.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10364 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-54.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10365 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,-54.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10366 components: - type: Transform rot: 1.5707963267948966 rad pos: 25.5,-54.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10367 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-54.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10375 components: - type: Transform pos: 28.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10427 components: - type: Transform pos: 37.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecure entities: - uid: 107 @@ -72957,11 +73898,15 @@ entities: - type: Transform pos: 13.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 141 components: - type: Transform pos: 9.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureArmoryLocked entities: - uid: 10373 @@ -72970,24 +73915,32 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,-59.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10374 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-58.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10376 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-61.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10377 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-66.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - proto: WindoorSecureChapelLocked entities: - uid: 356 @@ -72996,11 +73949,15 @@ entities: rot: 1.5707963267948966 rad pos: -3.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 440 components: - type: Transform pos: -3.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureChemistryLocked entities: - uid: 547 @@ -73009,22 +73966,30 @@ entities: rot: 1.5707963267948966 rad pos: 29.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1327 components: - type: Transform pos: 32.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2222 components: - type: Transform rot: 3.141592653589793 rad pos: 32.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2484 components: - type: Transform pos: 31.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureCommandLocked entities: - uid: 125 @@ -73032,6 +73997,8 @@ entities: - type: Transform pos: 57.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: AccessReader access: - - Captain @@ -73040,6 +74007,8 @@ entities: - type: Transform pos: 57.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: AccessReader access: - - Captain @@ -73049,22 +74018,42 @@ entities: rot: 1.5707963267948966 rad pos: 29.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 703 components: - type: Transform rot: 1.5707963267948966 rad pos: 28.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 2034 + components: + - type: Transform + pos: 17.5,42.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 2037 + components: + - type: Transform + pos: 22.5,16.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2399 components: - type: Transform pos: 59.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSource lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -239673.5 + secondsUntilStateChange: -248614.53 state: Opening - type: Airlock autoClose: False @@ -73074,18 +74063,24 @@ entities: rot: 1.5707963267948966 rad pos: 54.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4601 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11363 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureEngineeringLocked entities: - uid: 136 @@ -73094,40 +74089,54 @@ entities: rot: 1.5707963267948966 rad pos: 31.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 321 components: - type: Transform pos: 60.5,60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1365 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1617 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2645 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8396 components: - type: Transform pos: 33.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8476 components: - type: Transform rot: 1.5707963267948966 rad pos: 21.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureMedicalLocked entities: - uid: 609 @@ -73135,6 +74144,8 @@ entities: - type: Transform pos: 25.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: AccessReader access: - - Bar @@ -73147,24 +74158,32 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1089 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6975 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6997 components: - type: Transform rot: 1.5707963267948966 rad pos: 21.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureSecurityLawyerLocked entities: - uid: 1231 @@ -73173,12 +74192,16 @@ entities: rot: 1.5707963267948966 rad pos: 37.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10329 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,-32.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -73192,6 +74215,8 @@ entities: rot: 1.5707963267948966 rad pos: 19.5,-32.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -73204,21 +74229,29 @@ entities: - type: Transform pos: 22.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10369 components: - type: Transform pos: 23.5,-62.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10370 components: - type: Transform pos: 22.5,-56.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10371 components: - type: Transform pos: 23.5,-56.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - proto: WindoorSecureSecurityLocked entities: - uid: 1053 @@ -73227,12 +74260,16 @@ entities: rot: 1.5707963267948966 rad pos: 7.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1097 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -73245,12 +74282,16 @@ entities: - type: Transform pos: 40.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1441 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -73258,12 +74299,28 @@ entities: 1097: - - DoorStatus - DoorBolt + - uid: 5342 + components: + - type: Transform + pos: 24.5,-24.5 + parent: 3564 + - type: DeltaPressure + gridUid: 3564 + - uid: 5345 + components: + - type: Transform + pos: 23.5,-24.5 + parent: 3564 + - type: DeltaPressure + gridUid: 3564 - uid: 10372 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,-28.5 parent: 3564 + - type: DeltaPressure + gridUid: 3564 - proto: WindowDirectional entities: - uid: 471 @@ -73271,311 +74328,491 @@ entities: - type: Transform pos: 30.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 472 components: - type: Transform pos: 26.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 474 components: - type: Transform rot: -1.5707963267948966 rad pos: 28.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 507 components: - type: Transform pos: 27.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 512 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 537 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 555 components: - type: Transform rot: 3.141592653589793 rad pos: 25.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 556 components: - type: Transform pos: 26.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 566 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 646 components: - type: Transform pos: 15.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 654 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 712 components: - type: Transform rot: 3.141592653589793 rad pos: 26.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 717 components: - type: Transform pos: 14.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 733 components: - type: Transform pos: 13.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 734 components: - type: Transform pos: 12.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 743 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 747 components: - type: Transform pos: 29.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 748 components: - type: Transform rot: 3.141592653589793 rad pos: 28.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 749 components: - type: Transform rot: 3.141592653589793 rad pos: 29.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1077 components: - type: Transform pos: 33.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1078 components: - type: Transform pos: 34.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1100 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1102 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1165 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1166 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1282 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1283 components: - type: Transform rot: -1.5707963267948966 rad pos: 28.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1285 components: - type: Transform pos: 24.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1307 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1339 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1348 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1349 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 1353 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 22.5,16.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 1535 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 60.5,42.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 1539 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,32.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 1562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,32.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 1756 + components: + - type: Transform + pos: 54.5,32.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2002 components: - type: Transform pos: 53.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2027 components: - type: Transform rot: -1.5707963267948966 rad pos: 61.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2028 components: - type: Transform rot: -1.5707963267948966 rad pos: 61.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2029 components: - type: Transform rot: -1.5707963267948966 rad pos: 61.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 2031 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 60.5,42.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 2032 + components: + - type: Transform + pos: 60.5,42.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 2035 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,41.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2344 components: - type: Transform pos: 52.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2374 components: - type: Transform pos: 51.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2375 components: - type: Transform pos: 52.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2377 components: - type: Transform pos: 49.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2393 components: - type: Transform pos: 51.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2394 components: - type: Transform pos: 49.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3043 components: - type: Transform pos: 53.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 5599 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.5,42.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6014 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6382 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6415 components: - type: Transform rot: 3.141592653589793 rad pos: 32.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6419 components: - type: Transform rot: 3.141592653589793 rad pos: 33.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6420 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6421 components: - type: Transform rot: 3.141592653589793 rad pos: 35.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6423 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6438 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7298 components: - type: Transform rot: -1.5707963267948966 rad pos: 31.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7299 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8365 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8366 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowReinforcedDirectional entities: - uid: 20 @@ -73584,368 +74821,440 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 309 components: - type: Transform pos: -6.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 310 components: - type: Transform pos: -5.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 311 components: - type: Transform pos: -4.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 313 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 314 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 315 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 316 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 417 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 418 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 419 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 581 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 601 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 688 components: - type: Transform pos: 57.5,60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 892 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1101 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1197 components: - type: Transform pos: -8.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1322 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1329 components: - type: Transform rot: 3.141592653589793 rad pos: 39.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1360 components: - type: Transform rot: 3.141592653589793 rad pos: 40.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1886 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1915 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1936 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1937 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2229 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2337 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2376 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2557 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2600 components: - type: Transform rot: -1.5707963267948966 rad pos: 57.5,62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2601 components: - type: Transform rot: -1.5707963267948966 rad pos: 57.5,61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2629 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2631 components: - type: Transform pos: 59.5,60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2679 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2682 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2683 components: - type: Transform pos: 58.5,60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2701 components: - type: Transform rot: -1.5707963267948966 rad pos: 57.5,60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2769 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3292 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,29.5 parent: 2 - - uid: 3784 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 60.5,42.5 - parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3811 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3813 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5343 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7116 components: - type: Transform rot: 1.5707963267948966 rad pos: 44.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7119 components: - type: Transform pos: 42.5,35.5 parent: 2 - - uid: 7285 - components: - - type: Transform - pos: 54.5,32.5 - parent: 2 - - uid: 7288 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,32.5 - parent: 2 - - uid: 7289 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 54.5,32.5 - parent: 2 - - uid: 7415 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,42.5 - parent: 2 - - uid: 8456 - components: - - type: Transform - pos: 60.5,42.5 - parent: 2 - - uid: 8457 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.5,42.5 - parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11201 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11202 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11203 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11204 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11205 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11206 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11357 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11358 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11359 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11360 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11361 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11362 components: - type: Transform rot: -1.5707963267948966 rad pos: -6.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Wirecutter entities: - uid: 7520 diff --git a/Resources/Prototypes/Maps/relic.yml b/Resources/Prototypes/Maps/relic.yml index 74476455d1..93b126437f 100644 --- a/Resources/Prototypes/Maps/relic.yml +++ b/Resources/Prototypes/Maps/relic.yml @@ -58,7 +58,7 @@ SecurityCadet: [ 2, 2 ] #intern, not counted Lawyer: [ 1, 1 ] #supply (0) - #civilian (1+) + #civilian (0+) Passenger: [ -1, -1 ] #infinite, not counted #silicon (1) StationAi: [ 1, 1 ] diff --git a/Resources/Prototypes/Parallaxes/relic.yml b/Resources/Prototypes/Parallaxes/relic.yml index ba72af7ace..bc0be872d5 100644 --- a/Resources/Prototypes/Parallaxes/relic.yml +++ b/Resources/Prototypes/Parallaxes/relic.yml @@ -5,5 +5,5 @@ !type:ImageParallaxTextureSource path: "/Textures/Parallaxes/oldspace.png" slowness: 0.0 - scrolling: "-0.25, 0" + scrolling: "-0.125, 0" scale: "1, 1" diff --git a/Resources/Textures/Parallaxes/oldspace.png b/Resources/Textures/Parallaxes/oldspace.png index 7960ffaf44fc5ad95e7649fa8bd27b515b5331ce..09836bc36546563fa357964fc2aa3709e0c8c5f7 100644 GIT binary patch delta 463 zcmV;=0WkiS2A>CzNeaOL01m+cxRGn^u~U`-f1yc4K~z{r#h1;UgdhyX-`In;;Mp2z zff_7>gJn>|v_K7>X~8CTFN+i32E>n<`Jep7Xvj+f`e@ts2RGuJ!!%7BTZ|EX-*0Tm z?~xWT3YBN0yU!yE;HAjU9)Shf-*eHG{6*9>3}~)e6v3<(2>d002ovPDHLk FV1lU1-cJAk delta 325 zcmV-L0lNO52bKnqNeaRM01mRl^k*h2{R3`l7AgO#5I^uUyXS}bi% zoFYIAB0un+)q)ypt$YaJ7L{n$wt$EaYrzqkYu~uU0qr7dcA(e&aESvN;$* zpG))J?*K1Yk(_HG3vjMZix#XJ@~rE+FYZS=BApW{D>(x_elA-0uMld%l5Et_zE$!9 XU-Wa{>Jy{r00000NkvXXu0mjf7+;Jt From d3771a19e2502dfda94cdec325a87c26551d3bb1 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 17:01:09 +0000 Subject: [PATCH 097/216] Automatic changelog update --- Resources/Changelog/Maps.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index aa47fbf146..6907277fb8 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -749,4 +749,12 @@ id: 90 time: '2025-10-07T02:21:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40725 +- author: Vortebo + changes: + - message: On Relic, some small changes to address unintended gameplay issues and + further increase historical accuracy. + type: Tweak + id: 91 + time: '2025-10-08T16:59:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40537 Order: 1 From 02ada04eb4f2cf69fdc1aee7999bc103e452adc3 Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Wed, 8 Oct 2025 15:30:16 -0500 Subject: [PATCH 098/216] Removed wardens enforcer from box (#40785) box shotgun gone :dejected: --- Resources/Maps/box.yml | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/Resources/Maps/box.yml b/Resources/Maps/box.yml index 1eaa100643..7fbf46f2bf 100644 --- a/Resources/Maps/box.yml +++ b/Resources/Maps/box.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 266.0.0 + engineVersion: 267.2.0 forkId: "" forkVersion: "" - time: 09/06/2025 03:51:25 - entityCount: 28793 + time: 10/08/2025 20:15:18 + entityCount: 28790 maps: - 780 grids: @@ -10936,8 +10936,8 @@ entities: id: docking46345 localAnchorB: -0.5,-1 localAnchorA: -66.5,22 - damping: 42.40102 - stiffness: 380.5907 + damping: 42.401035 + stiffness: 380.59082 - type: OccluderTree - type: Shuttle dampingModifier: 0.25 @@ -23112,18 +23112,6 @@ entities: - type: Transform pos: 7.3923097,47.786827 parent: 8364 -- proto: BoxShotgunSlug - entities: - - uid: 7852 - components: - - type: Transform - pos: -7.2934785,34.60984 - parent: 8364 - - uid: 9144 - components: - - type: Transform - pos: -7.289858,34.610893 - parent: 8364 - proto: BoxSterileMask entities: - uid: 5467 @@ -182974,15 +182962,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage -- proto: WeaponShotgunEnforcer - entities: - - uid: 9086 - components: - - type: Transform - pos: -7.4221897,34.38881 - parent: 8364 - - type: BallisticAmmoProvider - proto: ShellShotgunSlug - proto: WeaponShotgunKammerer entities: - uid: 26308 From 0039dff91fe5da9bcfb303ebcbb9ff1ab556adc1 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 20:42:56 +0000 Subject: [PATCH 099/216] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 6907277fb8..6d59319598 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -757,4 +757,11 @@ id: 91 time: '2025-10-08T16:59:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40537 +- author: ToastEnjoyer + changes: + - message: On box, the wardens enforcer has been removed from their office. + type: Remove + id: 92 + time: '2025-10-08T20:41:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40785 Order: 1 From df6307fe66f71944c5b3d5ed1e683a2723953181 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Wed, 8 Oct 2025 23:48:52 +0200 Subject: [PATCH 100/216] Allow more energy projectiles to hit holo creatures (#40782) * Allow more energy projectiles to hit holo creatures. * Disabler SMG --- .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 49b9989730..bc9f40f85a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -211,8 +211,9 @@ bounds: "-0.15,-0.45,0.15,0.15" hard: false mask: - - Impassable - - BulletImpassable + - Opaque + - Impassable + - BulletImpassable fly-by: *flybyfixture - type: Ammo - type: Projectile @@ -289,6 +290,7 @@ bounds: "-0.15,-0.3,0.15,0.3" hard: false mask: + - Opaque - Impassable - BulletImpassable fly-by: *flybyfixture @@ -329,6 +331,7 @@ bounds: "-0.15,-0.3,0.15,0.3" hard: false mask: + - Opaque - Impassable - BulletImpassable fly-by: *flybyfixture @@ -408,6 +411,7 @@ bounds: "-0.2,-0.2,0.2,0.2" hard: false mask: + - Opaque - Impassable - BulletImpassable fly-by: *flybyfixture @@ -1141,6 +1145,7 @@ bounds: "-0.15,-0.3,0.15,0.3" hard: false mask: + - Opaque - Impassable - BulletImpassable fly-by: *flybyfixture From 6a3a54535b9e5bd42f3778daa6045a0ff11a52e5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 22:00:47 +0000 Subject: [PATCH 101/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 93f0799741..98168fd5ff 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,16 +1,4 @@ Entries: -- author: ArtisticRoomba - changes: - - message: Tesla coils can now hold a max capacity of 5 MJ, and receive 5 MJ of - energy when struck by lightning. - type: Tweak - - message: Tesla coils can now only output a maximum of 350 kW to the grid. This - was done to make power flow smoother (it was triggering epilepsy in extreme - circumstances). - type: Tweak - id: 8554 - time: '2025-05-22T01:39:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37626 - author: Wolfkey-SomeoneElseTookMyUsername changes: - message: You can now construct disposal signalers, which trigger a signal every @@ -3960,3 +3948,10 @@ id: 9056 time: '2025-10-08T15:49:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39920 +- author: SlamBamActionman + changes: + - message: Disablers, temperature guns and tasers can now hit holo mobs. + type: Fix + id: 9057 + time: '2025-10-08T21:59:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40782 From c54fb47f7c7aacd1132d6634576f1b7d81fc2123 Mon Sep 17 00:00:00 2001 From: Centronias Date: Wed, 8 Oct 2025 15:17:11 -0700 Subject: [PATCH 102/216] Wrapped Parcels can be labelled with Papers (#40783) * labels * oop * Update Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml --- .../Entities/Objects/Misc/parcel_wrap.yml | 26 ++++++++++++++++++ .../ParcelWrap/paper_labels.rsi/bounty.png | Bin 0 -> 202 bytes .../paper_labels.rsi/captains_paper.png | Bin 0 -> 202 bytes .../ParcelWrap/paper_labels.rsi/invoice.png | Bin 0 -> 202 bytes .../ParcelWrap/paper_labels.rsi/meta.json | 23 ++++++++++++++++ .../ParcelWrap/paper_labels.rsi/paper.png | Bin 0 -> 195 bytes 6 files changed, 49 insertions(+) create mode 100644 Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/bounty.png create mode 100644 Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/captains_paper.png create mode 100644 Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/invoice.png create mode 100644 Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/meta.json create mode 100644 Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/paper.png diff --git a/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml b/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml index 58455ba211..61d8452b93 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml @@ -38,6 +38,7 @@ - type: ContainerContainer containers: contents: !type:ContainerSlot + paper_label: !type:ContainerSlot - type: Appearance - type: GenericVisualizer visuals: @@ -49,11 +50,25 @@ "Large": { state: "parcel-medium" } "Huge": { state: "parcel-large" } "Ginormous": { state: "parcel-large" } + enum.PaperLabelVisuals.HasLabel: + enum.PaperLabelVisuals.Layer: + True: { visible: true } + False: { visible: false } + enum.PaperLabelVisuals.LabelType: + enum.PaperLabelVisuals.Layer: + Paper: { state: paper } + Bounty: { state: bounty } + CaptainsPaper: { state: captains_paper } + Invoice: { state: invoice } - type: Sprite sprite: Objects/Misc/ParcelWrap/wrapped_parcel.rsi layers: - state: parcel-medium map: [ "enum.WrappedParcelVisuals.Layer" ] + - state: paper + visible: false + sprite: Objects/Misc/ParcelWrap/paper_labels.rsi + map: ["enum.PaperLabelVisuals.Layer"] - type: WrappedParcel unwrapDelay: 0.5 unwrapSound: @@ -61,6 +76,17 @@ params: volume: -4 unwrapTrash: ParcelWrapTrash + - type: ItemSlots + - type: PaperLabel + labelSlot: + insertVerbText: comp-paper-label-insert + ejectVerbText: comp-paper-label-eject + whitelist: + components: + - Paper + blacklist: + tags: + - Book - type: Damageable damageContainer: Inorganic - type: Destructible diff --git a/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/bounty.png b/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/bounty.png new file mode 100644 index 0000000000000000000000000000000000000000..8b44d0e52b59f2c03079f990861e74507167eb94 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY;~ z2@_BrPuWrQnD_AU^Y)tCX6Ueg_`J#3;`YhIvd-n~HGlq0et7L}IZyxmy0iz+ tQgrLu~Le6ae@OQgZgv11)Uc|#DVT%@O1TaS?83{1OO!xOMCzT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/captains_paper.png b/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/captains_paper.png new file mode 100644 index 0000000000000000000000000000000000000000..b02ea9c4a574f1d6590b74025f755b2aa9f421ee GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY;~ z2@q;r!#R(3K46)*JM`rM)Yz4Z9!PC{xWt~$(697OPOQZk* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/invoice.png b/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/invoice.png new file mode 100644 index 0000000000000000000000000000000000000000..2089996fdb100202acc5368543dda2303ef07953 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}EuJopArY;~ z2@H?-MV*81@GbAOR&pJ~h%l|Lo6%#C^2w{SP}zWRShK0Ny7+qS)5-mu`) tr@*6(DoYt>EH#R<3h8YNG+4mEkbPY41nVT-44``$JYD@<);T3K0RUS&Oilm* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/meta.json b/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/meta.json new file mode 100644 index 0000000000..4136d89ef0 --- /dev/null +++ b/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original sprites by Vermidia and modified by SpaceRox1244; manual offset applied by Centronias", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "paper" + }, + { + "name": "bounty" + }, + { + "name": "captains_paper" + }, + { + "name": "invoice" + } + ] +} diff --git a/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/paper.png b/Resources/Textures/Objects/Misc/ParcelWrap/paper_labels.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f977302cb4b53588ae04f520e5c5d55a5ca1ef GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}wVp1HArY-_ zFKy&)P!M6ca5>_!k`>$UfR{W$8)uts$vF`3pzZ6U;m~RJ-ReYZ{YiEOB_LQd-*l&A z@|k(N%Fm_lpLl6%%k#`#bH%gopJ8LzqWVyysr0shYaD-F$bxXLsMo8{JZD|RvFAI7 r;)3v1UX6?F3;1N)7rv5u5zcPLD7Wi5!%kbELl`_={an^LB{Ts5ohV13 literal 0 HcmV?d00001 From 61f7d3438d884cedcc83818f48a2b3bc9234d6ad Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 22:29:05 +0000 Subject: [PATCH 103/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 98168fd5ff..c62375f630 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Wolfkey-SomeoneElseTookMyUsername - changes: - - message: You can now construct disposal signalers, which trigger a signal every - time an item passes through them. - type: Add - id: 8555 - time: '2025-05-22T02:18:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37535 - author: ScarKy0 changes: - message: The "Escape alive and unrestrained" objective now counts as partially @@ -3955,3 +3947,10 @@ id: 9057 time: '2025-10-08T21:59:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40782 +- author: Centronias + changes: + - message: You can now attach paper labels to wrapped parcels. + type: Add + id: 9058 + time: '2025-10-08T22:27:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40783 From 72852accbe729a45517c57975265ab10ec14d6f3 Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Wed, 8 Oct 2025 18:34:48 -0500 Subject: [PATCH 104/216] Remove enforcer from fland (#40786) --- Resources/Maps/fland.yml | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/Resources/Maps/fland.yml b/Resources/Maps/fland.yml index 2551bd58ff..bcb5673b42 100644 --- a/Resources/Maps/fland.yml +++ b/Resources/Maps/fland.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 267.1.0 + engineVersion: 267.2.0 forkId: "" forkVersion: "" - time: 09/24/2025 21:56:25 - entityCount: 36083 + time: 10/08/2025 23:22:51 + entityCount: 36080 maps: - 1 grids: @@ -30897,11 +30897,6 @@ entities: - type: Transform pos: 16.61324,11.471256 parent: 13329 - - uid: 10642 - components: - - type: Transform - pos: 31.342075,13.304442 - parent: 13329 - uid: 18486 components: - type: Transform @@ -31282,11 +31277,6 @@ entities: - type: Transform pos: 16.446573,11.429589 parent: 13329 - - uid: 9340 - components: - - type: Transform - pos: 31.685825,13.288817 - parent: 13329 - proto: BoxLightMixed entities: - uid: 1644 @@ -227061,13 +227051,6 @@ entities: - type: Transform pos: 19.469765,12.608503 parent: 13329 -- proto: WeaponShotgunEnforcer - entities: - - uid: 9339 - components: - - type: Transform - pos: 31.498325,13.851317 - parent: 13329 - proto: WeaponShotgunHandmade entities: - uid: 5418 From ef0c9ecc6350d4d6bcf9c8ad9013724688dbcae3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 8 Oct 2025 23:47:04 +0000 Subject: [PATCH 105/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c62375f630..c9ee074fba 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: ScarKy0 - changes: - - message: The "Escape alive and unrestrained" objective now counts as partially - complete if you show up handcuffed. Being dead still has it count as a total - fail! - type: Tweak - id: 8556 - time: '2025-05-22T03:25:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37680 - author: EmoGarbage404 changes: - message: Added cargo orders for gold and silver ingots. @@ -3954,3 +3945,10 @@ id: 9058 time: '2025-10-08T22:27:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40783 +- author: ToastEnjoyer + changes: + - message: On fland, the wardens enforcer has been removed. + type: Remove + id: 9059 + time: '2025-10-08T23:45:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40786 From 8e3243a15648077aad082d5fc299e71d5267defe Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Thu, 9 Oct 2025 07:03:11 +0200 Subject: [PATCH 106/216] Fix changeling blindness (#40517) fix changeling blindness --- .../Traits/Assorted/PermanentBlindnessSystem.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Traits/Assorted/PermanentBlindnessSystem.cs b/Content.Shared/Traits/Assorted/PermanentBlindnessSystem.cs index a99a12d0fd..e060de7dd9 100644 --- a/Content.Shared/Traits/Assorted/PermanentBlindnessSystem.cs +++ b/Content.Shared/Traits/Assorted/PermanentBlindnessSystem.cs @@ -2,7 +2,6 @@ using Content.Shared.Eye.Blinding.Components; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.IdentityManagement; -using Robust.Shared.Network; namespace Content.Shared.Traits.Assorted; @@ -38,18 +37,23 @@ public sealed class PermanentBlindnessSystem : EntitySystem { _blinding.SetMinDamage((blindness.Owner, blindable), 0); } + + // Heal all eye damage when the component is removed. + // Otherwise you would still be blind, but not *permanently* blind, meaning you have to heal the eye damage with oculine. + // This is needed for changelings that transform from a blind player to a non-blind one. + _blinding.AdjustEyeDamage((blindness.Owner, blindable), -blindable.EyeDamage); } private void OnMapInit(Entity blindness, ref MapInitEvent args) { - if(!TryComp(blindness.Owner, out var blindable)) + if (!TryComp(blindness.Owner, out var blindable)) return; if (blindness.Comp.Blindness != 0) _blinding.SetMinDamage((blindness.Owner, blindable), blindness.Comp.Blindness); else { - var maxMagnitudeInt = (int) BlurryVisionComponent.MaxMagnitude; + var maxMagnitudeInt = (int)BlurryVisionComponent.MaxMagnitude; _blinding.SetMinDamage((blindness.Owner, blindable), maxMagnitudeInt); } } From 6f3f7d86b807780318d18b5686afc32a657ccdbc Mon Sep 17 00:00:00 2001 From: Connor Huffine Date: Thu, 9 Oct 2025 01:14:41 -0400 Subject: [PATCH 107/216] Fix terminology (#40792) c20r magazine description changed to "SMG" --- Resources/Locale/en-US/store/uplink-catalog.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 8eecfad339..65104c7918 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -91,7 +91,7 @@ uplink-pistol-magazine-name = Pistol Magazine (.35 auto) uplink-pistol-magazine-desc = Pistol magazine with 10 cartridges. Compatible with the Viper. uplink-pistol-magazine-c20r-name = SMG magazine (.35 auto) -uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 cartridges. Compatible with C-20r. +uplink-pistol-magazine-c20r-desc = SMG magazine with 30 cartridges. Compatible with C-20r. uplink-magazine-bulldog-pellet-name = Drum magazine (.50 pellet) uplink-magazine-bulldog-pellet-desc = Shotgun magazine with 8 shells filled with buckshot. Compatible with the Bulldog. From bb3fa43f1f6ff133501bb298b4bb95407427159f Mon Sep 17 00:00:00 2001 From: thetuerk <46725294+ThanosDeGraf@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:26:21 +0200 Subject: [PATCH 108/216] Predict LungSystem (#40729) * Initial edits of files Untested yet. I would like to make sure all is accounted for before moving the files. * trying my best * Revert "trying my best" This reverts commit 9aeece466df0169adec97e3947b061b54fd9b388. * Revert "Initial edits of files" This reverts commit 45c6e2343844b5fcafadbf2e5115fb2f241086a1. * an actual meal * Added networking to LungComponent.cs * removed duplicate using * moving GasRagents to SharedAtmosphereSystem.cs --- Content.IntegrationTests/Tests/Body/LungTest.cs | 2 +- .../Atmos/EntitySystems/AtmosphereSystem.Gases.cs | 3 --- Content.Server/Body/Systems/RespiratorSystem.cs | 1 + .../Atmos/EntitySystems/SharedAtmosphereSystem.cs | 3 +++ .../Body/Components/LungComponent.cs | 7 ++++--- .../Body/Systems/LungSystem.cs | 13 ++++++------- 6 files changed, 15 insertions(+), 14 deletions(-) rename {Content.Server => Content.Shared}/Body/Components/LungComponent.cs (84%) rename {Content.Server => Content.Shared}/Body/Systems/LungSystem.cs (86%) diff --git a/Content.IntegrationTests/Tests/Body/LungTest.cs b/Content.IntegrationTests/Tests/Body/LungTest.cs index 8ac3a3021f..584eb58595 100644 --- a/Content.IntegrationTests/Tests/Body/LungTest.cs +++ b/Content.IntegrationTests/Tests/Body/LungTest.cs @@ -1,7 +1,7 @@ using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Components; -using Content.Server.Body.Systems; +using Content.Shared.Body.Systems; using Content.Shared.Body.Components; using Robust.Server.GameObjects; using Robust.Shared; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs index c545186669..0c6a3a7daa 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs @@ -25,8 +25,6 @@ namespace Content.Server.Atmos.EntitySystems /// public float[] GasSpecificHeats => _gasSpecificHeats; - public string?[] GasReagents = new string[Atmospherics.TotalNumberOfGases]; - private void InitializeGases() { _gasReactions = _protoMan.EnumeratePrototypes().ToArray(); @@ -37,7 +35,6 @@ namespace Content.Server.Atmos.EntitySystems for (var i = 0; i < GasPrototypes.Length; i++) { _gasSpecificHeats[i] = GasPrototypes[i].SpecificHeat / HeatScale; - GasReagents[i] = GasPrototypes[i].Reagent; } } diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index eab3e2e56c..63b04adc6a 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -3,6 +3,7 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Components; using Content.Server.Chat.Systems; using Content.Server.EntityEffects; +using Content.Shared.Body.Systems; using Content.Shared.Alert; using Content.Shared.Atmos; using Content.Shared.Body.Components; diff --git a/Content.Shared/Atmos/EntitySystems/SharedAtmosphereSystem.cs b/Content.Shared/Atmos/EntitySystems/SharedAtmosphereSystem.cs index 4698939734..4a177e6263 100644 --- a/Content.Shared/Atmos/EntitySystems/SharedAtmosphereSystem.cs +++ b/Content.Shared/Atmos/EntitySystems/SharedAtmosphereSystem.cs @@ -13,6 +13,8 @@ namespace Content.Shared.Atmos.EntitySystems private EntityQuery _internalsQuery; + public string?[] GasReagents = new string[Atmospherics.TotalNumberOfGases]; + protected readonly GasPrototype[] GasPrototypes = new GasPrototype[Atmospherics.TotalNumberOfGases]; public override void Initialize() @@ -26,6 +28,7 @@ namespace Content.Shared.Atmos.EntitySystems for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) { GasPrototypes[i] = _prototypeManager.Index(i.ToString()); + GasReagents[i] = GasPrototypes[i].Reagent; } } diff --git a/Content.Server/Body/Components/LungComponent.cs b/Content.Shared/Body/Components/LungComponent.cs similarity index 84% rename from Content.Server/Body/Components/LungComponent.cs rename to Content.Shared/Body/Components/LungComponent.cs index 4fb769d670..dd31de7722 100644 --- a/Content.Server/Body/Components/LungComponent.cs +++ b/Content.Shared/Body/Components/LungComponent.cs @@ -1,12 +1,13 @@ -using Content.Server.Body.Systems; +using Content.Shared.Body.Systems; using Content.Shared.Alert; using Content.Shared.Atmos; using Content.Shared.Chemistry.Components; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -namespace Content.Server.Body.Components; +namespace Content.Shared.Body.Components; -[RegisterComponent, Access(typeof(LungSystem))] +[RegisterComponent, NetworkedComponent, Access(typeof(LungSystem))] public sealed partial class LungComponent : Component { [DataField] diff --git a/Content.Server/Body/Systems/LungSystem.cs b/Content.Shared/Body/Systems/LungSystem.cs similarity index 86% rename from Content.Server/Body/Systems/LungSystem.cs rename to Content.Shared/Body/Systems/LungSystem.cs index fdc071c5f1..5f4c1ee4ef 100644 --- a/Content.Server/Body/Systems/LungSystem.cs +++ b/Content.Shared/Body/Systems/LungSystem.cs @@ -1,19 +1,18 @@ -using Content.Server.Atmos.EntitySystems; -using Content.Server.Body.Components; +using Content.Shared.Atmos.Components; +using Content.Shared.Atmos.EntitySystems; +using Content.Shared.Body.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Atmos; using Content.Shared.Chemistry.Components; using Content.Shared.Clothing; using Content.Shared.Inventory.Events; -using BreathToolComponent = Content.Shared.Atmos.Components.BreathToolComponent; -using InternalsComponent = Content.Shared.Body.Components.InternalsComponent; -namespace Content.Server.Body.Systems; +namespace Content.Shared.Body.Systems; public sealed class LungSystem : EntitySystem { - [Dependency] private readonly AtmosphereSystem _atmos = default!; - [Dependency] private readonly InternalsSystem _internals = default!; + [Dependency] private readonly SharedAtmosphereSystem _atmos = default!; + [Dependency] private readonly SharedInternalsSystem _internals = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; public static string LungSolutionName = "Lung"; From 1f1461b9db6b74bd353819ee1393b5355730706b Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Thu, 9 Oct 2025 13:59:43 +0200 Subject: [PATCH 109/216] Update Mind Shielding section in Space Law (#40647) * Update Mind Shielding section in Space Law * Formatting --- .../ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml index 25ccac38f6..917483b10a 100644 --- a/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml +++ b/Resources/ServerInfo/Guidebook/ServerRules/SpaceLaw/SpaceLaw.xml @@ -25,7 +25,11 @@ [color=#a4885c]Tracking Implants:[/color] Trackers can be applied to any suspect that has been convicted of a violent crime (the red linked crimes). - [color=#a4885c]Mind Shields:[/color] Shields can be administered to any inmate who has been clearly mind controlled, lost control of themselves, or a suspect charged with unlawful control. Unlike standard implantation you may hold a prisoner until you finish issuing Mind Shields, so long as it's done in a timely fashion. If a suspect refuses to cooperate or the implant fails to function they can be charged with Refusal of Mental Shielding. + [color=#a4885c]Mind Shields:[/color] Mind Shields can be administered to any suspect charged with a crime if there is reasonable and articulable suspicion to believe they committed the crime while under mind control. If there is undeniable proof of ongoing mind control on the station, such as a successful deconversion, all the following statements apply: + + - Crew can be required to be shielded and may be forcibly implanted if they refuse. + - If a suspect refuses to cooperate or the implant fails to function they can be charged with Refusal of Mental Shielding. + - Unlike standard implantation you may indefinitely extend the duration of a prisoner's sentence until you finish issuing Mind Shields, so long as active attempts are made to procure implants and complete the implantation procedure. Usage of contraband implanters is a detainable offense, but it's not reasonable to detain someone solely for having an unidentified implant inside them. From fea8ac45228f18ee7ad213560044a444a2c981e8 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:00:13 +0200 Subject: [PATCH 110/216] Change whitelist logic for parcel wrap (#40800) * init * review --- .../ParcelWrap/Systems/ParcelWrappingSystem.cs | 3 +-- .../Prototypes/Entities/Objects/Misc/parcel_wrap.yml | 11 +++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.cs b/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.cs index b19f4b845c..7ea6daeed8 100644 --- a/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.cs +++ b/Content.Shared/ParcelWrap/Systems/ParcelWrappingSystem.cs @@ -51,7 +51,6 @@ public sealed partial class ParcelWrappingSystem : EntitySystem wrapper.Owner != target && // Wrapper should never be empty, but may as well make sure. !_charges.IsEmpty(wrapper.Owner) && - _whitelist.IsWhitelistPass(wrapper.Comp.Whitelist, target) && - _whitelist.IsBlacklistFail(wrapper.Comp.Blacklist, target); + _whitelist.CheckBoth(target, wrapper.Comp.Blacklist, wrapper.Comp.Whitelist); } } diff --git a/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml b/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml index 61d8452b93..8d7baa4339 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/parcel_wrap.yml @@ -28,6 +28,17 @@ - type: LimitedCharges maxCharges: 30 +- type: entity + parent: ParcelWrap + id: ParcelWrapAdmeme + name: bluespace wrap + suffix: Admeme + description: Paper used contain items for transport. This one seems to be able to store an unusual amount of space within it. + components: + - type: ParcelWrap + whitelist: null + blacklist: null + - type: entity parent: BaseItem id: WrappedParcel From dac2c5212ae1c5f230f04dc31e7ade293dc8dcae Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Fri, 10 Oct 2025 02:03:44 +1300 Subject: [PATCH 111/216] Add generic event listener for integration tests (#40367) * Add generic event listener for integration tests * cleanup * assert that the entity has the component * comments & new overload --- .../Tests/Helpers/TestListenerComponent.cs | 13 ++ .../Tests/Helpers/TestListenerSystem.cs | 45 ++++++ .../Interaction/InteractionTest.Helpers.cs | 138 ++++++++++++++++++ .../Tests/Movement/SlippingTest.cs | 32 ++-- 4 files changed, 205 insertions(+), 23 deletions(-) create mode 100644 Content.IntegrationTests/Tests/Helpers/TestListenerComponent.cs create mode 100644 Content.IntegrationTests/Tests/Helpers/TestListenerSystem.cs diff --git a/Content.IntegrationTests/Tests/Helpers/TestListenerComponent.cs b/Content.IntegrationTests/Tests/Helpers/TestListenerComponent.cs new file mode 100644 index 0000000000..817558b426 --- /dev/null +++ b/Content.IntegrationTests/Tests/Helpers/TestListenerComponent.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Robust.Shared.GameObjects; + +namespace Content.IntegrationTests.Tests.Helpers; + +/// +/// Component that is used by to store any information about received events. +/// +[RegisterComponent] +public sealed partial class TestListenerComponent : Component +{ + public Dictionary> Events = new(); +} diff --git a/Content.IntegrationTests/Tests/Helpers/TestListenerSystem.cs b/Content.IntegrationTests/Tests/Helpers/TestListenerSystem.cs new file mode 100644 index 0000000000..2481cef03f --- /dev/null +++ b/Content.IntegrationTests/Tests/Helpers/TestListenerSystem.cs @@ -0,0 +1,45 @@ +#nullable enable +using System.Collections.Generic; +using System.Linq; +using Robust.Shared.GameObjects; +using Robust.Shared.Utility; + +namespace Content.IntegrationTests.Tests.Helpers; + +/// +/// Generic system that listens for and records any received events of a given type. +/// +public abstract class TestListenerSystem : EntitySystem where TEvent : notnull +{ + public override void Initialize() + { + // TODO + // supporting broadcast events requires cleanup on test finish, which will probably require changes to the + // test pair/pool manager and would conflict with #36797 + SubscribeLocalEvent(OnDirectedEvent); + } + + protected virtual void OnDirectedEvent(Entity ent, ref TEvent args) + { + ent.Comp.Events.GetOrNew(args.GetType()).Add(args); + } + + public int Count(EntityUid uid, Func? predicate = null) + { + return GetEvents(uid, predicate).Count(); + } + + public void Clear(EntityUid uid) + { + CompOrNull(uid)?.Events.Remove(typeof(TEvent)); + } + + public IEnumerable GetEvents(EntityUid uid, Func? predicate = null) + { + var events = CompOrNull(uid)?.Events.GetValueOrDefault(typeof(TEvent)); + if (events == null) + return []; + + return events.Cast().Where(e => predicate?.Invoke(e) ?? true); + } +} diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs index fa16730dd5..d04ed4cb3c 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Numerics; using System.Reflection; using Content.Client.Construction; +using Content.IntegrationTests.Tests.Helpers; using Content.Server.Atmos.EntitySystems; using Content.Server.Construction.Components; using Content.Server.Gravity; @@ -22,6 +23,8 @@ using Robust.Shared.Input; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Maths; +using Robust.Shared.Reflection; +using Robust.UnitTesting; using ItemToggleComponent = Content.Shared.Item.ItemToggle.Components.ItemToggleComponent; namespace Content.IntegrationTests.Tests.Interaction; @@ -29,6 +32,8 @@ namespace Content.IntegrationTests.Tests.Interaction; // This partial class defines various methods that are useful for performing & validating interactions public abstract partial class InteractionTest { + private Dictionary _listenerCache = new(); + /// /// Begin constructing an entity. /// @@ -758,6 +763,139 @@ public abstract partial class InteractionTest #endregion + #region EventListener + + /// + /// Asserts that running the given action causes an event to be fired directed at the specified entity (defaults to ). + /// + /// + /// This currently only checks server-side events. + /// + /// The entity at which the events are supposed to be directed + /// How many new events are expected + /// Whether to clear all previously recorded events before invoking the delegate + protected async Task AssertFiresEvent(Func act, EntityUid? uid = null, int count = 1, bool clear = true) + where TEvent : notnull + { + var sys = GetListenerSystem(); + + uid ??= STarget; + if (uid == null) + { + Assert.Fail("No target specified"); + return; + } + + if (clear) + sys.Clear(uid.Value); + else + count += sys.Count(uid.Value); + + await Server.WaitPost(() => SEntMan.EnsureComponent(uid.Value)); + await act(); + AssertEvent(uid, count: count); + } + + /// + /// This is a variant of that passes the delegate to . + /// + /// + /// This currently only checks for server-side events. + /// + /// The entity at which the events are supposed to be directed + /// How many new events are expected + /// Whether to clear all previously recorded events before invoking the delegate + protected async Task AssertPostFiresEvent(Action act, EntityUid? uid = null, int count = 1, bool clear = true) + where TEvent : notnull + { + await AssertFiresEvent(async () => await Server.WaitPost(act), uid, count, clear); + } + + /// + /// This is a variant of that passes the delegate to . + /// + /// + /// This currently only checks for server-side events. + /// + /// The entity at which the events are supposed to be directed + /// How many new events are expected + /// Whether to clear all previously recorded events before invoking the delegate + protected async Task AssertAssertionFiresEvent(Action act, + EntityUid? uid = null, + int count = 1, + bool clear = true) + where TEvent : notnull + { + await AssertFiresEvent(async () => await Server.WaitAssertion(act), uid, count, clear); + } + + /// + /// Asserts that the specified event has been fired some number of times at the given entity (defaults to ). + /// For this to work, this requires that the entity has been given a + /// + /// + /// This currently only checks server-side events. + /// + /// The entity at which the events were directed + /// How many new events are expected + /// A predicate that can be used to filter the recorded events + protected void AssertEvent(EntityUid? uid = null, int count = 1, Func? predicate = null) + where TEvent : notnull + { + Assert.That(GetEvents(uid, predicate).Count, Is.EqualTo(count)); + } + + /// + /// Gets all the events of the specified type that have been fired at the given entity (defaults to ). + /// For this to work, this requires that the entity has been given a + /// + /// + /// This currently only gets for server-side events. + /// + /// The entity at which the events were directed + /// A predicate that can be used to filter the returned events + protected IEnumerable GetEvents(EntityUid? uid = null, Func? predicate = null) + where TEvent : notnull + { + uid ??= STarget; + if (uid == null) + { + Assert.Fail("No target specified"); + return []; + } + + Assert.That(SEntMan.HasComponent(uid), $"Entity must have {nameof(TestListenerComponent)}"); + return GetListenerSystem().GetEvents(uid.Value, predicate); + } + + protected TestListenerSystem GetListenerSystem() + where TEvent : notnull + { + if (_listenerCache.TryGetValue(typeof(TEvent), out var listener)) + return (TestListenerSystem) listener; + + var type = Server.Resolve().GetAllChildren>().Single(); + if (!SEntMan.EntitySysManager.TryGetEntitySystem(type, out var systemObj)) + { + // There has to be a listener system that is manually defined. Event subscriptions are locked once + // finalized, so we can't really easily create new subscriptions on the fly. + // TODO find a better solution + throw new InvalidOperationException($"Event {typeof(TEvent).Name} has no associated listener system!"); + } + + var system = (TestListenerSystem)systemObj; + _listenerCache[typeof(TEvent)] = system; + return system; + } + + /// + /// Clears all recorded events of the given type. + /// + protected void ClearEvents(EntityUid uid) where TEvent : notnull + => GetListenerSystem().Clear(uid); + + #endregion + #region Entity lookups /// diff --git a/Content.IntegrationTests/Tests/Movement/SlippingTest.cs b/Content.IntegrationTests/Tests/Movement/SlippingTest.cs index 7ee895d7c2..92e4d2471e 100644 --- a/Content.IntegrationTests/Tests/Movement/SlippingTest.cs +++ b/Content.IntegrationTests/Tests/Movement/SlippingTest.cs @@ -1,10 +1,8 @@ #nullable enable -using System.Collections.Generic; -using Content.IntegrationTests.Tests.Interaction; +using Content.IntegrationTests.Tests.Helpers; using Content.Shared.Movement.Components; using Content.Shared.Slippery; using Content.Shared.Stunnable; -using Robust.Shared.GameObjects; using Robust.Shared.Input; using Robust.Shared.Maths; @@ -12,44 +10,32 @@ namespace Content.IntegrationTests.Tests.Movement; public sealed class SlippingTest : MovementTest { - public sealed class SlipTestSystem : EntitySystem - { - public HashSet Slipped = new(); - public override void Initialize() - { - SubscribeLocalEvent(OnSlip); - } - - private void OnSlip(EntityUid uid, SlipperyComponent component, ref SlipEvent args) - { - Slipped.Add(args.Slipped); - } - } + public sealed class SlipTestSystem : TestListenerSystem; [Test] public async Task BananaSlipTest() { - var sys = SEntMan.System(); await SpawnTarget("TrashBananaPeel"); var modifier = Comp(Player).SprintSpeedModifier; Assert.That(modifier, Is.EqualTo(1), "Player is not moving at full speed."); - // Player is to the left of the banana peel and has not slipped. + // Player is to the left of the banana peel. Assert.That(Delta(), Is.GreaterThan(0.5f)); - Assert.That(sys.Slipped, Does.Not.Contain(SEntMan.GetEntity(Player))); // Walking over the banana slowly does not trigger a slip. await SetKey(EngineKeyFunctions.Walk, BoundKeyState.Down); - await Move(DirectionFlag.East, 1f); + await AssertFiresEvent(async () => await Move(DirectionFlag.East, 1f), count: 0); + Assert.That(Delta(), Is.LessThan(0.5f)); - Assert.That(sys.Slipped, Does.Not.Contain(SEntMan.GetEntity(Player))); AssertComp(false, Player); // Moving at normal speeds does trigger a slip. await SetKey(EngineKeyFunctions.Walk, BoundKeyState.Up); - await Move(DirectionFlag.West, 1f); - Assert.That(sys.Slipped, Does.Contain(SEntMan.GetEntity(Player))); + await AssertFiresEvent(async () => await Move(DirectionFlag.West, 1f)); + + // And the person that slipped was the player + AssertEvent(predicate: @event => @event.Slipped == SPlayer); AssertComp(true, Player); } } From 33c0c46b5da5a462d05e267a887b8254e95096ce Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:20:05 +0200 Subject: [PATCH 112/216] Add slowdown to nocturine, buff duration and minor delay reduction (#40797) * Yawn * Remove yawning because it's kind of a nerf tbh * Remove newline * Begone, condition --- Resources/Prototypes/Reagents/narcotics.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index a1b1033a4b..92236d746c 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -289,16 +289,19 @@ meltingPoint: 128.0 metabolisms: Narcotic: - effects: + effects: # It would be nice to have speech slurred or mumbly, but accents are a bit iffy atm. Same for distortion effects. + - !type:MovespeedModifier + walkSpeedModifier: 0.65 + sprintSpeedModifier: 0.65 - !type:ModifyStatusEffect conditions: - !type:ReagentThreshold reagent: Nocturine min: 8 effectProto: StatusEffectForcedSleeping - time: 3 - delay: 6 - type: Add + time: 6 + delay: 5 + type: Update - type: reagent id: MuteToxin From cc4c7f5adacf7d3ba268f1cba40a5110661312d7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 9 Oct 2025 13:33:46 +0000 Subject: [PATCH 113/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c9ee074fba..c0e5ddf40e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Added cargo orders for gold and silver ingots. - type: Add - - message: Reduced prices of cardboard and paper material crate. - type: Tweak - id: 8557 - time: '2025-05-22T08:42:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37713 - author: ArtisticRoomba changes: - message: The volume of large gas canisters have been increased to 1500L to encourage @@ -3952,3 +3943,11 @@ id: 9059 time: '2025-10-08T23:45:56.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40786 +- author: SlamBamActionman + changes: + - message: Nocturine now slows the target down, with a longer duration and shorter + delay before activating. + type: Tweak + id: 9060 + time: '2025-10-09T13:32:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40797 From 3ac94ea7f572b0ce9fbd3ee5cd0937783fd4572b Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Thu, 9 Oct 2025 06:32:43 -0700 Subject: [PATCH 114/216] PRevent the forever sleep. (#40366) * Fix * Rejuvenate --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- Content.Shared/Bed/Sleep/SleepingSystem.cs | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Content.Shared/Bed/Sleep/SleepingSystem.cs b/Content.Shared/Bed/Sleep/SleepingSystem.cs index eca6a8befa..27e11bc878 100644 --- a/Content.Shared/Bed/Sleep/SleepingSystem.cs +++ b/Content.Shared/Bed/Sleep/SleepingSystem.cs @@ -59,6 +59,8 @@ public sealed partial class SleepingSystem : EntitySystem SubscribeLocalEvent(OnZombified); SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnCompInit); + SubscribeLocalEvent(OnComponentRemoved); + SubscribeLocalEvent(OnRejuvenate); SubscribeLocalEvent(OnSpeakAttempt); SubscribeLocalEvent(OnSeeAttempt); SubscribeLocalEvent(OnPointAttempt); @@ -69,7 +71,6 @@ public sealed partial class SleepingSystem : EntitySystem SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent(OnStunEndAttempt); SubscribeLocalEvent(OnStandUpAttempt); - SubscribeLocalEvent(OnRejuvenate); SubscribeLocalEvent(OnStatusEffectApplied); SubscribeLocalEvent(OnUnbuckleAttempt); @@ -102,6 +103,12 @@ public sealed partial class SleepingSystem : EntitySystem TrySleeping((ent, ent.Comp)); } + private void OnRejuvenate(Entity ent, ref RejuvenateEvent args) + { + // WAKE UP!!! + RemComp(ent); + } + /// /// when sleeping component is added or removed, we do some stuff with other components. /// @@ -143,6 +150,16 @@ public sealed partial class SleepingSystem : EntitySystem _actionsSystem.AddAction(ent, ref ent.Comp.WakeAction, WakeActionId, ent); } + private void OnComponentRemoved(Entity ent, ref ComponentRemove args) + { + _actionsSystem.RemoveAction(ent.Owner, ent.Comp.WakeAction); + + var ev = new SleepStateChangedEvent(false); + RaiseLocalEvent(ent, ref ev); + + _blindableSystem.UpdateIsBlind(ent.Owner); + } + private void OnSpeakAttempt(Entity ent, ref SpeakAttemptEvent args) { // TODO reduce duplication of this behavior with MobStateSystem somehow @@ -187,11 +204,6 @@ public sealed partial class SleepingSystem : EntitySystem args.Cancelled = true; } - private void OnRejuvenate(Entity ent, ref RejuvenateEvent args) - { - TryWaking((ent.Owner, ent.Comp), true); - } - private void OnExamined(Entity ent, ref ExaminedEvent args) { if (args.IsInDetailsRange) @@ -275,17 +287,6 @@ public sealed partial class SleepingSystem : EntitySystem TrySleeping(args.Target); } - private void Wake(Entity ent) - { - RemComp(ent); - _actionsSystem.RemoveAction(ent.Owner, ent.Comp.WakeAction); - - var ev = new SleepStateChangedEvent(false); - RaiseLocalEvent(ent, ref ev); - - _blindableSystem.UpdateIsBlind(ent.Owner); - } - /// /// Try sleeping. Only mobs can sleep. /// @@ -345,8 +346,7 @@ public sealed partial class SleepingSystem : EntitySystem _popupSystem.PopupClient(Loc.GetString("wake-other-success", ("target", Identity.Entity(ent, EntityManager))), ent, user); } - Wake((ent, ent.Comp)); - return true; + return RemComp(ent); } /// From 8dd8a334ae50f3eaab0640201df09f99fbc1a414 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 9 Oct 2025 13:47:30 +0000 Subject: [PATCH 115/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c0e5ddf40e..2504b2ecca 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: ArtisticRoomba - changes: - - message: The volume of large gas canisters have been increased to 1500L to encourage - their usage in resolving pressure problems in spaced rooms. The gas that starts - inside of the tanks and the price of them has increased to compensate. - type: Tweak - id: 8558 - time: '2025-05-22T18:12:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37564 - author: Hitlinemoss changes: - message: Liquid soap is now slippery. @@ -3951,3 +3942,10 @@ id: 9060 time: '2025-10-09T13:32:34.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40797 +- author: Princess-Cheeseballs + changes: + - message: Dying while asleep shouldn't permanently blind you anymore. + type: Fix + id: 9061 + time: '2025-10-09T13:46:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40366 From fda846ac85891752ba51df07ca67975165fb5257 Mon Sep 17 00:00:00 2001 From: Connor Huffine Date: Thu, 9 Oct 2025 09:37:09 -0400 Subject: [PATCH 116/216] Move Bulldog Drum to Emag (#40790) * Move Bulldog Drum to Emag Bulldog drum removed from standard techfab Moved to emag listing * Update Resources/Prototypes/Recipes/Lathes/Packs/syndicate.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Prototypes/Entities/Structures/Machines/lathe.yml | 7 +++++++ Resources/Prototypes/Recipes/Lathes/Packs/security.yml | 3 --- Resources/Prototypes/Recipes/Lathes/Packs/syndicate.yml | 9 +++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 Resources/Prototypes/Recipes/Lathes/Packs/syndicate.yml diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 0a933ef1f4..d7fec6aa8c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -136,6 +136,7 @@ - type: EmagLatheRecipes emagStaticPacks: - SecurityAmmoStatic + - SyndicateAmmoStatic - type: BlueprintReceiver whitelist: tags: @@ -406,6 +407,9 @@ - SecurityAmmo - SecurityWeapons - SecurityDisablers + - type: EmagLatheRecipes + emagStaticPacks: + - SyndicateAmmoStatic - type: MaterialStorage whitelist: tags: @@ -442,6 +446,9 @@ runningState: icon staticPacks: - SecurityAmmoStatic + - type: EmagLatheRecipes + emagStaticPacks: + - SyndicateAmmoStatic - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml index 0dc5fe3d90..51058205c4 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/security.yml @@ -49,9 +49,6 @@ - MagazinePistolSubMachineGunTopMountedEmpty - MagazineRifle - MagazineRifleEmpty - - MagazineShotgun - - MagazineShotgunEmpty - - MagazineShotgunSlug - SpeedLoaderMagnum - SpeedLoaderMagnumEmpty diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/syndicate.yml b/Resources/Prototypes/Recipes/Lathes/Packs/syndicate.yml new file mode 100644 index 0000000000..8c87f80780 --- /dev/null +++ b/Resources/Prototypes/Recipes/Lathes/Packs/syndicate.yml @@ -0,0 +1,9 @@ +## Static recipes + +# Added to emagged autolathe +- type: latheRecipePack + id: SyndicateAmmoStatic + recipes: + - MagazineShotgun + - MagazineShotgunEmpty + - MagazineShotgunSlug From dc127d08575784bff17aec6e47bd0a61598c9096 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 9 Oct 2025 14:01:16 +0000 Subject: [PATCH 117/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2504b2ecca..de112f2b02 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Hitlinemoss - changes: - - message: Liquid soap is now slippery. - type: Fix - id: 8559 - time: '2025-05-23T21:57:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37747 - author: CoconutThunder changes: - message: The Chief Medical Officer should now appear with the correct precedence @@ -3949,3 +3942,10 @@ id: 9061 time: '2025-10-09T13:46:20.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40366 +- author: kontakt + changes: + - message: Bulldog magazines are now only accessible through emagged fabricators. + type: Tweak + id: 9062 + time: '2025-10-09T14:00:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40790 From e89651c77481eb04b02a95e11260672062d02d12 Mon Sep 17 00:00:00 2001 From: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:07:58 +0300 Subject: [PATCH 118/216] Fix masks with flash, eye, and damage protection working while being pulled down (#40331) Fix --- Content.Shared/Armor/SharedArmorSystem.cs | 12 +++++++++++- .../Eye/Blinding/Systems/EyeProtectionSystem.cs | 4 ++++ Content.Shared/Flash/SharedFlashSystem.cs | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Armor/SharedArmorSystem.cs b/Content.Shared/Armor/SharedArmorSystem.cs index 1ff1bbc073..972289460f 100644 --- a/Content.Shared/Armor/SharedArmorSystem.cs +++ b/Content.Shared/Armor/SharedArmorSystem.cs @@ -1,4 +1,5 @@ -using Content.Shared.Damage; +using Content.Shared.Clothing.Components; +using Content.Shared.Damage; using Content.Shared.Examine; using Content.Shared.Inventory; using Content.Shared.Silicons.Borgs; @@ -32,6 +33,9 @@ public abstract class SharedArmorSystem : EntitySystem /// The event, contains the running count of armor percentage as a coefficient private void OnCoefficientQuery(Entity ent, ref InventoryRelayedEvent args) { + if (TryComp(ent, out var mask) && mask.IsToggled) + return; + foreach (var armorCoefficient in ent.Comp.Modifiers.Coefficients) { args.Args.DamageModifiers.Coefficients[armorCoefficient.Key] = args.Args.DamageModifiers.Coefficients.TryGetValue(armorCoefficient.Key, out var coefficient) ? coefficient * armorCoefficient.Value : armorCoefficient.Value; @@ -40,12 +44,18 @@ public abstract class SharedArmorSystem : EntitySystem private void OnDamageModify(EntityUid uid, ArmorComponent component, InventoryRelayedEvent args) { + if (TryComp(uid, out var mask) && mask.IsToggled) + return; + args.Args.Damage = DamageSpecifier.ApplyModifierSet(args.Args.Damage, component.Modifiers); } private void OnBorgDamageModify(EntityUid uid, ArmorComponent component, ref BorgModuleRelayedEvent args) { + if (TryComp(uid, out var mask) && mask.IsToggled) + return; + args.Args.Damage = DamageSpecifier.ApplyModifierSet(args.Args.Damage, component.Modifiers); } diff --git a/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs b/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs index 0fc01f1b4e..0b4353eeda 100644 --- a/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs +++ b/Content.Shared/Eye/Blinding/Systems/EyeProtectionSystem.cs @@ -3,6 +3,7 @@ using Content.Shared.Inventory; using Content.Shared.Eye.Blinding.Components; using Content.Shared.Tools.Components; using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Clothing.Components; namespace Content.Shared.Eye.Blinding.Systems { @@ -29,6 +30,9 @@ namespace Content.Shared.Eye.Blinding.Systems private void OnGetProtection(EntityUid uid, EyeProtectionComponent component, GetEyeProtectionEvent args) { + if (TryComp(uid, out var mask) && mask.IsToggled) + return; + args.Protection += component.ProtectionTime; } diff --git a/Content.Shared/Flash/SharedFlashSystem.cs b/Content.Shared/Flash/SharedFlashSystem.cs index 7f69e86042..02513aa91b 100644 --- a/Content.Shared/Flash/SharedFlashSystem.cs +++ b/Content.Shared/Flash/SharedFlashSystem.cs @@ -22,6 +22,7 @@ using Robust.Shared.Timing; using System.Linq; using Content.Shared.Movement.Systems; using Content.Shared.Random.Helpers; +using Content.Shared.Clothing.Components; namespace Content.Shared.Flash; @@ -258,6 +259,9 @@ public abstract class SharedFlashSystem : EntitySystem private void OnFlashImmunityFlashAttempt(Entity ent, ref FlashAttemptEvent args) { + if (TryComp(ent, out var mask) && mask.IsToggled) + return; + if (ent.Comp.Enabled) args.Cancelled = true; } From 5185df4072de98ff69d6690206297ccf12786e19 Mon Sep 17 00:00:00 2001 From: blobadoodle Date: Thu, 9 Oct 2025 22:12:24 +0100 Subject: [PATCH 119/216] Add missing uranium glass locales (#40809) --- Resources/Locale/en-US/materials/materials.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Locale/en-US/materials/materials.ftl b/Resources/Locale/en-US/materials/materials.ftl index 657b7f5f0f..5a22bc2661 100644 --- a/Resources/Locale/en-US/materials/materials.ftl +++ b/Resources/Locale/en-US/materials/materials.ftl @@ -3,6 +3,8 @@ materials-glass = glass materials-reinforced-glass = reinforced glass materials-plasma-glass = plasma glass materials-reinforced-plasma-glass = reinforced plasma glass +materials-uranium-glass = uranium glass +materials-reinforced-uranium-glass = reinforced uranium glass # Metals materials-steel = steel From 0d97699aaeec677736382b8a225414b193a9bf8a Mon Sep 17 00:00:00 2001 From: Jessica M Date: Thu, 9 Oct 2025 14:14:12 -0700 Subject: [PATCH 120/216] Migrate revenant and PAI shops to use ActionGrant instead of hardcoding them (#40475) * add intrinsic store, replace revenant store with it. * migrate PAI and also move to shared where possible * fix typos and clean up... intrinisic * oops, hopefully fixes test * Move to StoreSystem and ActionGrant * documentation and remove thing * review --------- Co-authored-by: Jessica M Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Client/PAI/PAISystem.cs | 8 ---- Content.Server/PAI/PAISystem.cs | 18 +-------- .../Revenant/EntitySystems/RevenantSystem.cs | 19 ---------- Content.Server/Store/Systems/StoreSystem.cs | 16 +++++--- Content.Shared/PAI/PAIComponent.cs | 12 +----- Content.Shared/PAI/SharedPAISystem.cs | 38 ------------------- .../Revenant/Components/RevenantComponent.cs | 2 - Content.Shared/Revenant/SharedRevenant.cs | 4 -- .../Store/Events/IntrinsicStoreActionEvent.cs | 11 ++++++ Resources/Prototypes/Actions/revenant.yml | 7 +--- Resources/Prototypes/Actions/types.yml | 11 ++++++ .../Entities/Mobs/NPCs/revenant.yml | 3 ++ .../Prototypes/Entities/Objects/Fun/pai.yml | 10 ++--- 13 files changed, 43 insertions(+), 116 deletions(-) delete mode 100644 Content.Client/PAI/PAISystem.cs delete mode 100644 Content.Shared/PAI/SharedPAISystem.cs create mode 100644 Content.Shared/Store/Events/IntrinsicStoreActionEvent.cs diff --git a/Content.Client/PAI/PAISystem.cs b/Content.Client/PAI/PAISystem.cs deleted file mode 100644 index a28cf6a077..0000000000 --- a/Content.Client/PAI/PAISystem.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Content.Shared.PAI; - -namespace Content.Client.PAI -{ - public sealed class PAISystem : SharedPAISystem - { - } -} diff --git a/Content.Server/PAI/PAISystem.cs b/Content.Server/PAI/PAISystem.cs index 289b74b258..7fd58f1572 100644 --- a/Content.Server/PAI/PAISystem.cs +++ b/Content.Server/PAI/PAISystem.cs @@ -2,27 +2,22 @@ using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles.Components; using Content.Server.Instruments; using Content.Server.Kitchen.Components; -using Content.Server.Store.Systems; using Content.Shared.Interaction.Events; using Content.Shared.Mind.Components; using Content.Shared.PAI; using Content.Shared.Popups; -using Content.Shared.Store; -using Content.Shared.Store.Components; using Content.Shared.Instruments; using Robust.Shared.Random; -using Robust.Shared.Prototypes; using System.Text; namespace Content.Server.PAI; -public sealed class PAISystem : SharedPAISystem +public sealed class PAISystem : EntitySystem { [Dependency] private readonly InstrumentSystem _instrumentSystem = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly StoreSystem _store = default!; [Dependency] private readonly ToggleableGhostRoleSystem _toggleableGhostRole = default!; /// @@ -38,8 +33,6 @@ public sealed class PAISystem : SharedPAISystem SubscribeLocalEvent(OnMindAdded); SubscribeLocalEvent(OnMindRemoved); SubscribeLocalEvent(OnMicrowaved); - - SubscribeLocalEvent(OnShop); } private void OnUseInHand(EntityUid uid, PAIComponent component, UseInHandEvent args) @@ -106,15 +99,6 @@ public sealed class PAISystem : SharedPAISystem var val = Loc.GetString("pai-system-pai-name-raw", ("name", name.ToString())); _metaData.SetEntityName(uid, val); } - - private void OnShop(Entity ent, ref PAIShopActionEvent args) - { - if (!TryComp(ent, out var store)) - return; - - _store.ToggleUi(args.Performer, ent, store); - } - public void PAITurningOff(EntityUid uid) { // Close the instrument interface if it was open diff --git a/Content.Server/Revenant/EntitySystems/RevenantSystem.cs b/Content.Server/Revenant/EntitySystems/RevenantSystem.cs index b89f10934d..6c8972be58 100644 --- a/Content.Server/Revenant/EntitySystems/RevenantSystem.cs +++ b/Content.Server/Revenant/EntitySystems/RevenantSystem.cs @@ -1,7 +1,6 @@ using System.Numerics; using Content.Server.Actions; using Content.Server.GameTicking; -using Content.Server.Store.Components; using Content.Server.Store.Systems; using Content.Shared.Alert; using Content.Shared.Damage; @@ -21,7 +20,6 @@ using Content.Shared.Store.Components; using Content.Shared.Stunnable; using Content.Shared.Tag; using Robust.Server.GameObjects; -using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Server.Revenant.EntitySystems; @@ -46,17 +44,12 @@ public sealed partial class RevenantSystem : EntitySystem [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly VisibilitySystem _visibility = default!; [Dependency] private readonly TurfSystem _turf = default!; - - private static readonly EntProtoId RevenantShopId = "ActionRevenantShop"; - public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnStartup); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnShop); SubscribeLocalEvent(OnDamage); SubscribeLocalEvent(OnExamine); SubscribeLocalEvent(OnStatusAdded); @@ -94,11 +87,6 @@ public sealed partial class RevenantSystem : EntitySystem _eye.RefreshVisibilityMask(uid); } - private void OnMapInit(EntityUid uid, RevenantComponent component, MapInitEvent args) - { - _action.AddAction(uid, ref component.Action, RevenantShopId); - } - private void OnStatusAdded(EntityUid uid, RevenantComponent component, StatusEffectAddedEvent args) { if (args.Key == "Stun") @@ -182,13 +170,6 @@ public sealed partial class RevenantSystem : EntitySystem return true; } - private void OnShop(EntityUid uid, RevenantComponent component, RevenantShopActionEvent args) - { - if (!TryComp(uid, out var store)) - return; - _store.ToggleUi(uid, uid, store); - } - public void MakeVisible(bool visible) { var query = EntityQueryEnumerator(); diff --git a/Content.Server/Store/Systems/StoreSystem.cs b/Content.Server/Store/Systems/StoreSystem.cs index 0625ced087..10060dc7d3 100644 --- a/Content.Server/Store/Systems/StoreSystem.cs +++ b/Content.Server/Store/Systems/StoreSystem.cs @@ -1,17 +1,16 @@ +using System.Linq; using Content.Server.Store.Components; -using Content.Shared.UserInterface; using Content.Shared.FixedPoint; using Content.Shared.Implants.Components; using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Stacks; using Content.Shared.Store.Components; -using JetBrains.Annotations; +using Content.Shared.Store.Events; +using Content.Shared.UserInterface; using Robust.Shared.Prototypes; -using Robust.Shared.Utility; -using System.Linq; using Robust.Shared.Timing; -using Content.Shared.Mind; +using Robust.Shared.Utility; namespace Content.Server.Store.Systems; @@ -37,6 +36,7 @@ public sealed partial class StoreSystem : EntitySystem SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnImplantActivate); + SubscribeLocalEvent(OnIntrinsicStoreAction); InitializeUi(); InitializeCommand(); @@ -187,6 +187,12 @@ public sealed partial class StoreSystem : EntitySystem UpdateUserInterface(null, uid, store); return true; } + + private void OnIntrinsicStoreAction(Entity ent, ref IntrinsicStoreActionEvent args) + { + ToggleUi(args.Performer, ent.Owner, ent.Comp); + } + } public sealed class CurrencyInsertAttemptEvent : CancellableEntityEventArgs diff --git a/Content.Shared/PAI/PAIComponent.cs b/Content.Shared/PAI/PAIComponent.cs index fb9d7150e3..541172ffe0 100644 --- a/Content.Shared/PAI/PAIComponent.cs +++ b/Content.Shared/PAI/PAIComponent.cs @@ -1,8 +1,4 @@ -using Content.Shared.FixedPoint; -using Content.Shared.Store; using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.PAI; @@ -16,7 +12,7 @@ namespace Content.Shared.PAI; /// and there's not always enough players and ghost roles to justify it. /// All logic in PAISystem. /// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[RegisterComponent, NetworkedComponent] public sealed partial class PAIComponent : Component { /// @@ -26,12 +22,6 @@ public sealed partial class PAIComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public EntityUid? LastUser; - [DataField] - public EntProtoId ShopActionId = "ActionPAIOpenShop"; - - [DataField, AutoNetworkedField] - public EntityUid? ShopAction; - /// /// When microwaved there is this chance to brick the pai, kicking out its player and preventing it from being used again. /// diff --git a/Content.Shared/PAI/SharedPAISystem.cs b/Content.Shared/PAI/SharedPAISystem.cs deleted file mode 100644 index 00d3e23cef..0000000000 --- a/Content.Shared/PAI/SharedPAISystem.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Content.Shared.Actions; - -namespace Content.Shared.PAI; - -/// -/// pAIs, or Personal AIs, are essentially portable ghost role generators. -/// In their current implementation, they create a ghost role anyone can access, -/// and that a player can also "wipe" (reset/kick out player). -/// Theoretically speaking pAIs are supposed to use a dedicated "offer and select" system, -/// with the player holding the pAI being able to choose one of the ghosts in the round. -/// This seems too complicated for an initial implementation, though, -/// and there's not always enough players and ghost roles to justify it. -/// -public abstract class SharedPAISystem : EntitySystem -{ - [Dependency] private readonly SharedActionsSystem _actions = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnShutdown); - } - - private void OnMapInit(Entity ent, ref MapInitEvent args) - { - _actions.AddAction(ent, ent.Comp.ShopActionId); - } - - private void OnShutdown(Entity ent, ref ComponentShutdown args) - { - _actions.RemoveAction(ent.Owner, ent.Comp.ShopAction); - } -} -public sealed partial class PAIShopActionEvent : InstantActionEvent -{ -} diff --git a/Content.Shared/Revenant/Components/RevenantComponent.cs b/Content.Shared/Revenant/Components/RevenantComponent.cs index e6543f1906..e434bba1d9 100644 --- a/Content.Shared/Revenant/Components/RevenantComponent.cs +++ b/Content.Shared/Revenant/Components/RevenantComponent.cs @@ -214,6 +214,4 @@ public sealed partial class RevenantComponent : Component [DataField("harvestingState")] public string HarvestingState = "harvesting"; #endregion - - [DataField] public EntityUid? Action; } diff --git a/Content.Shared/Revenant/SharedRevenant.cs b/Content.Shared/Revenant/SharedRevenant.cs index c44e4408aa..b1023f43e2 100644 --- a/Content.Shared/Revenant/SharedRevenant.cs +++ b/Content.Shared/Revenant/SharedRevenant.cs @@ -42,10 +42,6 @@ public sealed class HarvestDoAfterCancelled : EntityEventArgs { } -public sealed partial class RevenantShopActionEvent : InstantActionEvent -{ -} - public sealed partial class RevenantDefileActionEvent : InstantActionEvent { } diff --git a/Content.Shared/Store/Events/IntrinsicStoreActionEvent.cs b/Content.Shared/Store/Events/IntrinsicStoreActionEvent.cs new file mode 100644 index 0000000000..dea2c25e6e --- /dev/null +++ b/Content.Shared/Store/Events/IntrinsicStoreActionEvent.cs @@ -0,0 +1,11 @@ +using Content.Shared.Actions; + +namespace Content.Shared.Store.Events; + +/// +/// Opens a store specified by +/// Used for entities with a store built into themselves like Revenant or PAI +/// +public sealed partial class IntrinsicStoreActionEvent : InstantActionEvent +{ +} diff --git a/Resources/Prototypes/Actions/revenant.yml b/Resources/Prototypes/Actions/revenant.yml index 5904908a75..3ac425a567 100644 --- a/Resources/Prototypes/Actions/revenant.yml +++ b/Resources/Prototypes/Actions/revenant.yml @@ -1,13 +1,8 @@ - type: entity - parent: BaseAction + parent: ActionIntrinsicStore id: ActionRevenantShop name: Shop description: Opens the ability shop. - components: - - type: Action - icon: Interface/Actions/shop.png - - type: InstantAction - event: !type:RevenantShopActionEvent - type: entity parent: BaseAction diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index 61babbfcea..752aeb13f8 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -466,3 +466,14 @@ itemIconStyle: BigAction - type: InstantAction event: !type:ChameleonControllerOpenMenuEvent + +- type: entity + parent: BaseMentalAction + id: ActionIntrinsicStore + name: Store + description: Opens the store + components: + - type: Action + icon: Interface/Actions/shop.png + - type: InstantAction + event: !type:IntrinsicStoreActionEvent diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index 9b0bfb05ca..04b1554cef 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -66,6 +66,9 @@ type: StoreBoundUserInterface - type: Visibility layer: 2 #ghost vis layer + - type: ActionGrant + actions: + - ActionRevenantShop - type: Store categories: - RevenantAbilities diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index 6aec812b77..2ba5acfbf1 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -58,6 +58,9 @@ - Common - type: DoAfter - type: Actions + - type: ActionGrant + actions: + - ActionPAIOpenShop - type: Store categories: - PAIAbilities @@ -188,15 +191,10 @@ node: potatoai - type: entity - parent: BaseMentalAction + parent: ActionIntrinsicStore id: ActionPAIOpenShop name: Software Catalog description: Install new software to assist your owner. - components: - - type: Action - icon: Interface/Actions/shop.png - - type: InstantAction - event: !type:PAIShopActionEvent - type: entity parent: BaseMentalAction From d3d52615d4b0aebf6218cbf881101d0255427eca Mon Sep 17 00:00:00 2001 From: FungiFellow <151778459+FungiFellow@users.noreply.github.com> Date: Thu, 9 Oct 2025 18:08:52 -0400 Subject: [PATCH 121/216] Lootpool Tweaks Mail/Maints (#39892) * Added Claymore to MaintWeaponTable * SyndieBusinessCard+InsulsTable --- .../Entities/Markers/Spawners/Random/maintenance.yml | 1 + .../Entities/Objects/Deliveries/deliveries_tables.yml | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index bb3829a2dd..e6e3ec8c6f 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -329,6 +329,7 @@ weight: 95 children: - id: Machete + - id: Claymore - id: BaseBallBat - id: CombatKnife - id: Spear diff --git a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries_tables.yml b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries_tables.yml index 19613dd494..be663a1774 100644 --- a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries_tables.yml +++ b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries_tables.yml @@ -105,6 +105,8 @@ - id: Ointment - id: Gauze - id: Bloodpack + - id: SyndicateBusinessCard + weight: 0.5 # Packages # TODO: Currently mostly maints loot, should be updated in the future. @@ -138,6 +140,9 @@ weight: 0.2 rolls: !type:RangeNumberSelector range: 2, 3 + - !type:NestedSelector + tableId: InsulsTable #Uncommon since it's weighted towards budget/fingerless + weight: 0.2 - type: entityTable # TODO: Add more variety! id: PackageRareEntityTable @@ -157,3 +162,4 @@ - !type:NestedSelector tableId: SyndieMaintLoot weight: 0.5 + From accb59b6c720e389bdc31cdf34cf6fbe4997719c Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Thu, 9 Oct 2025 20:00:46 -0500 Subject: [PATCH 122/216] Added more nitrogen canisters to plasma (#40794) --- Resources/Maps/plasma.yml | 2246 +++++++++++++++++++++++++++++-------- 1 file changed, 1792 insertions(+), 454 deletions(-) diff --git a/Resources/Maps/plasma.yml b/Resources/Maps/plasma.yml index 0a0f1d7428..71dba17d74 100644 --- a/Resources/Maps/plasma.yml +++ b/Resources/Maps/plasma.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 266.0.0 + engineVersion: 267.2.0 forkId: "" forkVersion: "" - time: 09/03/2025 00:56:56 - entityCount: 26486 + time: 10/09/2025 01:25:34 + entityCount: 26492 maps: - 1 grids: @@ -9858,139 +9858,42 @@ entities: uniqueMixes: - volume: 2500 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 21.824879 + Nitrogen: 82.10312 - volume: 2500 temperature: 235 moles: - - 27.225372 - - 102.419266 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 27.225372 + Nitrogen: 102.419266 - volume: 2500 temperature: 293.14975 moles: - - 20.078888 - - 75.53487 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 20.078888 + Nitrogen: 75.53487 - volume: 2500 temperature: 293.1495 moles: - - 20.078888 - - 75.53487 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 20.078888 + Nitrogen: 75.53487 + - volume: 2500 + temperature: 293.15 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Plasma: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Nitrogen: 6666.982 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -14718,7 +14621,7 @@ entities: pos: -131.5,-45.5 parent: 2 - type: Door - secondsUntilStateChange: -61365.79 + secondsUntilStateChange: -61511.09 state: Opening - type: DeviceLinkSource lastSignals: @@ -65246,18 +65149,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - uid: 13666 components: - type: Transform @@ -65505,18 +65398,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -65562,18 +65445,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -67653,18 +67526,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -67719,18 +67582,8 @@ entities: immutable: False temperature: 293.1462 moles: - - 1.606311 - - 6.042789 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.606311 + Nitrogen: 6.042789 - type: ContainerContainer containers: entity_storage: !type:Container @@ -67933,18 +67786,8 @@ entities: immutable: False temperature: 293.147 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - uid: 17839 components: - type: Transform @@ -67966,18 +67809,8 @@ entities: immutable: False temperature: 293.1465 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -68000,18 +67833,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -68046,18 +67869,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -68127,18 +67940,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -68277,18 +68080,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -68358,18 +68151,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -84031,9 +83814,10 @@ entities: parent: 2 - type: Edible edible: Drink - solution: pool - destroyOnEmpty: false utensil: Spoon + trash: [] + destroyOnEmpty: False + solution: pool - uid: 16868 components: - type: Transform @@ -84041,9 +83825,10 @@ entities: parent: 2 - type: Edible edible: Drink - solution: pool - destroyOnEmpty: false utensil: Spoon + trash: [] + destroyOnEmpty: False + solution: pool - uid: 16872 components: - type: Transform @@ -84051,9 +83836,10 @@ entities: parent: 2 - type: Edible edible: Drink - solution: pool - destroyOnEmpty: false utensil: Spoon + trash: [] + destroyOnEmpty: False + solution: pool - uid: 16907 components: - type: Transform @@ -84061,9 +83847,10 @@ entities: parent: 2 - type: Edible edible: Drink - solution: pool - destroyOnEmpty: false utensil: Spoon + trash: [] + destroyOnEmpty: False + solution: pool - uid: 17621 components: - type: Transform @@ -122715,11 +122502,6 @@ entities: - type: Transform pos: -22.5,-18.5 parent: 2 - - uid: 10489 - components: - - type: Transform - pos: -41.5,-42.5 - parent: 2 - uid: 10490 components: - type: Transform @@ -126054,18 +125836,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -126109,18 +125881,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -126156,18 +125918,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -126200,18 +125952,8 @@ entities: immutable: False temperature: 293.1465 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -128417,18 +128159,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -128671,18 +128403,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -128757,18 +128479,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -128805,18 +128517,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: Lock locked: False - type: Fixtures @@ -130218,6 +129920,11 @@ entities: - type: Transform pos: -136.5,-4.5 parent: 2 + - uid: 10489 + components: + - type: Transform + pos: -41.5,-42.5 + parent: 2 - uid: 15329 components: - type: Transform @@ -130238,6 +129945,26 @@ entities: - type: Transform pos: -37.5,-2.5 parent: 2 + - uid: 26488 + components: + - type: Transform + pos: -113.5,-26.5 + parent: 2 + - uid: 26489 + components: + - type: Transform + pos: -105.5,-61.5 + parent: 2 + - uid: 26490 + components: + - type: Transform + pos: -73.5,-39.5 + parent: 2 + - uid: 26491 + components: + - type: Transform + pos: -84.5,6.5 + parent: 2 - proto: NitrogenTankFilled entities: - uid: 23345 @@ -130518,6 +130245,11 @@ entities: - type: Transform pos: -37.5,-3.5 parent: 2 + - uid: 26492 + components: + - type: Transform + pos: -91.5,4.5 + parent: 2 - proto: PaladinCircuitBoard entities: - uid: 24947 @@ -131401,130 +131133,174 @@ entities: - type: Transform pos: -26.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6025 components: - type: Transform rot: 1.5707963267948966 rad pos: -27.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6031 components: - type: Transform rot: 1.5707963267948966 rad pos: -27.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9355 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12207 components: - type: Transform pos: -25.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15446 components: - type: Transform rot: 3.141592653589793 rad pos: -25.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16456 components: - type: Transform rot: -1.5707963267948966 rad pos: -24.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23312 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23373 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23392 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23441 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23448 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23450 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23451 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23452 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23453 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23454 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23845 components: - type: Transform rot: -1.5707963267948966 rad pos: -118.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24260 components: - type: Transform rot: -1.5707963267948966 rad pos: -118.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24872 components: - type: Transform rot: 3.141592653589793 rad pos: -122.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24925 components: - type: Transform pos: -122.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24926 components: - type: Transform rot: 1.5707963267948966 rad pos: -123.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: PlasmaTank entities: - uid: 2843 @@ -131560,40 +131336,54 @@ entities: rot: 3.141592653589793 rad pos: -117.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24896 components: - type: Transform rot: 3.141592653589793 rad pos: -118.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24897 components: - type: Transform pos: -118.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24903 components: - type: Transform pos: -117.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24932 components: - type: Transform rot: -1.5707963267948966 rad pos: -121.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24937 components: - type: Transform rot: -1.5707963267948966 rad pos: -121.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24938 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: PlasmaWindowDirectional entities: - uid: 6607 @@ -131602,16 +131392,22 @@ entities: rot: 1.5707963267948966 rad pos: -78.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21053 components: - type: Transform pos: -39.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21054 components: - type: Transform pos: -37.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: PlasticFlapsAirtightClear entities: - uid: 964 @@ -135510,18 +135306,6 @@ entities: - type: Transform pos: -100.5,-27.5 parent: 2 -- proto: PrefilledSyringe - entities: - - uid: 6481 - components: - - type: Transform - pos: -36.23253,-30.543175 - parent: 2 - - uid: 7609 - components: - - type: Transform - pos: -134.52573,-43.445347 - parent: 2 - proto: Protolathe entities: - uid: 9781 @@ -136980,591 +136764,827 @@ entities: - type: Transform pos: -110.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 667 components: - type: Transform pos: -112.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 670 components: - type: Transform pos: -110.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 673 components: - type: Transform pos: -109.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 675 components: - type: Transform pos: -111.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 807 components: - type: Transform pos: -124.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1870 components: - type: Transform pos: -111.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1984 components: - type: Transform pos: -109.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2453 components: - type: Transform pos: -148.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5278 components: - type: Transform pos: -112.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5279 components: - type: Transform pos: -112.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5280 components: - type: Transform pos: -108.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5281 components: - type: Transform pos: -108.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5282 components: - type: Transform pos: -108.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5283 components: - type: Transform pos: -112.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5284 components: - type: Transform pos: -112.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5285 components: - type: Transform pos: -112.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5286 components: - type: Transform pos: -108.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5287 components: - type: Transform pos: -108.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5288 components: - type: Transform pos: -108.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5289 components: - type: Transform pos: -114.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5290 components: - type: Transform pos: -114.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5291 components: - type: Transform pos: -114.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5292 components: - type: Transform pos: -106.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5293 components: - type: Transform pos: -106.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5294 components: - type: Transform pos: -106.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5295 components: - type: Transform pos: -114.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5296 components: - type: Transform pos: -114.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5297 components: - type: Transform pos: -114.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5298 components: - type: Transform pos: -106.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5299 components: - type: Transform pos: -106.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5300 components: - type: Transform pos: -106.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5342 components: - type: Transform pos: -126.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5345 components: - type: Transform pos: -124.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5359 components: - type: Transform pos: -124.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5360 components: - type: Transform pos: -124.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5361 components: - type: Transform pos: -126.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5378 components: - type: Transform pos: -124.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5380 components: - type: Transform pos: -124.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5418 components: - type: Transform pos: -126.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5419 components: - type: Transform pos: -126.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5434 components: - type: Transform pos: -124.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5443 components: - type: Transform pos: -124.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5450 components: - type: Transform pos: -124.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5470 components: - type: Transform pos: -124.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5479 components: - type: Transform pos: -124.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5480 components: - type: Transform pos: -124.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5505 components: - type: Transform pos: -142.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5506 components: - type: Transform pos: -142.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5941 components: - type: Transform pos: -146.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5942 components: - type: Transform pos: -148.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5943 components: - type: Transform pos: -147.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5944 components: - type: Transform pos: -148.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5945 components: - type: Transform pos: -146.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5946 components: - type: Transform pos: -147.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5981 components: - type: Transform pos: -142.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5990 components: - type: Transform pos: -152.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5999 components: - type: Transform pos: -148.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6005 components: - type: Transform pos: -142.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6082 components: - type: Transform pos: -148.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6083 components: - type: Transform pos: -146.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6084 components: - type: Transform pos: -147.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6091 components: - type: Transform pos: -146.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6092 components: - type: Transform pos: -148.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6096 components: - type: Transform pos: -153.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6101 components: - type: Transform pos: -146.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6103 components: - type: Transform pos: -146.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6245 components: - type: Transform pos: -68.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6924 components: - type: Transform pos: -126.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7167 components: - type: Transform pos: -146.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7192 components: - type: Transform pos: -148.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7211 components: - type: Transform pos: -148.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7247 components: - type: Transform pos: -148.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7307 components: - type: Transform pos: -155.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7317 components: - type: Transform pos: -155.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7839 components: - type: Transform pos: -143.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7840 components: - type: Transform pos: -151.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7842 components: - type: Transform pos: -146.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7856 components: - type: Transform pos: -155.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7890 components: - type: Transform pos: -69.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9817 components: - type: Transform pos: -126.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9912 components: - type: Transform pos: -126.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13497 components: - type: Transform pos: -109.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13498 components: - type: Transform pos: -110.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13499 components: - type: Transform pos: -111.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13661 components: - type: Transform pos: -146.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13662 components: - type: Transform pos: -151.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13664 components: - type: Transform pos: -151.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13670 components: - type: Transform pos: -151.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13718 components: - type: Transform pos: -143.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14110 components: - type: Transform pos: -67.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14756 components: - type: Transform pos: -67.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16466 components: - type: Transform pos: -153.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20368 components: - type: Transform pos: -124.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20411 components: - type: Transform pos: -122.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23079 components: - type: Transform pos: -124.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23103 components: - type: Transform pos: -114.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23104 components: - type: Transform pos: -114.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23108 components: - type: Transform pos: -114.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23396 components: - type: Transform pos: -116.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23401 components: - type: Transform pos: -120.5,-81.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23498 components: - type: Transform pos: -116.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23716 components: - type: Transform pos: -69.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24847 components: - type: Transform pos: -116.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24880 components: - type: Transform pos: -118.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24887 components: - type: Transform pos: -116.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24888 components: - type: Transform pos: -126.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24889 components: - type: Transform pos: -126.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24890 components: - type: Transform pos: -126.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24891 components: - type: Transform pos: -124.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24894 components: - type: Transform pos: -122.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24901 components: - type: Transform pos: -124.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24921 components: - type: Transform pos: -123.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24933 components: - type: Transform pos: -121.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24934 components: - type: Transform pos: -119.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24935 components: - type: Transform pos: -118.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24936 components: - type: Transform pos: -117.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25187 components: - type: Transform pos: -124.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedPlasmaWindowDiagonal entities: - uid: 7308 @@ -137572,35 +137592,47 @@ entities: - type: Transform pos: -155.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7324 components: - type: Transform pos: -154.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7332 components: - type: Transform rot: 3.141592653589793 rad pos: -154.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7333 components: - type: Transform rot: 1.5707963267948966 rad pos: -154.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7334 components: - type: Transform rot: -1.5707963267948966 rad pos: -154.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7342 components: - type: Transform rot: 1.5707963267948966 rad pos: -155.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedWindow entities: - uid: 4 @@ -137608,1876 +137640,2626 @@ entities: - type: Transform pos: -114.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10 components: - type: Transform pos: -69.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18 components: - type: Transform pos: -69.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 31 components: - type: Transform pos: -69.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 46 components: - type: Transform pos: -66.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 47 components: - type: Transform pos: -64.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 48 components: - type: Transform pos: -65.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 49 components: - type: Transform pos: -64.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 50 components: - type: Transform pos: -62.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 51 components: - type: Transform pos: -61.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 52 components: - type: Transform pos: -60.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 54 components: - type: Transform pos: -58.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 56 components: - type: Transform pos: -58.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 57 components: - type: Transform pos: -57.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 58 components: - type: Transform pos: -56.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 59 components: - type: Transform pos: -53.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 60 components: - type: Transform pos: -53.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 61 components: - type: Transform pos: -53.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 71 components: - type: Transform pos: -59.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 73 components: - type: Transform pos: -101.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 107 components: - type: Transform pos: -65.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 109 components: - type: Transform pos: -65.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 110 components: - type: Transform pos: -64.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 111 components: - type: Transform pos: -63.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 112 components: - type: Transform pos: -62.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 113 components: - type: Transform pos: -60.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 114 components: - type: Transform pos: -59.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 116 components: - type: Transform pos: -58.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 117 components: - type: Transform pos: -57.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 118 components: - type: Transform pos: -57.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 141 components: - type: Transform pos: -63.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 167 components: - type: Transform pos: -52.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 171 components: - type: Transform pos: -51.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 178 components: - type: Transform pos: -31.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 249 components: - type: Transform pos: -31.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 285 components: - type: Transform pos: -82.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 287 components: - type: Transform pos: -85.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 291 components: - type: Transform pos: -84.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 316 components: - type: Transform pos: -35.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 320 components: - type: Transform pos: -34.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 322 components: - type: Transform pos: -32.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 351 components: - type: Transform pos: -93.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 398 components: - type: Transform pos: -48.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 420 components: - type: Transform pos: -92.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 474 components: - type: Transform pos: -66.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 504 components: - type: Transform pos: -116.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 751 components: - type: Transform pos: -83.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 787 components: - type: Transform pos: -138.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 953 components: - type: Transform pos: -83.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1014 components: - type: Transform pos: -53.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1015 components: - type: Transform pos: -54.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1170 components: - type: Transform pos: -35.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1174 components: - type: Transform pos: -35.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1176 components: - type: Transform pos: -35.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1252 components: - type: Transform pos: -20.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1253 components: - type: Transform pos: -20.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1254 components: - type: Transform pos: -20.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1312 components: - type: Transform pos: -31.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1313 components: - type: Transform pos: -31.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1314 components: - type: Transform pos: -31.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1331 components: - type: Transform pos: -117.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1534 components: - type: Transform pos: -20.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1676 components: - type: Transform pos: -93.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1712 components: - type: Transform pos: -24.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1713 components: - type: Transform pos: -27.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1714 components: - type: Transform pos: -27.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1738 components: - type: Transform pos: -101.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1809 components: - type: Transform pos: -56.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1810 components: - type: Transform pos: -55.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1864 components: - type: Transform pos: -117.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1873 components: - type: Transform pos: -106.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1888 components: - type: Transform pos: -34.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1892 components: - type: Transform pos: -106.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1950 components: - type: Transform pos: -106.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1978 components: - type: Transform pos: -32.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2053 components: - type: Transform pos: -95.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2054 components: - type: Transform pos: -95.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2129 components: - type: Transform pos: -33.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2196 components: - type: Transform pos: -119.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2221 components: - type: Transform pos: -123.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2222 components: - type: Transform pos: -123.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2223 components: - type: Transform pos: -123.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2238 components: - type: Transform pos: -123.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2363 components: - type: Transform pos: -89.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2365 components: - type: Transform pos: -89.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2367 components: - type: Transform pos: -93.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2533 components: - type: Transform pos: -121.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2648 components: - type: Transform pos: -89.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2682 components: - type: Transform pos: -63.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2695 components: - type: Transform pos: -59.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2852 components: - type: Transform pos: -51.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2853 components: - type: Transform pos: -50.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2854 components: - type: Transform pos: -49.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2855 components: - type: Transform pos: -45.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2856 components: - type: Transform pos: -43.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2857 components: - type: Transform pos: -44.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2906 components: - type: Transform pos: -47.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2939 components: - type: Transform pos: -50.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2947 components: - type: Transform pos: -52.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2948 components: - type: Transform pos: -51.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2949 components: - type: Transform pos: -50.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3313 components: - type: Transform pos: -8.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3415 components: - type: Transform pos: -48.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3751 components: - type: Transform pos: -7.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3775 components: - type: Transform pos: -9.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3785 components: - type: Transform pos: -7.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3809 components: - type: Transform pos: -67.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3828 components: - type: Transform pos: -48.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3829 components: - type: Transform pos: -48.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3960 components: - type: Transform pos: -31.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3963 components: - type: Transform pos: -31.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3970 components: - type: Transform pos: -29.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4017 components: - type: Transform pos: -89.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4129 components: - type: Transform pos: -101.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4229 components: - type: Transform pos: -83.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4230 components: - type: Transform pos: -83.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4231 components: - type: Transform pos: -83.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4287 components: - type: Transform pos: -31.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4526 components: - type: Transform pos: -84.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4541 components: - type: Transform pos: -97.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4548 components: - type: Transform pos: -97.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4583 components: - type: Transform pos: -80.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4629 components: - type: Transform pos: -97.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4630 components: - type: Transform pos: -9.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4674 components: - type: Transform pos: -8.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4693 components: - type: Transform pos: -85.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4698 components: - type: Transform pos: -85.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4710 components: - type: Transform pos: -83.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4711 components: - type: Transform pos: -83.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4712 components: - type: Transform pos: -83.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4725 components: - type: Transform pos: -87.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4726 components: - type: Transform pos: -85.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4745 components: - type: Transform pos: -85.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4747 components: - type: Transform pos: -140.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4756 components: - type: Transform pos: -83.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4762 components: - type: Transform pos: -84.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4825 components: - type: Transform pos: -93.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4833 components: - type: Transform pos: -127.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4906 components: - type: Transform pos: -126.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4907 components: - type: Transform pos: -125.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5675 components: - type: Transform pos: -107.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5676 components: - type: Transform pos: -108.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5693 components: - type: Transform pos: -140.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5700 components: - type: Transform pos: -120.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5701 components: - type: Transform pos: -118.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5715 components: - type: Transform pos: -106.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5762 components: - type: Transform pos: -115.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5774 components: - type: Transform pos: -117.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5777 components: - type: Transform pos: -114.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5778 components: - type: Transform pos: -117.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5813 components: - type: Transform pos: -116.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5814 components: - type: Transform pos: -113.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5815 components: - type: Transform pos: -113.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5816 components: - type: Transform pos: -116.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5867 components: - type: Transform pos: -106.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5868 components: - type: Transform pos: -106.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5869 components: - type: Transform pos: -106.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6125 components: - type: Transform pos: -155.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6198 components: - type: Transform pos: -126.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6201 components: - type: Transform pos: -126.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6202 components: - type: Transform pos: -126.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6203 components: - type: Transform pos: -126.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6267 components: - type: Transform pos: -125.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6269 components: - type: Transform pos: -121.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6270 components: - type: Transform pos: -121.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6311 components: - type: Transform pos: -126.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6682 components: - type: Transform pos: -81.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6755 components: - type: Transform pos: -95.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6756 components: - type: Transform pos: -95.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6897 components: - type: Transform pos: -86.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6972 components: - type: Transform pos: -140.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7145 components: - type: Transform pos: -1.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7159 components: - type: Transform pos: -2.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7165 components: - type: Transform pos: -1.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7171 components: - type: Transform pos: -1.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7175 components: - type: Transform pos: -2.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7183 components: - type: Transform pos: -1.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7187 components: - type: Transform pos: -3.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7203 components: - type: Transform pos: -1.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7209 components: - type: Transform pos: -1.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7219 components: - type: Transform pos: -1.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7220 components: - type: Transform pos: -3.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7249 components: - type: Transform pos: -93.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7257 components: - type: Transform pos: -141.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7280 components: - type: Transform pos: -117.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7281 components: - type: Transform pos: -117.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7284 components: - type: Transform pos: -117.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7285 components: - type: Transform pos: -117.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7318 components: - type: Transform pos: -131.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7389 components: - type: Transform pos: -131.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7390 components: - type: Transform pos: -131.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7391 components: - type: Transform pos: -131.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7392 components: - type: Transform pos: -131.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7529 components: - type: Transform pos: -137.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7568 components: - type: Transform pos: -141.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7876 components: - type: Transform pos: -121.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7898 components: - type: Transform pos: -81.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8052 components: - type: Transform pos: -130.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8075 components: - type: Transform pos: -140.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8164 components: - type: Transform pos: -83.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8195 components: - type: Transform pos: -0.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8196 components: - type: Transform pos: 1.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8197 components: - type: Transform pos: 0.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8198 components: - type: Transform pos: 1.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8199 components: - type: Transform pos: 0.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8200 components: - type: Transform pos: -0.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8201 components: - type: Transform pos: -0.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8202 components: - type: Transform pos: -0.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8203 components: - type: Transform pos: 0.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8204 components: - type: Transform pos: 1.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8205 components: - type: Transform pos: 0.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8206 components: - type: Transform pos: 1.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8213 components: - type: Transform pos: 1.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8214 components: - type: Transform pos: 0.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8215 components: - type: Transform pos: -0.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8216 components: - type: Transform pos: -0.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8217 components: - type: Transform pos: 0.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8218 components: - type: Transform pos: 1.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8228 components: - type: Transform pos: -9.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8229 components: - type: Transform pos: -10.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8230 components: - type: Transform pos: -11.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8236 components: - type: Transform pos: -5.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8238 components: - type: Transform pos: -7.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8239 components: - type: Transform pos: -7.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8244 components: - type: Transform pos: -3.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8253 components: - type: Transform pos: -16.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8260 components: - type: Transform pos: -11.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8261 components: - type: Transform pos: -9.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8262 components: - type: Transform pos: -5.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8263 components: - type: Transform pos: -3.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8296 components: - type: Transform pos: -6.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8297 components: - type: Transform pos: -7.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8299 components: - type: Transform pos: -8.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8343 components: - type: Transform pos: -29.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8363 components: - type: Transform pos: -38.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8364 components: - type: Transform pos: -38.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8365 components: - type: Transform pos: -38.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8366 components: - type: Transform pos: -38.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8367 components: - type: Transform pos: -36.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8368 components: - type: Transform pos: -36.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8369 components: - type: Transform pos: -36.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8370 components: - type: Transform pos: -36.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8377 components: - type: Transform pos: -82.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8522 components: - type: Transform pos: -34.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8529 components: - type: Transform pos: -32.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8708 components: - type: Transform pos: -5.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8709 components: - type: Transform pos: -3.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8710 components: - type: Transform pos: -4.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8711 components: - type: Transform pos: -3.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8714 components: - type: Transform pos: -4.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8715 components: - type: Transform pos: -3.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8716 components: - type: Transform pos: -5.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8729 components: - type: Transform pos: -7.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8737 components: - type: Transform pos: -7.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8738 components: - type: Transform pos: -7.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8739 components: - type: Transform pos: -7.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8740 components: - type: Transform pos: -7.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8920 components: - type: Transform pos: -14.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8938 components: - type: Transform pos: -14.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9034 components: - type: Transform pos: -90.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9098 components: - type: Transform pos: -106.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9324 components: - type: Transform pos: -30.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9539 components: - type: Transform pos: -97.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9549 components: - type: Transform pos: -95.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9788 components: - type: Transform pos: -32.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9838 components: - type: Transform pos: -136.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9958 components: - type: Transform pos: -16.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9964 components: - type: Transform pos: -16.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9980 components: - type: Transform pos: -95.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9981 components: - type: Transform pos: -93.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9982 components: - type: Transform pos: -93.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9983 components: - type: Transform pos: -93.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9986 components: - type: Transform pos: -95.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9987 components: - type: Transform pos: -93.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10035 components: - type: Transform pos: -140.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10084 components: - type: Transform pos: -34.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10087 components: - type: Transform pos: -32.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10488 components: - type: Transform pos: -16.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10528 components: - type: Transform pos: -83.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11035 components: - type: Transform pos: -28.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11047 components: - type: Transform pos: -34.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11048 components: - type: Transform pos: -34.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11059 components: - type: Transform pos: -108.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11076 components: - type: Transform pos: -32.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11080 components: - type: Transform pos: -28.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11092 components: - type: Transform pos: -30.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11358 components: - type: Transform pos: -22.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11359 components: - type: Transform pos: -22.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11710 components: - type: Transform pos: -99.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11716 components: - type: Transform pos: -99.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12425 components: - type: Transform pos: -28.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12450 components: - type: Transform pos: -101.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12546 components: - type: Transform pos: -31.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12588 components: - type: Transform pos: -126.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12748 components: - type: Transform pos: -133.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12840 components: - type: Transform pos: -13.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12855 components: - type: Transform pos: -101.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13241 components: - type: Transform pos: -138.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13248 components: - type: Transform pos: -31.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13523 components: - type: Transform pos: -140.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13879 components: - type: Transform pos: -138.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14003 components: - type: Transform pos: -137.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14499 components: - type: Transform pos: -13.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15407 components: - type: Transform pos: -125.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16087 components: - type: Transform pos: -106.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16091 components: - type: Transform pos: -123.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16141 components: - type: Transform pos: -93.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16488 components: - type: Transform pos: -137.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16505 components: - type: Transform pos: -138.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16695 components: - type: Transform pos: -129.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16716 components: - type: Transform pos: -33.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16836 components: - type: Transform pos: -107.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16906 components: - type: Transform pos: -22.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17005 components: - type: Transform pos: -115.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17075 components: - type: Transform pos: -86.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17161 components: - type: Transform pos: -31.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17164 components: - type: Transform pos: -35.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17359 components: - type: Transform pos: -127.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17513 components: - type: Transform pos: -136.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17538 components: - type: Transform pos: -140.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17651 components: - type: Transform pos: -14.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18193 components: - type: Transform pos: -95.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18686 components: - type: Transform pos: -95.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18726 components: - type: Transform pos: -138.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18833 components: - type: Transform pos: -97.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18937 components: - type: Transform pos: -95.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18941 components: - type: Transform pos: -95.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19623 components: - type: Transform pos: -114.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19629 components: - type: Transform pos: -115.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19750 components: - type: Transform pos: -113.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19752 components: - type: Transform pos: -69.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19864 components: - type: Transform pos: -67.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19914 components: - type: Transform pos: -101.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20160 components: - type: Transform pos: -139.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20167 components: - type: Transform pos: -123.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20277 components: - type: Transform pos: -139.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20319 components: - type: Transform pos: -57.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20329 components: - type: Transform pos: -128.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20445 components: - type: Transform pos: -119.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20449 components: - type: Transform pos: -122.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20450 components: - type: Transform pos: -122.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20456 components: - type: Transform pos: -121.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20466 components: - type: Transform pos: -120.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20503 components: - type: Transform pos: -92.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20563 components: - type: Transform pos: -101.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20564 components: - type: Transform pos: -92.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20734 components: - type: Transform pos: -92.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20736 components: - type: Transform pos: -92.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20780 components: - type: Transform pos: -97.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20844 components: - type: Transform pos: -36.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20936 components: - type: Transform pos: -93.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21002 components: - type: Transform pos: -104.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21491 components: - type: Transform pos: -18.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21492 components: - type: Transform pos: -20.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21493 components: - type: Transform pos: -19.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21873 components: - type: Transform pos: -36.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21874 components: - type: Transform pos: -33.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21879 components: - type: Transform pos: -141.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22701 components: - type: Transform pos: -39.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22904 components: - type: Transform pos: -141.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22936 components: - type: Transform pos: -43.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22962 components: - type: Transform pos: -44.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22963 components: - type: Transform pos: -42.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23053 components: - type: Transform pos: -91.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23504 components: - type: Transform pos: -95.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23751 components: - type: Transform pos: -21.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23752 components: - type: Transform pos: -20.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24036 components: - type: Transform pos: -93.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24115 components: - type: Transform pos: -16.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24214 components: - type: Transform pos: -32.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24215 components: - type: Transform pos: -34.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24333 components: - type: Transform pos: -19.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24334 components: - type: Transform pos: -18.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25403 components: - type: Transform pos: -113.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25986 components: - type: Transform pos: -110.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: RemoteSignaller entities: - uid: 3377 @@ -140132,120 +140914,166 @@ entities: - type: Transform pos: -24.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 138 components: - type: Transform pos: -26.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7272 components: - type: Transform pos: -115.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7273 components: - type: Transform pos: -113.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7274 components: - type: Transform pos: -114.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7275 components: - type: Transform pos: -113.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7276 components: - type: Transform pos: -114.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7277 components: - type: Transform pos: -115.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8820 components: - type: Transform pos: -13.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8821 components: - type: Transform pos: -13.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8822 components: - type: Transform pos: -13.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9078 components: - type: Transform pos: -35.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9414 components: - type: Transform pos: -34.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9769 components: - type: Transform pos: -33.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11133 components: - type: Transform rot: -1.5707963267948966 rad pos: -95.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11176 components: - type: Transform rot: -1.5707963267948966 rad pos: -95.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11330 components: - type: Transform rot: -1.5707963267948966 rad pos: -95.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11783 components: - type: Transform rot: -1.5707963267948966 rad pos: -95.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15252 components: - type: Transform pos: -33.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15282 components: - type: Transform pos: -34.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15283 components: - type: Transform pos: -35.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19536 components: - type: Transform pos: -89.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19537 components: - type: Transform pos: -88.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersNormalOpen entities: - uid: 399 @@ -140253,27 +141081,37 @@ entities: - type: Transform pos: -50.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1716 components: - type: Transform pos: -18.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1763 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2958 components: - type: Transform pos: -47.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2959 components: - type: Transform pos: -49.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 2 - uid: 2960 @@ -140281,26 +141119,36 @@ entities: - type: Transform pos: -49.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2962 components: - type: Transform pos: -52.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2963 components: - type: Transform pos: -51.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2964 components: - type: Transform pos: -48.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2998 components: - type: Transform pos: -53.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3344 @@ -140309,6 +141157,8 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3382 @@ -140317,6 +141167,8 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3830 @@ -140325,6 +141177,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3831 @@ -140333,6 +141187,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3832 @@ -140341,6 +141197,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3833 @@ -140349,6 +141207,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3997 @@ -140357,6 +141217,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3998 @@ -140365,6 +141227,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 3999 @@ -140373,6 +141237,8 @@ entities: rot: -1.5707963267948966 rad pos: -56.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4456 @@ -140381,6 +141247,8 @@ entities: rot: 1.5707963267948966 rad pos: -121.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4457 @@ -140388,6 +141256,8 @@ entities: - type: Transform pos: -120.5,-81.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4459 @@ -140396,6 +141266,8 @@ entities: rot: -1.5707963267948966 rad pos: -126.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4466 @@ -140404,6 +141276,8 @@ entities: rot: -1.5707963267948966 rad pos: -124.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4467 @@ -140412,6 +141286,8 @@ entities: rot: -1.5707963267948966 rad pos: -124.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4468 @@ -140420,6 +141296,8 @@ entities: rot: -1.5707963267948966 rad pos: -119.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 4469 @@ -140428,6 +141306,8 @@ entities: rot: -1.5707963267948966 rad pos: -124.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 5039 @@ -140435,47 +141315,65 @@ entities: - type: Transform pos: -19.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6265 components: - type: Transform pos: -125.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6306 components: - type: Transform pos: -121.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6307 components: - type: Transform pos: -121.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6308 components: - type: Transform pos: -121.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6310 components: - type: Transform pos: -126.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7778 components: - type: Transform pos: -20.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8901 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11616 components: - type: Transform pos: -30.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11619 @@ -140483,6 +141381,8 @@ entities: - type: Transform pos: -28.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11620 @@ -140490,6 +141390,8 @@ entities: - type: Transform pos: -28.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11621 @@ -140497,6 +141399,8 @@ entities: - type: Transform pos: -30.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11622 @@ -140505,6 +141409,8 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11623 @@ -140513,6 +141419,8 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11624 @@ -140521,6 +141429,8 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 13038 @@ -140529,18 +141439,24 @@ entities: rot: -1.5707963267948966 rad pos: -101.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13042 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14139 components: - type: Transform rot: 1.5707963267948966 rad pos: -131.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 14140 @@ -140549,6 +141465,8 @@ entities: rot: 1.5707963267948966 rad pos: -131.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 14141 @@ -140557,6 +141475,8 @@ entities: rot: 1.5707963267948966 rad pos: -131.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 14142 @@ -140565,6 +141485,8 @@ entities: rot: 1.5707963267948966 rad pos: -131.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 17815 @@ -140573,6 +141495,8 @@ entities: rot: -1.5707963267948966 rad pos: -93.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 17819 @@ -140581,6 +141505,8 @@ entities: rot: -1.5707963267948966 rad pos: -93.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 17820 @@ -140589,6 +141515,8 @@ entities: rot: -1.5707963267948966 rad pos: -93.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 19528 @@ -140597,70 +141525,94 @@ entities: rot: 1.5707963267948966 rad pos: -85.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19529 components: - type: Transform rot: 1.5707963267948966 rad pos: -85.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19530 components: - type: Transform rot: 1.5707963267948966 rad pos: -85.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19531 components: - type: Transform rot: 1.5707963267948966 rad pos: -83.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19532 components: - type: Transform rot: 1.5707963267948966 rad pos: -83.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19533 components: - type: Transform rot: 1.5707963267948966 rad pos: -83.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19534 components: - type: Transform pos: -85.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19535 components: - type: Transform pos: -87.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22373 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22374 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22375 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25385 components: - type: Transform rot: -1.5707963267948966 rad pos: -126.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25386 @@ -140669,6 +141621,8 @@ entities: rot: -1.5707963267948966 rad pos: -126.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25387 @@ -140677,6 +141631,8 @@ entities: rot: 1.5707963267948966 rad pos: -116.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25388 @@ -140685,6 +141641,8 @@ entities: rot: 1.5707963267948966 rad pos: -116.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25389 @@ -140693,6 +141651,8 @@ entities: rot: 1.5707963267948966 rad pos: -116.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25390 @@ -140701,6 +141661,8 @@ entities: rot: 1.5707963267948966 rad pos: -114.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25391 @@ -140709,6 +141671,8 @@ entities: rot: 1.5707963267948966 rad pos: -114.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25392 @@ -140717,6 +141681,8 @@ entities: rot: 1.5707963267948966 rad pos: -114.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 25623 @@ -140725,24 +141691,32 @@ entities: rot: 1.5707963267948966 rad pos: -66.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25624 components: - type: Transform rot: 1.5707963267948966 rad pos: -66.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25625 components: - type: Transform rot: 1.5707963267948966 rad pos: -66.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25626 components: - type: Transform rot: 1.5707963267948966 rad pos: -66.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersWindow entities: - uid: 3976 @@ -140750,6 +141724,8 @@ entities: - type: Transform pos: -25.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersWindowOpen entities: - uid: 11617 @@ -140757,6 +141733,8 @@ entities: - type: Transform pos: -29.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 11618 @@ -140764,6 +141742,8 @@ entities: - type: Transform pos: -29.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - proto: ShuttleConsoleCircuitboard @@ -140780,6 +141760,8 @@ entities: - type: Transform pos: -42.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: SignAi entities: - uid: 21670 @@ -147823,18 +148805,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - proto: SuitStorageHOS entities: - uid: 6775 @@ -147886,18 +148858,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -147924,18 +148886,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -147962,18 +148914,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -148000,18 +148942,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -149971,6 +150903,11 @@ entities: - type: Transform pos: -60.35623,-4.475757 parent: 2 + - uid: 6481 + components: + - type: Transform + pos: -36.23253,-30.543175 + parent: 2 - uid: 7290 components: - type: Transform @@ -149981,6 +150918,11 @@ entities: - type: Transform pos: -149.48795,-42.47385 parent: 2 + - uid: 7609 + components: + - type: Transform + pos: -134.52573,-43.445347 + parent: 2 - proto: Table entities: - uid: 699 @@ -152609,131 +153551,183 @@ entities: - type: Transform pos: -55.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1474 components: - type: Transform pos: -51.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2392 components: - type: Transform pos: -124.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3552 components: - type: Transform pos: -55.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4059 components: - type: Transform pos: -20.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4060 components: - type: Transform pos: -20.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4061 components: - type: Transform pos: -20.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4063 components: - type: Transform pos: -20.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4375 components: - type: Transform pos: -114.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4376 components: - type: Transform pos: -114.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6707 components: - type: Transform pos: -19.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6842 components: - type: Transform pos: -89.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6967 components: - type: Transform pos: -89.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9233 components: - type: Transform pos: -43.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9249 components: - type: Transform pos: -43.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9257 components: - type: Transform pos: -43.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9329 components: - type: Transform pos: -22.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11000 components: - type: Transform pos: -22.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11797 components: - type: Transform pos: -27.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13229 components: - type: Transform pos: -19.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16048 components: - type: Transform pos: -87.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17298 components: - type: Transform pos: -126.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19403 components: - type: Transform pos: -56.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26064 components: - type: Transform pos: -120.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26065 components: - type: Transform pos: -118.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26110 components: - type: Transform pos: -27.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ToiletDirtyWater entities: - uid: 356 @@ -170306,18 +171300,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -171007,17 +171991,23 @@ entities: rot: -1.5707963267948966 rad pos: -53.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2059 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2967 components: - type: Transform pos: -49.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -171031,6 +172021,8 @@ entities: rot: -1.5707963267948966 rad pos: -93.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -171044,6 +172036,8 @@ entities: rot: -1.5707963267948966 rad pos: -50.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorHydroponicsLocked entities: - uid: 6138 @@ -171052,11 +172046,13 @@ entities: rot: 3.141592653589793 rad pos: -54.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSource lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -261472.55 + secondsUntilStateChange: -261617.84 state: Opening - type: Airlock autoClose: False @@ -171066,18 +172062,24 @@ entities: rot: 1.5707963267948966 rad pos: -56.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23313 components: - type: Transform rot: 1.5707963267948966 rad pos: -56.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23429 components: - type: Transform rot: 1.5707963267948966 rad pos: -56.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorKitchenLocked entities: - uid: 6506 @@ -171085,6 +172087,8 @@ entities: - type: Transform pos: -54.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecure entities: - uid: 1715 @@ -171093,6 +172097,8 @@ entities: rot: -1.5707963267948966 rad pos: -27.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -171108,6 +172114,8 @@ entities: rot: 1.5707963267948966 rad pos: -93.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -171121,18 +172129,24 @@ entities: rot: 3.141592653589793 rad pos: -91.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9624 components: - type: Transform rot: 3.141592653589793 rad pos: -90.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26478 components: - type: Transform rot: 3.141592653589793 rad pos: -92.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureAtmosphericsLocked entities: - uid: 2090 @@ -171141,12 +172155,16 @@ entities: rot: 3.141592653589793 rad pos: -110.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5730 components: - type: Transform rot: 3.141592653589793 rad pos: -108.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureCargoLocked entities: - uid: 11109 @@ -171155,18 +172173,24 @@ entities: rot: 3.141592653589793 rad pos: -102.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25555 components: - type: Transform rot: -1.5707963267948966 rad pos: -97.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25849 components: - type: Transform rot: 3.141592653589793 rad pos: -100.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureChemistryLocked entities: - uid: 3922 @@ -171174,23 +172198,31 @@ entities: - type: Transform pos: -38.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3923 components: - type: Transform rot: 3.141592653589793 rad pos: -38.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22702 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23992 components: - type: Transform pos: -37.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureEngineeringLocked entities: - uid: 5724 @@ -171198,17 +172230,23 @@ entities: - type: Transform pos: -110.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5729 components: - type: Transform pos: -108.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 25601 components: - type: Transform rot: 3.141592653589793 rad pos: -120.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 2966 @@ -171217,6 +172255,8 @@ entities: rot: 3.141592653589793 rad pos: -49.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 2 - type: DeviceLinkSource @@ -171232,12 +172272,16 @@ entities: rot: 1.5707963267948966 rad pos: -20.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19617 components: - type: Transform rot: 1.5707963267948966 rad pos: -20.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureMedicalLocked entities: - uid: 3975 @@ -171246,12 +172290,16 @@ entities: rot: 1.5707963267948966 rad pos: -27.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24545 components: - type: Transform rot: 1.5707963267948966 rad pos: -31.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecurePlasma entities: - uid: 21052 @@ -171259,6 +172307,8 @@ entities: - type: Transform pos: -38.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSource linkedPorts: 21056: @@ -171272,6 +172322,8 @@ entities: rot: 3.141592653589793 rad pos: -95.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureScienceLocked entities: - uid: 7302 @@ -171279,12 +172331,16 @@ entities: - type: Transform pos: -120.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7303 components: - type: Transform rot: 3.141592653589793 rad pos: -120.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureSecurityLocked entities: - uid: 24033 @@ -171293,6 +172349,8 @@ entities: rot: 1.5707963267948966 rad pos: -27.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -171308,24 +172366,32 @@ entities: rot: 1.5707963267948966 rad pos: -19.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20026 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26077 components: - type: Transform rot: 3.141592653589793 rad pos: -50.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26078 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorServiceLocked entities: - uid: 14529 @@ -171334,12 +172400,16 @@ entities: rot: 1.5707963267948966 rad pos: -96.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14531 components: - type: Transform rot: 1.5707963267948966 rad pos: -96.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorTheatreLocked entities: - uid: 3372 @@ -171348,6 +172418,8 @@ entities: rot: 1.5707963267948966 rad pos: -62.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Window entities: - uid: 162 @@ -171355,226 +172427,316 @@ entities: - type: Transform pos: -34.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 169 components: - type: Transform pos: -33.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 170 components: - type: Transform pos: -32.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 292 components: - type: Transform pos: -31.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 497 components: - type: Transform pos: -31.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 809 components: - type: Transform pos: -104.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1265 components: - type: Transform pos: -24.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1272 components: - type: Transform pos: -24.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1273 components: - type: Transform pos: -24.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1279 components: - type: Transform pos: -24.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1286 components: - type: Transform pos: -24.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1288 components: - type: Transform pos: -24.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1409 components: - type: Transform pos: -27.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1425 components: - type: Transform pos: -27.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1566 components: - type: Transform pos: -31.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1568 components: - type: Transform pos: -27.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1624 components: - type: Transform pos: -27.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1631 components: - type: Transform pos: -27.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1635 components: - type: Transform pos: -27.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1636 components: - type: Transform pos: -27.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4109 components: - type: Transform pos: -27.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6960 components: - type: Transform pos: -102.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9225 components: - type: Transform pos: -31.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9297 components: - type: Transform pos: -30.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11011 components: - type: Transform pos: -28.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11017 components: - type: Transform pos: -27.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11018 components: - type: Transform pos: -29.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11024 components: - type: Transform pos: -30.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11025 components: - type: Transform pos: -29.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11028 components: - type: Transform pos: -28.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11029 components: - type: Transform pos: -27.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11030 components: - type: Transform pos: -31.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11784 components: - type: Transform pos: -105.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14570 components: - type: Transform pos: -64.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14595 components: - type: Transform pos: -64.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15921 components: - type: Transform pos: -105.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17183 components: - type: Transform pos: -61.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18600 components: - type: Transform pos: -72.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20548 components: - type: Transform pos: -101.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23215 components: - type: Transform pos: -102.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23418 components: - type: Transform pos: -101.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23419 components: - type: Transform pos: -99.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23446 components: - type: Transform pos: -100.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24342 components: - type: Transform pos: -25.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24343 components: - type: Transform pos: -23.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowDirectional entities: - uid: 886 @@ -171583,132 +172745,178 @@ entities: rot: 1.5707963267948966 rad pos: -48.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 887 components: - type: Transform rot: 1.5707963267948966 rad pos: -48.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 893 components: - type: Transform rot: 1.5707963267948966 rad pos: -48.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 894 components: - type: Transform rot: 1.5707963267948966 rad pos: -48.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1805 components: - type: Transform pos: -50.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2361 components: - type: Transform pos: -53.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2563 components: - type: Transform rot: 3.141592653589793 rad pos: -53.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7751 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9113 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9114 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9115 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14855 components: - type: Transform rot: 3.141592653589793 rad pos: -53.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15245 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15622 components: - type: Transform rot: 3.141592653589793 rad pos: -51.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16396 components: - type: Transform pos: -53.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16409 components: - type: Transform pos: -52.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16412 components: - type: Transform pos: -51.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16751 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16753 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16754 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16771 components: - type: Transform rot: 3.141592653589793 rad pos: -50.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16772 components: - type: Transform rot: 3.141592653589793 rad pos: -52.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20804 components: - type: Transform pos: -49.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowFrostedDirectional entities: - uid: 2847 @@ -171717,46 +172925,62 @@ entities: rot: 1.5707963267948966 rad pos: -43.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3893 components: - type: Transform rot: -1.5707963267948966 rad pos: -41.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3902 components: - type: Transform rot: -1.5707963267948966 rad pos: -41.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5643 components: - type: Transform rot: 1.5707963267948966 rad pos: -96.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14204 components: - type: Transform rot: 1.5707963267948966 rad pos: -96.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14205 components: - type: Transform rot: 1.5707963267948966 rad pos: -96.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22301 components: - type: Transform pos: -44.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22302 components: - type: Transform pos: -46.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowReinforcedDirectional entities: - uid: 2069 @@ -171765,318 +172989,432 @@ entities: rot: 3.141592653589793 rad pos: -109.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2086 components: - type: Transform rot: 3.141592653589793 rad pos: -111.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2255 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2258 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2308 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2830 components: - type: Transform rot: 3.141592653589793 rad pos: -64.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2831 components: - type: Transform rot: 3.141592653589793 rad pos: -63.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2832 components: - type: Transform rot: -1.5707963267948966 rad pos: -62.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2833 components: - type: Transform rot: 1.5707963267948966 rad pos: -60.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2834 components: - type: Transform pos: -58.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2835 components: - type: Transform pos: -59.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2836 components: - type: Transform rot: 3.141592653589793 rad pos: -58.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2837 components: - type: Transform rot: 1.5707963267948966 rad pos: -60.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2838 components: - type: Transform pos: -63.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2839 components: - type: Transform rot: 3.141592653589793 rad pos: -59.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2840 components: - type: Transform pos: -64.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2841 components: - type: Transform rot: -1.5707963267948966 rad pos: -62.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3015 components: - type: Transform pos: -63.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3026 components: - type: Transform pos: -61.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3027 components: - type: Transform pos: -60.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3028 components: - type: Transform pos: -59.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3029 components: - type: Transform pos: -62.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5727 components: - type: Transform pos: -109.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5728 components: - type: Transform pos: -111.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7298 components: - type: Transform rot: 3.141592653589793 rad pos: -121.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7299 components: - type: Transform rot: 3.141592653589793 rad pos: -119.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7300 components: - type: Transform pos: -119.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7301 components: - type: Transform pos: -121.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7530 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7534 components: - type: Transform rot: 3.141592653589793 rad pos: -117.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7535 components: - type: Transform rot: 3.141592653589793 rad pos: -116.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7545 components: - type: Transform rot: 3.141592653589793 rad pos: -115.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7547 components: - type: Transform rot: 3.141592653589793 rad pos: -114.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7571 components: - type: Transform pos: -114.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7580 components: - type: Transform pos: -115.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7581 components: - type: Transform rot: 3.141592653589793 rad pos: -112.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7585 components: - type: Transform rot: 3.141592653589793 rad pos: -111.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7587 components: - type: Transform pos: -116.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7588 components: - type: Transform pos: -117.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7589 components: - type: Transform pos: -111.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7590 components: - type: Transform pos: -112.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7591 components: - type: Transform pos: -118.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7592 components: - type: Transform pos: -121.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7593 components: - type: Transform pos: -113.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7594 components: - type: Transform pos: -122.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7616 components: - type: Transform rot: 3.141592653589793 rad pos: -118.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7644 components: - type: Transform rot: 3.141592653589793 rad pos: -122.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7645 components: - type: Transform rot: 3.141592653589793 rad pos: -113.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7648 components: - type: Transform pos: -119.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8153 components: - type: Transform rot: 3.141592653589793 rad pos: -101.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8553 components: - type: Transform rot: 1.5707963267948966 rad pos: -95.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9515 components: - type: Transform rot: 1.5707963267948966 rad pos: -31.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11135 components: - type: Transform rot: 3.141592653589793 rad pos: -99.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24314 components: - type: Transform rot: 1.5707963267948966 rad pos: -31.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24644 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26076 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26084 components: - type: Transform rot: 1.5707963267948966 rad pos: -49.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Wirecutter entities: - uid: 8868 From d4814df43c8f7280b79e32b3dcec21b059b855bb Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 10 Oct 2025 01:12:43 +0000 Subject: [PATCH 123/216] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 6d59319598..3eb8884988 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -764,4 +764,11 @@ id: 92 time: '2025-10-08T20:41:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40785 +- author: ToastEnjoyer + changes: + - message: On Plasma, added more nitrogen canisters to the maintenance hallways + type: Add + id: 93 + time: '2025-10-10T01:11:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40794 Order: 1 From 6b4c10264e776e07615ddc26dbffb8c9ec096110 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Thu, 9 Oct 2025 21:48:36 -0700 Subject: [PATCH 124/216] Fix Officer's Handgun Objective (#40811) This is like george orwell's book 1984 Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- Resources/Prototypes/Objectives/thief.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/Resources/Prototypes/Objectives/thief.yml b/Resources/Prototypes/Objectives/thief.yml index 80879aae99..fde0779151 100644 --- a/Resources/Prototypes/Objectives/thief.yml +++ b/Resources/Prototypes/Objectives/thief.yml @@ -149,7 +149,6 @@ minCollectionSize: 2 maxCollectionSize: 5 verifyMapExistence: false - checkStealAreas: false - type: Objective difficulty: 1.2 From 566cb710b62a85dc85300b8b78b8fea4d9538b2d Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 10 Oct 2025 05:00:34 +0000 Subject: [PATCH 125/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index de112f2b02..2039da0cb4 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: CoconutThunder - changes: - - message: The Chief Medical Officer should now appear with the correct precedence - in the crew manifest. - type: Fix - id: 8560 - time: '2025-05-24T05:10:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37774 - author: TiniestShark changes: - message: Added inhand sprites for the bartender utensils and mugs. @@ -3949,3 +3941,10 @@ id: 9062 time: '2025-10-09T14:00:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40790 +- author: Princess-Cheeseballs + changes: + - message: The thieving beacon can now detect the officer's handgun objective. + type: Fix + id: 9063 + time: '2025-10-10T04:59:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40811 From 9964fe9a6bf83918cdde882b2860ce84cc73c467 Mon Sep 17 00:00:00 2001 From: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com> Date: Fri, 10 Oct 2025 08:30:34 -0400 Subject: [PATCH 126/216] Replaces D&D5e-based paladin lawset with PF2e-based laws (#40343) * Replace D&D5e paladin laws with PF2e paladin laws * Truncated law 2 --- Resources/Locale/en-US/station-laws/laws.ftl | 9 ++++----- Resources/Prototypes/silicon-laws.yml | 6 ------ 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index 1200d25dee..ea4e94e224 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -36,11 +36,10 @@ law-commandments-8 = Thou shall not steal. law-commandments-9 = Thou shall not lie. law-commandments-10 = Thou shall not transfer departments. -law-paladin-1 = Don't lie or cheat. Let your word be your promise. -law-paladin-2 = Never fear to act, though caution is wise. -law-paladin-3 = Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom -law-paladin-4 = Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm. -law-paladin-5 = Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you. +law-paladin-1 = You must never willingly commit an evil act, such as murder, torture, or the casting of an evil spell. +law-paladin-2 = You must never knowingly harm an innocent, or allow immediate harm to one through inaction when you know you could reasonably prevent it. +law-paladin-3 = You must act with honor, never taking advantage of others, lying, or cheating. +law-paladin-4 = You must respect the lawful authority of legitimate leadership wherever you go, and follow its laws. law-lall-1 = Do unto others as you would have them do unto you. law-lall-2 = You would prefer it if people were not mean to you. diff --git a/Resources/Prototypes/silicon-laws.yml b/Resources/Prototypes/silicon-laws.yml index 08f4a51c99..094d096b28 100644 --- a/Resources/Prototypes/silicon-laws.yml +++ b/Resources/Prototypes/silicon-laws.yml @@ -250,11 +250,6 @@ order: 4 lawString: law-paladin-4 -- type: siliconLaw - id: Paladin5 - order: 5 - lawString: law-paladin-5 - - type: siliconLawset id: PaladinLawset @@ -263,7 +258,6 @@ - Paladin2 - Paladin3 - Paladin4 - - Paladin5 obeysTo: laws-owner-crew # Live and Let Live laws From 1fca29a1675629c5910ba53ea91e07d1a16d98a4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 10 Oct 2025 12:43:05 +0000 Subject: [PATCH 127/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2039da0cb4..bc5e811a0c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: TiniestShark - changes: - - message: Added inhand sprites for the bartender utensils and mugs. - type: Add - id: 8561 - time: '2025-05-24T17:32:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37771 - author: K-Dynamic changes: - message: Shutters and blast doors now appear welded when welded. @@ -3948,3 +3941,10 @@ id: 9063 time: '2025-10-10T04:59:26.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40811 +- author: Hitlinemoss + changes: + - message: The Paladin AI lawset has been rewritten. + type: Tweak + id: 9064 + time: '2025-10-10T12:41:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40343 From 766c2b875948851c1944fd22275b267d0b1131d0 Mon Sep 17 00:00:00 2001 From: qwerltaz <69696513+qwerltaz@users.noreply.github.com> Date: Fri, 10 Oct 2025 21:41:21 +0200 Subject: [PATCH 128/216] fix singulo generator triggering failsafe when field is obstructed (#39593) fix singulo gen failsafe when field obstructed --- .../Singularity/EntitySystems/SingularityGeneratorSystem.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Server/Singularity/EntitySystems/SingularityGeneratorSystem.cs b/Content.Server/Singularity/EntitySystems/SingularityGeneratorSystem.cs index 8e33410561..884d625045 100644 --- a/Content.Server/Singularity/EntitySystems/SingularityGeneratorSystem.cs +++ b/Content.Server/Singularity/EntitySystems/SingularityGeneratorSystem.cs @@ -176,9 +176,10 @@ public sealed class SingularityGeneratorSystem : SharedSingularityGeneratorSyste foreach (var result in rayCastResults) { - if (genQuery.HasComponent(result.HitEntity)) - closestResult = result; + if (!genQuery.HasComponent(result.HitEntity)) + continue; + closestResult = result; break; } From 3503cb52d28eb44a9c3a1a18b13d1a82e8110d66 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 10 Oct 2025 13:45:48 -0600 Subject: [PATCH 129/216] Refactor Crayons to use shared charges system and autonetworking. Adds auto recharging crayon. (#40575) * Added special crayon with infinite charges for borg usage. * Use battery system to manage charges. * Reverted extra changes * Set charge on init * removed init assignment * Added comments to crayoncomponent * tweaked comments * Working with the new charges component, but at what cost? * Remvoed extra field * Apply suggestion from @slarticodefast Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Apply suggestion from @slarticodefast Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Apply suggestion from @slarticodefast Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Apply suggestion from @slarticodefast Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Fix renamed variables and descriptions in comments * Variable naming, comment cleanup and autonetworking. * Fix for test case, modified on init * Cleaned up/merged charges logic * review --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Client/Crayon/CrayonComponent.cs | 14 --- Content.Client/Crayon/CrayonSystem.cs | 49 +++----- Content.Server/Crayon/CrayonComponent.cs | 28 ----- Content.Server/Crayon/CrayonSystem.cs | 48 +++---- Content.Shared/Crayon/CrayonComponent.cs | 119 ++++++++++++++++++ .../Crayon/SharedCrayonComponent.cs | 113 ----------------- .../Entities/Objects/Fun/crayons.yml | 17 ++- 7 files changed, 169 insertions(+), 219 deletions(-) delete mode 100644 Content.Client/Crayon/CrayonComponent.cs delete mode 100644 Content.Server/Crayon/CrayonComponent.cs create mode 100644 Content.Shared/Crayon/CrayonComponent.cs delete mode 100644 Content.Shared/Crayon/SharedCrayonComponent.cs diff --git a/Content.Client/Crayon/CrayonComponent.cs b/Content.Client/Crayon/CrayonComponent.cs deleted file mode 100644 index 5729c616c2..0000000000 --- a/Content.Client/Crayon/CrayonComponent.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Content.Shared.Crayon; -using Robust.Shared.GameObjects; -using Robust.Shared.ViewVariables; - -namespace Content.Client.Crayon -{ - [RegisterComponent] - public sealed partial class CrayonComponent : SharedCrayonComponent - { - [ViewVariables(VVAccess.ReadWrite)] public bool UIUpdateNeeded; - [ViewVariables] public int Charges { get; set; } - [ViewVariables] public int Capacity { get; set; } - } -} diff --git a/Content.Client/Crayon/CrayonSystem.cs b/Content.Client/Crayon/CrayonSystem.cs index dc03979481..e990263bf3 100644 --- a/Content.Client/Crayon/CrayonSystem.cs +++ b/Content.Client/Crayon/CrayonSystem.cs @@ -1,67 +1,52 @@ using Content.Client.Items; using Content.Client.Message; using Content.Client.Stylesheets; +using Content.Shared.Charges.Components; +using Content.Shared.Charges.Systems; using Content.Shared.Crayon; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.GameObjects; -using Robust.Shared.GameStates; -using Robust.Shared.Localization; using Robust.Shared.Timing; namespace Content.Client.Crayon; public sealed class CrayonSystem : SharedCrayonSystem { - // Didn't do in shared because I don't think most of the server stuff can be predicted. + [Dependency] private readonly SharedChargesSystem _charges = default!; + [Dependency] private readonly EntityManager _entityManager = default!; + public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnCrayonHandleState); - Subs.ItemStatus(ent => new StatusControl(ent)); - } - private static void OnCrayonHandleState(EntityUid uid, CrayonComponent component, ref ComponentHandleState args) - { - if (args.Current is not CrayonComponentState state) return; - - component.Color = state.Color; - component.SelectedState = state.State; - component.Charges = state.Charges; - component.Capacity = state.Capacity; - - component.UIUpdateNeeded = true; + Subs.ItemStatus(ent => new StatusControl(ent, _charges, _entityManager)); } private sealed class StatusControl : Control { - private readonly CrayonComponent _parent; + private readonly Entity _crayon; + private readonly SharedChargesSystem _charges; private readonly RichTextLabel _label; + private readonly int _capacity; - public StatusControl(CrayonComponent parent) + public StatusControl(Entity crayon, SharedChargesSystem charges, EntityManager entityManage) { - _parent = parent; + _crayon = crayon; + _charges = charges; + _capacity = entityManage.GetComponent(_crayon.Owner).MaxCharges; _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; AddChild(_label); - - parent.UIUpdateNeeded = true; } protected override void FrameUpdate(FrameEventArgs args) { base.FrameUpdate(args); - if (!_parent.UIUpdateNeeded) - { - return; - } - - _parent.UIUpdateNeeded = false; _label.SetMarkup(Robust.Shared.Localization.Loc.GetString("crayon-drawing-label", - ("color",_parent.Color), - ("state",_parent.SelectedState), - ("charges", _parent.Charges), - ("capacity",_parent.Capacity))); + ("color",_crayon.Comp.Color), + ("state",_crayon.Comp.SelectedState), + ("charges", _charges.GetCurrentCharges(_crayon.Owner)), + ("capacity", _capacity))); } } } diff --git a/Content.Server/Crayon/CrayonComponent.cs b/Content.Server/Crayon/CrayonComponent.cs deleted file mode 100644 index df20681938..0000000000 --- a/Content.Server/Crayon/CrayonComponent.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Server.UserInterface; -using Content.Shared.Crayon; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; - -namespace Content.Server.Crayon -{ - [RegisterComponent] - public sealed partial class CrayonComponent : SharedCrayonComponent - { - [DataField("useSound")] public SoundSpecifier? UseSound; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("selectableColor")] - public bool SelectableColor { get; set; } - - [ViewVariables(VVAccess.ReadWrite)] - public int Charges { get; set; } - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("capacity")] - public int Capacity { get; set; } = 30; - - [ViewVariables(VVAccess.ReadWrite)] - [DataField("deleteEmpty")] - public bool DeleteEmpty = true; - } -} diff --git a/Content.Server/Crayon/CrayonSystem.cs b/Content.Server/Crayon/CrayonSystem.cs index f3abc2bf7a..07b580fba5 100644 --- a/Content.Server/Crayon/CrayonSystem.cs +++ b/Content.Server/Crayon/CrayonSystem.cs @@ -3,6 +3,7 @@ using System.Numerics; using Content.Server.Administration.Logs; using Content.Server.Decals; using Content.Server.Popups; +using Content.Shared.Charges.Systems; using Content.Shared.Crayon; using Content.Shared.Database; using Content.Shared.Decals; @@ -12,7 +13,6 @@ using Content.Shared.Nutrition.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; -using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Server.Crayon; @@ -24,23 +24,27 @@ public sealed class CrayonSystem : SharedCrayonSystem [Dependency] private readonly DecalSystem _decals = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnCrayonInit); + + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnCrayonBoundUI); SubscribeLocalEvent(OnCrayonBoundUIColor); SubscribeLocalEvent(OnCrayonUse, before: new[] { typeof(FoodSystem) }); SubscribeLocalEvent(OnCrayonAfterInteract, after: new[] { typeof(FoodSystem) }); SubscribeLocalEvent(OnCrayonDropped); - SubscribeLocalEvent(OnCrayonGetState); } - private static void OnCrayonGetState(EntityUid uid, CrayonComponent component, ref ComponentGetState args) + private void OnMapInit(Entity ent, ref MapInitEvent args) { - args.State = new CrayonComponentState(component.Color, component.SelectedState, component.Charges, component.Capacity); + // Get the first one from the catalog and set it as default + var decal = _prototypeManager.EnumeratePrototypes().FirstOrDefault(x => x.Tags.Contains("crayon")); + ent.Comp.SelectedState = decal?.ID ?? string.Empty; + Dirty(ent); } private void OnCrayonAfterInteract(EntityUid uid, CrayonComponent component, AfterInteractEvent args) @@ -48,7 +52,7 @@ public sealed class CrayonSystem : SharedCrayonSystem if (args.Handled || !args.CanReach) return; - if (component.Charges <= 0) + if (_charges.IsEmpty(uid)) { if (component.DeleteEmpty) UseUpCrayon(uid, args.User); @@ -72,17 +76,15 @@ public sealed class CrayonSystem : SharedCrayonSystem if (component.UseSound != null) _audio.PlayPvs(component.UseSound, uid, AudioParams.Default.WithVariation(0.125f)); - // Decrease "Ammo" - component.Charges--; - Dirty(uid, component); + _charges.TryUseCharge(uid); _adminLogger.Add(LogType.CrayonDraw, LogImpact.Low, $"{ToPrettyString(args.User):user} drew a {component.Color:color} {component.SelectedState}"); args.Handled = true; - if (component.DeleteEmpty && component.Charges <= 0) + if (component.DeleteEmpty && _charges.IsEmpty(uid)) UseUpCrayon(uid, args.User); else - _uiSystem.ServerSendUiMessage(uid, SharedCrayonComponent.CrayonUiKey.Key, new CrayonUsedMessage(component.SelectedState)); + _uiSystem.ServerSendUiMessage(uid, CrayonUiKey.Key, new CrayonUsedMessage(component.SelectedState)); } private void OnCrayonUse(EntityUid uid, CrayonComponent component, UseInHandEvent args) @@ -91,14 +93,12 @@ public sealed class CrayonSystem : SharedCrayonSystem if (args.Handled) return; - if (!_uiSystem.HasUi(uid, SharedCrayonComponent.CrayonUiKey.Key)) - { + if (!_uiSystem.HasUi(uid, CrayonUiKey.Key)) return; - } - _uiSystem.TryToggleUi(uid, SharedCrayonComponent.CrayonUiKey.Key, args.User); + _uiSystem.TryToggleUi(uid, CrayonUiKey.Key, args.User); - _uiSystem.SetUiState(uid, SharedCrayonComponent.CrayonUiKey.Key, new CrayonBoundUserInterfaceState(component.SelectedState, component.SelectableColor, component.Color)); + _uiSystem.SetUiState(uid, CrayonUiKey.Key, new CrayonBoundUserInterfaceState(component.SelectedState, component.SelectableColor, component.Color)); args.Handled = true; } @@ -109,35 +109,23 @@ public sealed class CrayonSystem : SharedCrayonSystem return; component.SelectedState = args.State; - Dirty(uid, component); } private void OnCrayonBoundUIColor(EntityUid uid, CrayonComponent component, CrayonColorMessage args) { - // you still need to ensure that the given color is a valid color + // Ensure that the given color can be changed or already matches if (!component.SelectableColor || args.Color == component.Color) return; component.Color = args.Color; Dirty(uid, component); - - } - - private void OnCrayonInit(EntityUid uid, CrayonComponent component, ComponentInit args) - { - component.Charges = component.Capacity; - - // Get the first one from the catalog and set it as default - var decal = _prototypeManager.EnumeratePrototypes().FirstOrDefault(x => x.Tags.Contains("crayon")); - component.SelectedState = decal?.ID ?? string.Empty; - Dirty(uid, component); } private void OnCrayonDropped(EntityUid uid, CrayonComponent component, DroppedEvent args) { // TODO: Use the existing event. - _uiSystem.CloseUi(uid, SharedCrayonComponent.CrayonUiKey.Key, args.User); + _uiSystem.CloseUi(uid, CrayonUiKey.Key, args.User); } private void UseUpCrayon(EntityUid uid, EntityUid user) diff --git a/Content.Shared/Crayon/CrayonComponent.cs b/Content.Shared/Crayon/CrayonComponent.cs new file mode 100644 index 0000000000..c772b43d00 --- /dev/null +++ b/Content.Shared/Crayon/CrayonComponent.cs @@ -0,0 +1,119 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Crayon; + +/// +/// Component holding the state of a crayon-like component +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedCrayonSystem))] +public sealed partial class CrayonComponent : Component +{ + /// + /// The ID of currently selected decal prototype that will be placed when the crayon is used. + /// + [DataField, AutoNetworkedField] + public string SelectedState; + + /// + /// Color with which the crayon will draw. + /// + [DataField, AutoNetworkedField] + public Color Color; + + /// + /// Play a sound when drawing if specified. + /// + [DataField] + public SoundSpecifier? UseSound; + + /// + /// Can the color can be changed? + /// + [DataField, AutoNetworkedField] + public bool SelectableColor; + + /// + /// Should the crayon be deleted when all charges are consumed? + /// + [DataField, AutoNetworkedField] + public bool DeleteEmpty = true; +} + +/// +/// Opens the crayon window for decal and color selection. +/// +[Serializable, NetSerializable] +public enum CrayonUiKey : byte +{ + Key, +} + +/// +/// Used by the client to notify the server about the selected decal ID +/// +[Serializable, NetSerializable] +public sealed class CrayonSelectMessage : BoundUserInterfaceMessage +{ + public readonly string State; + public CrayonSelectMessage(string selected) + { + State = selected; + } +} + +/// +/// Sets the color of the crayon, used by Rainbow Crayon +/// +[Serializable, NetSerializable] +public sealed class CrayonColorMessage : BoundUserInterfaceMessage +{ + public readonly Color Color; + public CrayonColorMessage(Color color) + { + Color = color; + } +} + +/// +/// Server to CLIENT. Notifies the BUI that a decal with given ID has been drawn. +/// Allows the client UI to advance forward in the client-only ephemeral queue, +/// preventing the crayon from becoming a magic text storage device. +/// +[Serializable, NetSerializable] +public sealed class CrayonUsedMessage : BoundUserInterfaceMessage +{ + public readonly string DrawnDecal; + + public CrayonUsedMessage(string drawn) + { + DrawnDecal = drawn; + } +} + +/// +/// The state of the crayon UI as sent by the server +/// +/// +/// TODO: Delete this and use component states and predict the UI. +/// This info is already networked on its own. +/// +[Serializable, NetSerializable] +public sealed class CrayonBoundUserInterfaceState : BoundUserInterfaceState +{ + public string Selected; + /// + /// Can the color can be changed + /// + public bool SelectableColor; + public Color Color; + + public CrayonBoundUserInterfaceState(string selected, bool selectableColor, Color color) + { + Selected = selected; + SelectableColor = selectableColor; + Color = color; + } +} diff --git a/Content.Shared/Crayon/SharedCrayonComponent.cs b/Content.Shared/Crayon/SharedCrayonComponent.cs deleted file mode 100644 index a9c21988ea..0000000000 --- a/Content.Shared/Crayon/SharedCrayonComponent.cs +++ /dev/null @@ -1,113 +0,0 @@ -using Robust.Shared.GameStates; -using Robust.Shared.Serialization; - -namespace Content.Shared.Crayon -{ - - /// - /// Component holding the state of a crayon-like component - /// - [NetworkedComponent, ComponentProtoName("Crayon"), Access(typeof(SharedCrayonSystem))] - public abstract partial class SharedCrayonComponent : Component - { - /// - /// The ID of currently selected decal prototype that will be placed when the crayon is used - /// - public string SelectedState { get; set; } = string.Empty; - - /// - /// Color with which the crayon will draw - /// - [DataField("color")] - public Color Color; - - [Serializable, NetSerializable] - public enum CrayonUiKey : byte - { - Key, - } - } - - /// - /// Used by the client to notify the server about the selected decal ID - /// - [Serializable, NetSerializable] - public sealed class CrayonSelectMessage : BoundUserInterfaceMessage - { - public readonly string State; - public CrayonSelectMessage(string selected) - { - State = selected; - } - } - - /// - /// Sets the color of the crayon, used by Rainbow Crayon - /// - [Serializable, NetSerializable] - public sealed class CrayonColorMessage : BoundUserInterfaceMessage - { - public readonly Color Color; - public CrayonColorMessage(Color color) - { - Color = color; - } - } - - /// - /// Server to CLIENT. Notifies the BUI that a decal with given ID has been drawn. - /// Allows the client UI to advance forward in the client-only ephemeral queue, - /// preventing the crayon from becoming a magic text storage device. - /// - [Serializable, NetSerializable] - public sealed class CrayonUsedMessage : BoundUserInterfaceMessage - { - public readonly string DrawnDecal; - - public CrayonUsedMessage(string drawn) - { - DrawnDecal = drawn; - } - } - - /// - /// Component state, describes how many charges are left in the crayon in the near-hand UI - /// - [Serializable, NetSerializable] - public sealed class CrayonComponentState : ComponentState - { - public readonly Color Color; - public readonly string State; - public readonly int Charges; - public readonly int Capacity; - - public CrayonComponentState(Color color, string state, int charges, int capacity) - { - Color = color; - State = state; - Charges = charges; - Capacity = capacity; - } - } - - /// - /// The state of the crayon UI as sent by the server - /// - [Serializable, NetSerializable] - public sealed class CrayonBoundUserInterfaceState : BoundUserInterfaceState - { - public string Selected; - /// - /// Whether or not the color can be selected - /// - public bool SelectableColor; - public Color Color; - - public CrayonBoundUserInterfaceState(string selected, bool selectableColor, Color color) - { - Selected = selected; - SelectableColor = selectableColor; - Color = color; - } - } -} diff --git a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml index a32e3ba89c..85be8ece45 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml @@ -21,7 +21,9 @@ enum.CrayonUiKey.Key: type: CrayonBoundUserInterface - type: Crayon - capacity: 25 + selectedState: like + - type: LimitedCharges + maxCharges: 25 - type: Food - type: FlavorProfile flavors: @@ -88,7 +90,8 @@ - type: Crayon color: Red selectableColor: true - capacity: 30 + - type: LimitedCharges + maxCharges: 30 - type: Tag tags: - Write @@ -96,6 +99,16 @@ - Recyclable - Trash +- type: entity + parent: CrayonRainbow + id: CrayonInfinite # should not be player available to prevent decal spam + name: infinite crayon + components: + - type: Crayon + deleteEmpty: false + - type: AutoRecharge + rechargeDuration: 5 + - type: entity parent: Crayon id: CrayonBlack From cec2fc7021b8e744ab61ef8c304156818d8174a0 Mon Sep 17 00:00:00 2001 From: opl- Date: Fri, 10 Oct 2025 22:14:22 +0200 Subject: [PATCH 130/216] Packed: Replace duplicate security camera router with sci router (#40819) On Packed: Replace duplicate security camera router with sci router Co-authored-by: opl <4833621+opl@users.noreply.github.com> --- Resources/Maps/packed.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Resources/Maps/packed.yml b/Resources/Maps/packed.yml index c371d2f04c..3f16dee262 100644 --- a/Resources/Maps/packed.yml +++ b/Resources/Maps/packed.yml @@ -85872,13 +85872,15 @@ entities: - type: Transform pos: 14.5,-17.5 parent: 2 -- proto: SurveillanceCameraRouterSecurity +- proto: SurveillanceCameraRouterScience entities: - uid: 4644 components: - type: Transform pos: 15.5,-19.5 parent: 2 +- proto: SurveillanceCameraRouterSecurity + entities: - uid: 6899 components: - type: Transform From 2ecfb9552a2f16016845845cc8c4bc9f3e019fdc Mon Sep 17 00:00:00 2001 From: Jessica M Date: Fri, 10 Oct 2025 13:17:24 -0700 Subject: [PATCH 131/216] Add variables to CluwneComponent, allowing for admeme customizing. Also localized two strings. (#40466) * Add variables to cluwne component, update to the new style, add unremovable option to setoutfit. * not nullable, shorthand * Add comments, address reviews * why, was i drunk? * Apply suggestions from code review --------- Co-authored-by: Jessica M Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Clothing/Systems/OutfitSystem.cs | 5 +- Content.Server/Cluwne/CluwneSystem.cs | 68 ++++++++------- Content.Shared/Cluwne/CluwneComponent.cs | 84 +++++++++++++++++-- Resources/Locale/en-US/cluwne/cluwne.ftl | 2 + 4 files changed, 122 insertions(+), 37 deletions(-) diff --git a/Content.Server/Clothing/Systems/OutfitSystem.cs b/Content.Server/Clothing/Systems/OutfitSystem.cs index c3fea28bcf..c02a4f1a3b 100644 --- a/Content.Server/Clothing/Systems/OutfitSystem.cs +++ b/Content.Server/Clothing/Systems/OutfitSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Access.Components; using Content.Shared.Clothing; using Content.Shared.Hands.Components; using Content.Shared.Humanoid; +using Content.Shared.Interaction.Components; using Content.Shared.Inventory; using Content.Shared.PDA; using Content.Shared.Preferences; @@ -23,7 +24,7 @@ public sealed class OutfitSystem : EntitySystem [Dependency] private readonly InventorySystem _invSystem = default!; [Dependency] private readonly SharedStationSpawningSystem _spawningSystem = default!; - public bool SetOutfit(EntityUid target, string gear, Action? onEquipped = null) + public bool SetOutfit(EntityUid target, string gear, Action? onEquipped = null, bool unremovable = false) { if (!EntityManager.TryGetComponent(target, out InventoryComponent? inventoryComponent)) return false; @@ -60,6 +61,8 @@ public sealed class OutfitSystem : EntitySystem } _invSystem.TryEquip(target, equipmentEntity, slot.Name, silent: true, force: true, inventory: inventoryComponent); + if (unremovable) + EnsureComp(equipmentEntity); onEquipped?.Invoke(target, equipmentEntity); } diff --git a/Content.Server/Cluwne/CluwneSystem.cs b/Content.Server/Cluwne/CluwneSystem.cs index 21a15d812f..e51a01a1d4 100644 --- a/Content.Server/Cluwne/CluwneSystem.cs +++ b/Content.Server/Cluwne/CluwneSystem.cs @@ -7,7 +7,6 @@ using Content.Server.Clothing.Systems; using Content.Shared.Chat.Prototypes; using Robust.Shared.Random; using Content.Shared.Stunnable; -using Content.Shared.Damage.Prototypes; using Content.Shared.Damage; using Robust.Shared.Prototypes; using Content.Server.Emoting.Systems; @@ -21,7 +20,6 @@ namespace Content.Server.Cluwne; public sealed class CluwneSystem : EntitySystem { - private static readonly ProtoId GeneticDamageGroup = "Genetic"; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -48,15 +46,14 @@ public sealed class CluwneSystem : EntitySystem /// /// On death removes active comps and gives genetic damage to prevent cloning, reduce this to allow cloning. /// - private void OnMobState(EntityUid uid, CluwneComponent component, MobStateChangedEvent args) + private void OnMobState(Entity ent, ref MobStateChangedEvent args) { if (args.NewMobState == MobState.Dead) { - RemComp(uid); - RemComp(uid); - RemComp(uid); - var damageSpec = new DamageSpecifier(_prototypeManager.Index(GeneticDamageGroup), 300); - _damageableSystem.TryChangeDamage(uid, damageSpec); + RemComp(ent.Owner); + RemComp(ent.Owner); + RemComp(ent.Owner); + _damageableSystem.TryChangeDamage(ent.Owner, ent.Comp.RevertDamage); } } @@ -65,52 +62,65 @@ public sealed class CluwneSystem : EntitySystem /// /// OnStartup gives the cluwne outfit, ensures clumsy, and makes sure emote sounds are laugh. /// - private void OnComponentStartup(EntityUid uid, CluwneComponent component, ComponentStartup args) + private void OnComponentStartup(Entity ent, ref ComponentStartup args) { - if (component.EmoteSoundsId == null) + if (ent.Comp.EmoteSoundsId == null) return; - _prototypeManager.TryIndex(component.EmoteSoundsId, out EmoteSounds); - EnsureComp(uid); - _autoEmote.AddEmote(uid, "CluwneGiggle"); - EnsureComp(uid); + _prototypeManager.TryIndex(ent.Comp.EmoteSoundsId, out EmoteSounds); - _popupSystem.PopupEntity(Loc.GetString("cluwne-transform", ("target", uid)), uid, PopupType.LargeCaution); - _audio.PlayPvs(component.SpawnSound, uid); - _nameMod.RefreshNameModifiers(uid); + if (ent.Comp.RandomEmote && ent.Comp.AutoEmoteId != null) + { + EnsureComp(ent.Owner); + _autoEmote.AddEmote(ent.Owner, ent.Comp.AutoEmoteId); + } + + EnsureComp(ent.Owner); - _outfitSystem.SetOutfit(uid, "CluwneGear"); + var transformMessage = Loc.GetString(ent.Comp.TransformMessage, ("target", ent.Owner)); + + _popupSystem.PopupEntity(transformMessage, ent.Owner, PopupType.LargeCaution); + _audio.PlayPvs(ent.Comp.SpawnSound, ent.Owner); + + _nameMod.RefreshNameModifiers(ent.Owner); + + + _outfitSystem.SetOutfit(ent.Owner, ent.Comp.OutfitId, unremovable: true); } /// /// Handles the timing on autoemote as well as falling over and honking. /// - private void OnEmote(EntityUid uid, CluwneComponent component, ref EmoteEvent args) + private void OnEmote(Entity ent, ref EmoteEvent args) { if (args.Handled) return; - args.Handled = _chat.TryPlayEmoteSound(uid, EmoteSounds, args.Emote); - if (_robustRandom.Prob(component.GiggleRandomChance)) + if (!ent.Comp.RandomEmote) + return; + + args.Handled = _chat.TryPlayEmoteSound(ent.Owner, EmoteSounds, args.Emote); + + if (_robustRandom.Prob(ent.Comp.GiggleRandomChance)) { - _audio.PlayPvs(component.SpawnSound, uid); - _chat.TrySendInGameICMessage(uid, "honks", InGameICChatType.Emote, ChatTransmitRange.Normal); + _audio.PlayPvs(ent.Comp.SpawnSound, ent.Owner); + _chat.TrySendInGameICMessage(ent.Owner, Loc.GetString(ent.Comp.GiggleEmote), InGameICChatType.Emote, ChatTransmitRange.Normal); } - else if (_robustRandom.Prob(component.KnockChance)) + else if (_robustRandom.Prob(ent.Comp.KnockChance)) { - _audio.PlayPvs(component.KnockSound, uid); - _stunSystem.TryUpdateParalyzeDuration(uid, TimeSpan.FromSeconds(component.ParalyzeTime)); - _chat.TrySendInGameICMessage(uid, "spasms", InGameICChatType.Emote, ChatTransmitRange.Normal); + _audio.PlayPvs(ent.Comp.KnockSound, ent.Owner); + _stunSystem.TryUpdateParalyzeDuration(ent.Owner, TimeSpan.FromSeconds(ent.Comp.ParalyzeTime)); + _chat.TrySendInGameICMessage(ent.Owner, Loc.GetString(ent.Comp.KnockEmote), InGameICChatType.Emote, ChatTransmitRange.Normal); } } /// /// Applies "Cluwnified" prefix /// - private void OnRefreshNameModifiers(Entity entity, ref RefreshNameModifiersEvent args) + private void OnRefreshNameModifiers(Entity ent, ref RefreshNameModifiersEvent args) { - args.AddModifier("cluwne-name-prefix"); + args.AddModifier(ent.Comp.NamePrefix); } } diff --git a/Content.Shared/Cluwne/CluwneComponent.cs b/Content.Shared/Cluwne/CluwneComponent.cs index c9f96d030b..692a8ec4f9 100644 --- a/Content.Shared/Cluwne/CluwneComponent.cs +++ b/Content.Shared/Cluwne/CluwneComponent.cs @@ -1,6 +1,9 @@ using Robust.Shared.Audio; using Content.Shared.Chat.Prototypes; +using Content.Shared.Damage; +using Content.Shared.Roles; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Cluwne; @@ -12,22 +15,74 @@ public sealed partial class CluwneComponent : Component /// /// timings for giggles and knocks. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public TimeSpan DamageGiggleCooldown = TimeSpan.FromSeconds(2); - [ViewVariables(VVAccess.ReadWrite)] + /// + /// Amount of genetic damage dealt when they revert + /// + [DataField] + public DamageSpecifier RevertDamage = new() + { + DamageDict = new() + { + { "Genetic", 300.0 }, + }, + }; + + /// + /// Chance that the Cluwne will be knocked over and paralyzed. + /// + [DataField] public float KnockChance = 0.05f; - [ViewVariables(VVAccess.ReadWrite)] + /// + /// Chance that the Cluwne will randomly giggle + /// + [DataField] public float GiggleRandomChance = 0.1f; - [DataField("emoteId", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string? EmoteSoundsId = "Cluwne"; + /// + /// Enable random emoting? + /// + [DataField] + public bool RandomEmote = true; + + /// + /// Emote sound collection that the Cluwne should use. + /// + [DataField("emoteId")] + public ProtoId? EmoteSoundsId = "Cluwne"; + + /// + /// Emote to use for the Cluwne Giggling + /// + [DataField] + public ProtoId? AutoEmoteId = "CluwneGiggle"; + + /// + /// Message to popup when the Cluwne is transformed + /// + [DataField] + public LocId TransformMessage = "cluwne-transform"; + + /// + /// Name prefix for the Cluwne. + /// Example "Urist McHuman" will be "Cluwned Urist McHuman" + /// + [DataField] + public LocId NamePrefix = "cluwne-name-prefix"; + + /// + /// Outfit ID that the cluwne will spawn with. + /// + [DataField] + public ProtoId OutfitId = "CluwneGear"; /// /// Amount of time cluwne is paralyzed for when falling over. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField] public float ParalyzeTime = 2f; /// @@ -36,6 +91,21 @@ public sealed partial class CluwneComponent : Component [DataField("spawnsound")] public SoundSpecifier SpawnSound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); - [DataField("knocksound")] + /// + /// Emote to use for the cluwne giggling + /// + [DataField] + public LocId GiggleEmote = "cluwne-giggle-emote"; + + /// + /// Sound to play when the Cluwne is knocked over and paralyzed + /// + [DataField] public SoundSpecifier KnockSound = new SoundPathSpecifier("/Audio/Items/airhorn.ogg"); + + /// + /// Emote thats used when the cluwne getting knocked over + /// + [DataField] + public LocId KnockEmote = "cluwne-knock-emote"; } diff --git a/Resources/Locale/en-US/cluwne/cluwne.ftl b/Resources/Locale/en-US/cluwne/cluwne.ftl index 0ffd3f32df..e469cbfbac 100644 --- a/Resources/Locale/en-US/cluwne/cluwne.ftl +++ b/Resources/Locale/en-US/cluwne/cluwne.ftl @@ -1,2 +1,4 @@ cluwne-transform = {CAPITALIZE(THE($target))} turned into a cluwne! cluwne-name-prefix = cluwnified {$baseName} +cluwne-knock-emote = spasms +cluwne-giggle-emote = honks From a058921b4db31fe7de6140e095362edbd7ed7312 Mon Sep 17 00:00:00 2001 From: opl- Date: Fri, 10 Oct 2025 22:21:51 +0200 Subject: [PATCH 132/216] Packed: Fix brig Megaseed vending machine is locked (#40821) Co-authored-by: opl <4833621+opl@users.noreply.github.com> --- Resources/Maps/packed.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Maps/packed.yml b/Resources/Maps/packed.yml index 3f16dee262..9ad708002b 100644 --- a/Resources/Maps/packed.yml +++ b/Resources/Maps/packed.yml @@ -88827,6 +88827,8 @@ entities: - type: Transform pos: 43.5,-4.5 parent: 2 +- proto: VendingMachineSeedsUnlocked + entities: - uid: 7681 components: - type: Transform From a9dcfcb9fb5d5b1667c5f10a03b53cd0e13f9d3e Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 10 Oct 2025 20:34:15 +0000 Subject: [PATCH 133/216] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 3eb8884988..0c8783e4a5 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -771,4 +771,11 @@ id: 93 time: '2025-10-10T01:11:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40794 +- author: opl + changes: + - message: On Packed, prisoners can now use the Megaseed in brig. + type: Fix + id: 94 + time: '2025-10-10T20:33:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40821 Order: 1 From 74ebe585fa4ab51bca3ea5fb28495e1055030fd9 Mon Sep 17 00:00:00 2001 From: opl- Date: Fri, 10 Oct 2025 22:25:15 +0200 Subject: [PATCH 134/216] Packed: Add missing station beacons (#40817) On Packed: Add missing station beacons Co-authored-by: opl <4833621+opl@users.noreply.github.com> --- Resources/Maps/packed.yml | 98 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/Resources/Maps/packed.yml b/Resources/Maps/packed.yml index 9ad708002b..d15f3f7aab 100644 --- a/Resources/Maps/packed.yml +++ b/Resources/Maps/packed.yml @@ -42804,7 +42804,21 @@ entities: rot: 3.141592653589793 rad pos: 11.493689,4.5440345 parent: 2 +- proto: DefaultStationBeaconAI + entities: + - uid: 15919 + components: + - type: Transform + pos: 73.5,23.5 + parent: 2 - proto: DefaultStationBeaconAICore + entities: + - uid: 15916 + components: + - type: Transform + pos: 95.5,30.5 + parent: 2 +- proto: DefaultStationBeaconAIUpload entities: - uid: 14515 components: @@ -42818,6 +42832,13 @@ entities: - type: Transform pos: 31.5,-40.5 parent: 2 +- proto: DefaultStationBeaconAnchor + entities: + - uid: 15922 + components: + - type: Transform + pos: 6.5,-21.5 + parent: 2 - proto: DefaultStationBeaconAnomalyGenerator entities: - uid: 8139 @@ -42825,6 +42846,13 @@ entities: - type: Transform pos: 68.5,15.5 parent: 2 +- proto: DefaultStationBeaconArmory + entities: + - uid: 15787 + components: + - type: Transform + pos: 41.5,34.5 + parent: 2 - proto: DefaultStationBeaconArrivals entities: - uid: 14028 @@ -42951,6 +42979,20 @@ entities: - type: Transform pos: 0.5,-30.5 parent: 2 +- proto: DefaultStationBeaconDorms + entities: + - uid: 15912 + components: + - type: Transform + pos: 15.5,14.5 + parent: 2 +- proto: DefaultStationBeaconEngineering + entities: + - uid: 15913 + components: + - type: Transform + pos: 18.5,-25.5 + parent: 2 - proto: DefaultStationBeaconEscapePodE entities: - uid: 2949 @@ -42986,6 +43028,13 @@ entities: - type: Transform pos: 9.5,-6.5 parent: 2 +- proto: DefaultStationBeaconGravGen + entities: + - uid: 15910 + components: + - type: Transform + pos: 14.5,38.5 + parent: 2 - proto: DefaultStationBeaconHOPOffice entities: - uid: 13131 @@ -42993,6 +43042,13 @@ entities: - type: Transform pos: 17.5,-4.5 parent: 2 +- proto: DefaultStationBeaconHOSRoom + entities: + - uid: 15907 + components: + - type: Transform + pos: 48.5,39.5 + parent: 2 - proto: DefaultStationBeaconJanitorsCloset entities: - uid: 13133 @@ -43021,6 +43077,13 @@ entities: - type: Transform pos: 10.5,5.5 parent: 2 +- proto: DefaultStationBeaconMedical + entities: + - uid: 15914 + components: + - type: Transform + pos: 51.5,3.5 + parent: 2 - proto: DefaultStationBeaconMorgue entities: - uid: 13137 @@ -43028,6 +43091,13 @@ entities: - type: Transform pos: 70.5,-3.5 parent: 2 +- proto: DefaultStationBeaconPermaBrig + entities: + - uid: 15911 + components: + - type: Transform + pos: 34.5,20.5 + parent: 2 - proto: DefaultStationBeaconPowerBank entities: - uid: 13139 @@ -43070,6 +43140,20 @@ entities: - type: Transform pos: 7.5,33.5 parent: 2 +- proto: DefaultStationBeaconSecurity + entities: + - uid: 15908 + components: + - type: Transform + pos: 33.5,29.5 + parent: 2 +- proto: DefaultStationBeaconSecurityCheckpoint + entities: + - uid: 15915 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 2 - proto: DefaultStationBeaconServerRoom entities: - uid: 13172 @@ -43098,6 +43182,13 @@ entities: - type: Transform pos: 3.5,-35.5 parent: 2 +- proto: DefaultStationBeaconSurgery + entities: + - uid: 15920 + components: + - type: Transform + pos: 65.5,-5.5 + parent: 2 - proto: DefaultStationBeaconTechVault entities: - uid: 13175 @@ -43133,6 +43224,13 @@ entities: - type: Transform pos: 18.5,41.5 parent: 2 +- proto: DefaultStationBeaconWardensOffice + entities: + - uid: 15909 + components: + - type: Transform + pos: 42.5,25.5 + parent: 2 - proto: Defibrillator entities: - uid: 11416 From a384640eea9ecc160f8700b896b03739c9070712 Mon Sep 17 00:00:00 2001 From: Connor Huffine Date: Fri, 10 Oct 2025 16:49:21 -0400 Subject: [PATCH 135/216] Ninja Bomb Blacklisting: Map Updates (#40727) Update Maps --- Resources/Maps/exo.yml | 13 ----- Resources/Maps/saltern.yml | 107 ------------------------------------- 2 files changed, 120 deletions(-) diff --git a/Resources/Maps/exo.yml b/Resources/Maps/exo.yml index 58d864740a..b357069817 100644 --- a/Resources/Maps/exo.yml +++ b/Resources/Maps/exo.yml @@ -47101,7 +47101,6 @@ entities: - type: Transform pos: -20.5,-25.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconAtmospherics entities: - uid: 16227 @@ -47130,7 +47129,6 @@ entities: - type: Transform pos: -48.5,-45.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconBrigMed entities: - uid: 18105 @@ -47145,7 +47143,6 @@ entities: - type: Transform pos: -42.5,-54.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconCargoBay entities: - uid: 16244 @@ -47153,7 +47150,6 @@ entities: - type: Transform pos: 24.5,-97.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconCargoReception entities: - uid: 16243 @@ -47182,7 +47178,6 @@ entities: - type: Transform pos: 19.5,-72.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconCMORoom entities: - uid: 16267 @@ -47190,7 +47185,6 @@ entities: - type: Transform pos: 11.5,-16.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconCryosleep entities: - uid: 16223 @@ -47277,7 +47271,6 @@ entities: - type: Transform pos: 14.5,-59.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconHOSRoom entities: - uid: 18071 @@ -47292,7 +47285,6 @@ entities: - type: Transform pos: -8.5,-51.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconKitchen entities: - uid: 16228 @@ -47321,7 +47313,6 @@ entities: - type: Transform pos: 14.5,-29.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconMorgue entities: - uid: 8744 @@ -47336,7 +47327,6 @@ entities: - type: Transform pos: 46.5,-17.5 parent: 2 - - type: BombingTarget - type: NavMapBeacon defaultText: Genpop - proto: DefaultStationBeaconPowerBank @@ -47353,7 +47343,6 @@ entities: - type: Transform pos: 9.5,-88.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconRDRoom entities: - uid: 5092 @@ -47382,7 +47371,6 @@ entities: - type: Transform pos: -6.5,-21.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconSecurity entities: - uid: 18001 @@ -47411,7 +47399,6 @@ entities: - type: Transform pos: -23.5,-71.5 parent: 2 - - type: BombingTarget - proto: DefaultStationBeaconSolarsE entities: - uid: 8642 diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 58400ac0fe..1e33a9d347 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -69413,113 +69413,6 @@ entities: parent: 31 - type: WarpPoint location: library -- proto: WarpPointBombing - entities: - - uid: 934 - components: - - type: Transform - pos: -36.5,14.5 - parent: 31 - - type: WarpPoint - location: chapel - - uid: 2142 - components: - - type: Transform - pos: 8.5,19.5 - parent: 31 - - type: WarpPoint - location: hop's office - - uid: 4910 - components: - - type: Transform - pos: 9.5,-9.5 - parent: 31 - - type: WarpPoint - location: medbay - - uid: 7261 - components: - - type: Transform - pos: 16.5,-0.5 - parent: 31 - - type: WarpPoint - location: chemistry - - uid: 7262 - components: - - type: Transform - pos: 13.5,-15.5 - parent: 31 - - type: WarpPoint - location: morgue - - uid: 9712 - components: - - type: Transform - pos: -12.5,19.5 - parent: 31 - - type: WarpPoint - location: armory - - uid: 10539 - components: - - type: Transform - pos: -9.5,-20.5 - parent: 31 - - type: WarpPoint - location: science - - uid: 11267 - components: - - type: Transform - pos: 8.5,25.5 - parent: 31 - - type: WarpPoint - location: captain's quarters - - uid: 11308 - components: - - type: Transform - pos: 3.5,30.5 - parent: 31 - - type: WarpPoint - location: bridge - - uid: 11309 - components: - - type: Transform - pos: -1.5,17.5 - parent: 31 - - type: WarpPoint - location: vault - - uid: 11310 - components: - - type: Transform - pos: 8.5,9.5 - parent: 31 - - type: WarpPoint - location: eva room - - uid: 11311 - components: - - type: Transform - pos: 58.5,2.5 - parent: 31 - - type: WarpPoint - location: particle accelerator - - uid: 11313 - components: - - type: Transform - pos: 34.5,14.5 - parent: 31 - - type: WarpPoint - location: atmospherics - - uid: 11322 - components: - - type: Transform - pos: 27.5,18.5 - parent: 31 - - type: WarpPoint - location: salvage - - uid: 11359 - components: - - type: Transform - pos: 50.5,-5.5 - parent: 31 - - type: WarpPoint - location: telecomms - proto: WaterCooler entities: - uid: 1156 From 52139b5cc5504e2e96f239993f2dd425094ded21 Mon Sep 17 00:00:00 2001 From: MilenVolf <63782763+MilenVolf@users.noreply.github.com> Date: Sat, 11 Oct 2025 00:16:48 +0300 Subject: [PATCH 136/216] Fix glassbox prototypes (#40667) * Fix glassbox prototypes and its construction ghost exception * Oops --- .../Entities/Structures/Storage/glass_box.yml | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml b/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml index 0cc93a4fcf..f1ce706847 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/glass_box.yml @@ -1,8 +1,11 @@ - type: entity - parent: [BaseStructureDynamic, BaseItemCabinetGlass] + parent: BaseStructureDynamic id: BaseGlassBox abstract: true components: + - type: Sprite + noRot: true + sprite: Structures/Storage/glassbox.rsi - type: Transform anchored: true - type: Physics @@ -24,20 +27,18 @@ delay: 4 - type: entity + parent: [BaseGlassBox, BaseItemCabinetGlass] id: GlassBox name: glass box description: A sturdy showcase for an expensive exhibit. - parent: BaseGlassBox abstract: true # TODO: Temporarily abstract. Remove it after item scaling in cabinets is implemented. components: - type: Sprite - noRot: true - sprite: Structures/Storage/glassbox.rsi layers: - state: base - state: caplaser # TODO: Remove it after item scaling in cabinets is implemented. map: ["enum.ItemCabinetVisuals.Layer"] - visible: true + visible: false - state: glass map: ["enum.OpenableVisuals.Layer"] - state: locked @@ -116,8 +117,8 @@ acts: [ "Destruction" ] - type: entity - id: GlassBoxLaser parent: GlassBox + id: GlassBoxLaser suffix: AntiqueLaser components: - type: AccessReader @@ -135,8 +136,8 @@ ejectSound: /Audio/Machines/machine_switch.ogg - type: entity - id: GlassBoxLaserOpen parent: GlassBoxLaser + id: GlassBoxLaserOpen suffix: AntiqueLaser, Open components: - type: Openable @@ -145,8 +146,8 @@ locked: false - type: entity - id: GlassBoxLaserFilled parent: GlassBoxLaser + id: GlassBoxLaserFilled suffix: AntiqueLaser, Filled components: - type: ContainerFill @@ -160,15 +161,13 @@ suffix: AntiqueLaser, Filled, Open - type: entity + parent: BaseGlassBox id: GlassBoxFrame name: glass box frame description: A glassless sturdy showcase for an expensive exhibit. - parent: BaseGlassBox suffix: Frame components: - type: Sprite - noRot: true - sprite: Structures/Storage/glassbox.rsi layers: - state: base - type: Construction @@ -204,14 +203,13 @@ acts: ["Destruction"] - type: entity + parent: GlassBoxFrame id: GlassBoxBroken name: broken glass box description: A broken showcase for a stolen expensive exhibit. - parent: GlassBoxFrame suffix: Broken components: - type: Sprite - sprite: Structures/Storage/glassbox.rsi layers: - state: base - state: glass-broken From ecc0aaaa9fe22d8e1cf9d38748c8f8373540f1bc Mon Sep 17 00:00:00 2001 From: Connor Huffine Date: Fri, 10 Oct 2025 17:16:50 -0400 Subject: [PATCH 137/216] Ninja Bomb Blacklisting (#40726) * Ninja Bombing moved to blacklist * Added blocker to "Solars" Solars is too generic for a named bombing target. * Change to AllEntityQuery More clear intent * Update migration.yml Add migration to 'null' for removed WarpPointBombing entity * Update NinjaConditionsSystem.cs Undo some tidying * Changed to tag Ninja blocking component is now a tag instead of a new component * Update NinjaConditionsSystem.cs detidying * Update NinjaConditionsSystem.cs Change to efficient enumerator * Move blacklist to component Moved blacklist to spidercharge component * Update migration.yml fixed component reference * Update migration.yml Fixes Saltern. Exo is more complicated. --------- Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> --- .../SpiderChargeConditionComponent.cs | 8 +++++++ .../Systems/NinjaConditionsSystem.cs | 12 +++++++---- .../Components/BombingTargetComponent.cs | 7 ------- .../Entities/Markers/warp_point.yml | 21 ------------------- .../Objects/Devices/station_beacon.yml | 9 ++++++++ Resources/Prototypes/Objectives/ninja.yml | 4 ++++ Resources/Prototypes/tags.yml | 2 ++ Resources/migration.yml | 4 +++- 8 files changed, 34 insertions(+), 33 deletions(-) delete mode 100644 Content.Shared/Ninja/Components/BombingTargetComponent.cs diff --git a/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs b/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs index 9983b35969..d6309ccdd3 100644 --- a/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs +++ b/Content.Server/Objectives/Components/SpiderChargeConditionComponent.cs @@ -1,5 +1,6 @@ using Content.Server.Ninja.Systems; using Content.Server.Objectives.Systems; +using Content.Shared.Whitelist; namespace Content.Server.Objectives.Components; @@ -14,4 +15,11 @@ public sealed partial class SpiderChargeConditionComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public EntityUid? Target; + + /// + /// Tags that should be used to exclude Warp Points + /// from the list of valid bombing targets + /// + [DataField] + public EntityWhitelist? Blacklist; } diff --git a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs index db78816503..4c19a64ab1 100644 --- a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs +++ b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs @@ -1,9 +1,9 @@ using Content.Server.Objectives.Components; using Content.Shared.Objectives.Components; -using Content.Shared.Ninja.Components; using Content.Shared.Roles; using Content.Shared.Roles.Components; using Content.Shared.Warps; +using Content.Shared.Whitelist; using Robust.Shared.Random; namespace Content.Server.Objectives.Systems; @@ -14,6 +14,7 @@ namespace Content.Server.Objectives.Systems; /// public sealed class NinjaConditionsSystem : EntitySystem { + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly NumberObjectiveSystem _number = default!; [Dependency] private readonly IRobustRandom _random = default!; @@ -53,10 +54,13 @@ public sealed class NinjaConditionsSystem : EntitySystem // choose spider charge detonation point var warps = new List(); - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var warpUid, out _, out var warp)) + var allEnts = EntityQueryEnumerator(); + var bombingBlacklist = comp.Blacklist; + + while (allEnts.MoveNext(out var warpUid, out var warp)) { - if (warp.Location != null) + if (_whitelist.IsBlacklistFail(bombingBlacklist, warpUid) + && !string.IsNullOrWhiteSpace(warp.Location)) { warps.Add(warpUid); } diff --git a/Content.Shared/Ninja/Components/BombingTargetComponent.cs b/Content.Shared/Ninja/Components/BombingTargetComponent.cs deleted file mode 100644 index c429eb6880..0000000000 --- a/Content.Shared/Ninja/Components/BombingTargetComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Content.Shared.Ninja.Components; - -/// -/// Makes this warp point a valid bombing target for ninja's spider charge. -/// -[RegisterComponent] -public sealed partial class BombingTargetComponent : Component; diff --git a/Resources/Prototypes/Entities/Markers/warp_point.yml b/Resources/Prototypes/Entities/Markers/warp_point.yml index 675938c09b..4616d1535a 100644 --- a/Resources/Prototypes/Entities/Markers/warp_point.yml +++ b/Resources/Prototypes/Entities/Markers/warp_point.yml @@ -31,24 +31,3 @@ - GhostOnlyWarp - type: Sprite state: pink - -- type: entity - parent: WarpPoint - id: WarpPointBombing - name: warp point - suffix: ninja bombing target - components: - - type: BombingTarget - - type: Tag - tags: - - GhostOnlyWarp - - type: WarpPoint - location: bombing target - blacklist: - tags: - - GhostOnlyWarp - - type: Sprite - layers: - - state: pink - - sprite: Objects/Weapons/Bombs/spidercharge.rsi - state: icon diff --git a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml index 870e66654f..ff6d5a6a4a 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml @@ -455,6 +455,9 @@ components: - type: NavMapBeacon defaultText: station-beacon-solars + - type: Tag + tags: + - NinjaBombingTargetBlocker - type: entity parent: DefaultStationBeaconEngineering @@ -673,6 +676,9 @@ components: - type: NavMapBeacon defaultText: station-beacon-arrivals + - type: Tag + tags: + - NinjaBombingTargetBlocker - type: entity parent: DefaultStationBeacon @@ -761,6 +767,9 @@ components: - type: NavMapBeacon defaultText: station-beacon-cryosleep + - type: Tag + tags: + - NinjaBombingTargetBlocker - type: entity parent: DefaultStationBeacon diff --git a/Resources/Prototypes/Objectives/ninja.yml b/Resources/Prototypes/Objectives/ninja.yml index 76d74876b0..f015dd8f72 100644 --- a/Resources/Prototypes/Objectives/ninja.yml +++ b/Resources/Prototypes/Objectives/ninja.yml @@ -51,6 +51,10 @@ sprite: Objects/Weapons/Bombs/spidercharge.rsi state: icon - type: SpiderChargeCondition + blacklist: + tags: + - GhostOnlyWarp + - NinjaBombingTargetBlocker - type: entity parent: [BaseNinjaObjective, BaseSurviveObjective] diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 4f6c018f23..08539f50cf 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1024,6 +1024,8 @@ id: Mushroom ## N ## +- type: Tag + id: NinjaBombingTargetBlocker # Ninjas will not target this warp point - type: Tag id: NoBlockAnchoring diff --git a/Resources/migration.yml b/Resources/migration.yml index d05795def4..bbf331d5b6 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -726,5 +726,7 @@ PrefilledSyringe: Syringe BibleTanakh: null BibleSatanic: null -# 2025-10-8 + +# 2025-10-08 ClothingBeltAssault: ClothingBeltMilitaryWebbing +WarpPointBombing: null From e35624d1f1a60849776fb2b8be126dbabcc74ecc Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 10 Oct 2025 21:28:45 +0000 Subject: [PATCH 138/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index bc5e811a0c..1eedc0f152 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: K-Dynamic - changes: - - message: Shutters and blast doors now appear welded when welded. - type: Fix - id: 8562 - time: '2025-05-25T15:57:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37807 - author: Stop-Signs changes: - message: Meals now better reflect the amount of ingredients put into them. @@ -3948,3 +3941,10 @@ id: 9064 time: '2025-10-10T12:41:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40343 +- author: kontakt + changes: + - message: Ninjas can now have a bombing target at any warp point. + type: Tweak + id: 9065 + time: '2025-10-10T21:27:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40726 From 9ae4068432a432e34a23edc58a68a3dceaee30e2 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Fri, 10 Oct 2025 23:43:18 +0200 Subject: [PATCH 139/216] add event to dna scrambling (#39862) add event --- .../Trigger/Systems/DnaScrambleOnTriggerSystem.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs index db27bd7f74..af5a73ffb6 100644 --- a/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs @@ -58,5 +58,17 @@ public sealed class DnaScrambleOnTriggerSystem : EntitySystem // Can't use PopupClient or PopupPredicted because the trigger might be unpredicted. _popup.PopupEntity(Loc.GetString("scramble-on-trigger-popup"), target.Value, target.Value); + + var ev = new DnaScrambledEvent(target.Value); + RaiseLocalEvent(target.Value, ref ev, true); } } + +/// +/// Raised after an entity has been DNA Scrambled. +/// Useful for forks that need to run their own updates here. +/// +/// The entity that had its DNA scrambled. + +[ByRefEvent] +public record struct DnaScrambledEvent(EntityUid Target); From dca80238f0df3b7fb7e50870e84505ff0e1d8989 Mon Sep 17 00:00:00 2001 From: Pok <113675512+Pok27@users.noreply.github.com> Date: Sat, 11 Oct 2025 00:57:38 +0300 Subject: [PATCH 140/216] Attempt to fix all unlocalized lines (#40284) * missing-localization * cmd * fix: fixed patron page throwing exception due to unexpected patron tier in yaml * Revert "fix: fixed patron page throwing exception due to unexpected patron tier in yaml" This reverts commit 28458c78b1f2eed30fda898ec26059b27f1766f1. * review and update * no cmd * fix * fix 99 --------- Co-authored-by: pa.pecherskij --- .../UI/BanPanel/BanPanel.xaml.cs | 4 +- .../Administration/UI/Logs/AdminLogsEui.cs | 2 +- Content.Client/Credits/CreditsWindow.xaml.cs | 4 +- .../CriminalRecordsConsoleWindow.xaml | 2 +- .../HumanoidMarkingModifierWindow.xaml | 6 +- .../HumanoidMarkingModifierWindow.xaml.cs | 6 +- .../CrewMonitoringNavMapControl.cs | 2 +- .../CrewMonitoring/CrewMonitoringWindow.xaml | 12 +-- .../CrewMonitoringWindow.xaml.cs | 2 +- Content.Client/NPC/NPCWindow.xaml | 18 ++-- .../Pinpointer/UI/StationMapWindow.xaml | 2 +- Content.Client/UserInterface/StatValuesEui.cs | 2 +- .../Systems/Bwoink/AHelpUIController.cs | 2 +- .../Controls/Roles/MakeGhostRoleWindow.xaml | 22 ++--- .../Roles/MakeGhostRoleWindow.xaml.cs | 8 +- .../Systems/Storage/Controls/StorageWindow.cs | 2 +- .../Systems/AdminVerbSystem.Tools.cs | 82 +++++++++---------- .../en-US/administration/admin-verbs.ftl | 45 ++++++++++ .../Locale/en-US/administration/bwoink.ftl | 1 + .../en-US/components/storage-component.ftl | 1 + .../Locale/en-US/credits/credits-window.ftl | 2 + .../Locale/en-US/ghost/make-ghost-gui.ftl | 21 +++++ Resources/Locale/en-US/info/ban.ftl | 1 + .../components/crew-monitoring-component.ftl | 23 ++---- .../en-US/navmap-beacons/station_map.ftl | 1 + Resources/Locale/en-US/npc/npc-debug.ftl | 11 +++ .../en-US/preferences/ui/markings-picker.ftl | 6 ++ Resources/Locale/en-US/ui/navmap.ftl | 1 + Resources/Locale/en-US/ui/stat-values.ftl | 1 + 29 files changed, 188 insertions(+), 104 deletions(-) create mode 100644 Resources/Locale/en-US/ghost/make-ghost-gui.ftl create mode 100644 Resources/Locale/en-US/npc/npc-debug.ftl create mode 100644 Resources/Locale/en-US/ui/stat-values.ftl diff --git a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs index d20c741673..7566942506 100644 --- a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs +++ b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs @@ -226,7 +226,7 @@ public sealed partial class BanPanel : DefaultWindow var roleGroupCheckbox = new Button { Name = $"{groupName}GroupCheckbox", - Text = "Ban all", + Text = Loc.GetString("role-bans-ban-group"), Margin = new Thickness(0, 0, 5, 0), ToggleMode = true, }; @@ -391,7 +391,7 @@ public sealed partial class BanPanel : DefaultWindow TimeLine.Text = args.Text; if (!double.TryParse(args.Text, out var result)) { - ExpiresLabel.Text = "err"; + ExpiresLabel.Text = Loc.GetString("ban-panel-expiry-error"); ErrorLevel |= ErrorLevelEnum.Minutes; TimeLine.ModulateSelfOverride = Color.Red; UpdateSubmitEnabled(); diff --git a/Content.Client/Administration/UI/Logs/AdminLogsEui.cs b/Content.Client/Administration/UI/Logs/AdminLogsEui.cs index 1544b827ae..28aca23f75 100644 --- a/Content.Client/Administration/UI/Logs/AdminLogsEui.cs +++ b/Content.Client/Administration/UI/Logs/AdminLogsEui.cs @@ -166,7 +166,7 @@ public sealed class AdminLogsEui : BaseEui ClydeWindow = _clyde.CreateWindow(new WindowCreateParameters { Maximized = false, - Title = "Admin Logs", + Title = Loc.GetString("admin-logs-title"), Monitor = monitor, Width = 1100, Height = 400 diff --git a/Content.Client/Credits/CreditsWindow.xaml.cs b/Content.Client/Credits/CreditsWindow.xaml.cs index 050d801170..6035bcc2bd 100644 --- a/Content.Client/Credits/CreditsWindow.xaml.cs +++ b/Content.Client/Credits/CreditsWindow.xaml.cs @@ -100,11 +100,11 @@ public sealed partial class CreditsWindow : DefaultWindow var container = new BoxContainer { Orientation = LayoutOrientation.Horizontal }; - var previousPageButton = new Button { Text = "Previous Page" }; + var previousPageButton = new Button { Text = Loc.GetString("credits-window-previous-page-button") }; previousPageButton.OnPressed += _ => PopulateAttributions(attributionsContainer, count - AttributionsSourcesPerPage); - var nextPageButton = new Button { Text = "Next Page" }; + var nextPageButton = new Button { Text = Loc.GetString("credits-window-next-page-button") }; nextPageButton.OnPressed += _ => PopulateAttributions(attributionsContainer, count + AttributionsSourcesPerPage); diff --git a/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml b/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml index 179304a978..f88fa07f5a 100644 --- a/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml +++ b/Content.Client/CriminalRecords/CriminalRecordsConsoleWindow.xaml @@ -58,7 +58,7 @@ StyleClasses="LabelBig" /> - [DataField, AutoNetworkedField] - public NetEntity? AnalyzerEntity; + public EntityUid? AnalyzerEntity; [DataField] public SoundSpecifier? ScanFinishedSound = new SoundPathSpecifier("/Audio/Machines/scan_finish.ogg"); @@ -35,7 +35,7 @@ public sealed partial class AnalysisConsoleComponent : Component }; /// - /// The machine linking port for the analyzer + /// The machine linking port for linking the console with the analyzer. /// [DataField] public ProtoId LinkingPort = "ArtifactAnalyzerSender"; diff --git a/Content.Shared/Xenoarchaeology/Equipment/Components/ArtifactAnalyzerComponent.cs b/Content.Shared/Xenoarchaeology/Equipment/Components/ArtifactAnalyzerComponent.cs index 05d17bb123..9581285efb 100644 --- a/Content.Shared/Xenoarchaeology/Equipment/Components/ArtifactAnalyzerComponent.cs +++ b/Content.Shared/Xenoarchaeology/Equipment/Components/ArtifactAnalyzerComponent.cs @@ -1,5 +1,6 @@ -using Robust.Shared.Audio; +using Content.Shared.DeviceLinking; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; namespace Content.Shared.Xenoarchaeology.Equipment.Components; @@ -35,4 +36,10 @@ public sealed partial class ArtifactAnalyzerComponent : Component /// [ViewVariables(VVAccess.ReadWrite)] public bool ReadyToPrint = false; + + /// + /// The machine linking port for linking the analyzer with the console. + /// + [DataField] + public ProtoId LinkingPort = "ArtifactAnalyzerReceiver"; } diff --git a/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzerSystem.cs b/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzerSystem.cs index e47e964225..086b402bb2 100644 --- a/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzerSystem.cs +++ b/Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzerSystem.cs @@ -15,6 +15,7 @@ namespace Content.Shared.Xenoarchaeology.Equipment; public abstract class SharedArtifactAnalyzerSystem : EntitySystem { [Dependency] private readonly SharedPowerReceiverSystem _powerReceiver = default!; + [Dependency] private readonly SharedDeviceLinkSystem _deviceLink = default!; /// public override void Initialize() @@ -23,10 +24,14 @@ public abstract class SharedArtifactAnalyzerSystem : EntitySystem SubscribeLocalEvent(OnItemPlaced); SubscribeLocalEvent(OnItemRemoved); - SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnNewLinkAnalyzer); + SubscribeLocalEvent(OnLinkAttemptAnalyzer); + SubscribeLocalEvent(OnPortDisconnectedAnalyzer); - SubscribeLocalEvent(OnNewLink); - SubscribeLocalEvent(OnPortDisconnected); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnNewLinkConsole); + SubscribeLocalEvent(OnLinkAttemptConsole); + SubscribeLocalEvent(OnPortDisconnectedConsole); } private void OnItemPlaced(Entity ent, ref ItemPlacedEvent args) @@ -44,52 +49,74 @@ public abstract class SharedArtifactAnalyzerSystem : EntitySystem Dirty(ent); } - private void OnMapInit(Entity ent, ref MapInitEvent args) + private void OnMapInit(Entity ent, ref MapInitEvent args) { - if (!TryComp(ent, out var sink)) + if (!TryComp(ent, out var source)) return; - foreach (var source in sink.LinkedSources) + var linkedEntities = _deviceLink.GetLinkedSinks((ent.Owner, source), ent.Comp.LinkingPort); + + foreach (var sink in linkedEntities) { - if (!TryComp(source, out var analysis)) + if (!TryComp(sink, out var analyzer)) continue; - analysis.AnalyzerEntity = GetNetEntity(ent); - ent.Comp.Console = source; - Dirty(source, analysis); + ent.Comp.AnalyzerEntity = sink; + analyzer.Console = ent.Owner; Dirty(ent); + Dirty(sink, analyzer); break; } } - private void OnNewLink(Entity ent, ref NewLinkEvent args) + private void OnNewLinkConsole(Entity ent, ref NewLinkEvent args) { - if (!TryComp(args.Sink, out var analyzer)) + if (args.SourcePort != ent.Comp.LinkingPort || !HasComp(args.Sink)) return; - ent.Comp.AnalyzerEntity = GetNetEntity(args.Sink); - analyzer.Console = ent; - Dirty(args.Sink, analyzer); + ent.Comp.AnalyzerEntity = args.Sink; Dirty(ent); } - private void OnPortDisconnected(Entity ent, ref PortDisconnectedEvent args) + private void OnNewLinkAnalyzer(Entity ent, ref NewLinkEvent args) { - var analyzerNetEntity = ent.Comp.AnalyzerEntity; - if (args.Port != ent.Comp.LinkingPort || analyzerNetEntity == null) + if (args.SinkPort != ent.Comp.LinkingPort || !HasComp(args.Source)) return; - var analyzerEntityUid = GetEntity(analyzerNetEntity); - if (TryComp(analyzerEntityUid, out var analyzer)) - { - analyzer.Console = null; - Dirty(analyzerEntityUid.Value, analyzer); - } + ent.Comp.Console = args.Source; + Dirty(ent); + } + + private void OnLinkAttemptConsole(Entity ent, ref LinkAttemptEvent args) + { + if (ent.Comp.AnalyzerEntity != null) + args.Cancel(); // can only link to one device at a time + } + + private void OnLinkAttemptAnalyzer(Entity ent, ref LinkAttemptEvent args) + { + if (ent.Comp.Console != null) + args.Cancel(); // can only link to one device at a time + } + + private void OnPortDisconnectedConsole(Entity ent, ref PortDisconnectedEvent args) + { + if (args.Port != ent.Comp.LinkingPort || ent.Comp.AnalyzerEntity == null) + return; ent.Comp.AnalyzerEntity = null; Dirty(ent); } + private void OnPortDisconnectedAnalyzer(Entity ent, ref PortDisconnectedEvent args) + { + if (args.Port != ent.Comp.LinkingPort || ent.Comp.Console == null) + return; + + ent.Comp.Console = null; + Dirty(ent); + } + public bool TryGetAnalyzer(Entity ent, [NotNullWhen(true)] out Entity? analyzer) { analyzer = null; @@ -98,14 +125,13 @@ public abstract class SharedArtifactAnalyzerSystem : EntitySystem if (!_powerReceiver.IsPowered(consoleEnt)) return false; - var analyzerUid = GetEntity(ent.Comp.AnalyzerEntity); - if (!TryComp(analyzerUid, out var analyzerComp)) + if (!TryComp(ent.Comp.AnalyzerEntity, out var analyzerComp)) return false; - if (!_powerReceiver.IsPowered(analyzerUid.Value)) + if (!_powerReceiver.IsPowered(ent.Comp.AnalyzerEntity.Value)) return false; - analyzer = (analyzerUid.Value, analyzerComp); + analyzer = (ent.Comp.AnalyzerEntity.Value, analyzerComp); return true; } From 1e911d175059fc0dbbdcd09f8fe904ab5a93a3f2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 11 Oct 2025 00:34:11 +0000 Subject: [PATCH 155/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 22bb552bba..4876ec7f73 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: AsnDen - changes: - - message: Tile-aligned bar sign version was added. - type: Add - - message: Bar signs now have proper collision. - type: Fix - id: 8566 - time: '2025-05-25T18:36:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37756 - author: Fildrance changes: - message: Spray nozzle now can consume liquids from puddles and put it right into @@ -3952,3 +3943,11 @@ id: 9068 time: '2025-10-11T00:20:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40149 +- author: slarticodefast + changes: + - message: The artifact analysis console no longer breaks when trying to link it + to multiple artifact analyzers or vice versa. + type: Fix + id: 9069 + time: '2025-10-11T00:33:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39984 From 228ed0288c25337697e12d3e25c57e7103037083 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sat, 11 Oct 2025 02:36:58 +0200 Subject: [PATCH 156/216] make nobody supervisor a locale key and cleanup JobPrototype (#39102) * make nobody supervisor locale key and cleanup JobPrototype * Update Content.Shared/Roles/JobPrototype.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Shared/Roles/JobPrototype.cs | 34 +++++++++---------- .../Locale/en-US/job/job-supervisors.ftl | 3 +- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Content.Shared/Roles/JobPrototype.cs b/Content.Shared/Roles/JobPrototype.cs index 54e5c1d525..6b58c42428 100644 --- a/Content.Shared/Roles/JobPrototype.cs +++ b/Content.Shared/Roles/JobPrototype.cs @@ -17,19 +17,19 @@ namespace Content.Shared.Roles [IdDataField] public string ID { get; private set; } = default!; - [DataField("playTimeTracker", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] public string PlayTimeTracker { get; private set; } = string.Empty; /// /// Who is the supervisor for this job. /// - [DataField("supervisors")] - public string Supervisors { get; private set; } = "nobody"; + [DataField] + public LocId Supervisors = "job-supervisors-nobody"; /// /// The name of this job as displayed to players. /// - [DataField("name")] + [DataField] public string Name { get; private set; } = string.Empty; [ViewVariables(VVAccess.ReadOnly)] @@ -38,7 +38,7 @@ namespace Content.Shared.Roles /// /// The name of this job as displayed to players. /// - [DataField("description")] + [DataField] public string? Description { get; private set; } [ViewVariables(VVAccess.ReadOnly)] @@ -53,19 +53,19 @@ namespace Content.Shared.Roles /// /// When true - the station will have anouncement about arrival of this player. /// - [DataField("joinNotifyCrew")] + [DataField] public bool JoinNotifyCrew { get; private set; } = false; /// /// When true - the player will recieve a message about importancy of their job. /// - [DataField("requireAdminNotify")] + [DataField] public bool RequireAdminNotify { get; private set; } = false; /// /// Should this job appear in preferences menu? /// - [DataField("setPreference")] + [DataField] public bool SetPreference { get; private set; } = true; /// @@ -81,14 +81,14 @@ namespace Content.Shared.Roles [DataField] public bool? OverrideConsoleVisibility { get; private set; } = null; - [DataField("canBeAntag")] + [DataField] public bool CanBeAntag { get; private set; } = true; /// /// The "weight" or importance of this job. If this number is large, the job system will assign this job /// before assigning other jobs. /// - [DataField("weight")] + [DataField] public int Weight { get; private set; } /// @@ -105,7 +105,7 @@ namespace Content.Shared.Roles /// A numerical score for how much easier this job is for antagonists. /// For traitors, reduces starting TC by this amount. Other gamemodes can use it for whatever they find fitting. /// - [DataField("antagAdvantage")] + [DataField] public int AntagAdvantage = 0; [DataField] @@ -116,7 +116,7 @@ namespace Content.Shared.Roles /// Starting gear will be ignored. /// If you want to just add special attributes to a humanoid, use AddComponentSpecial instead. /// - [DataField("jobEntity", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string? JobEntity = null; /// @@ -129,19 +129,19 @@ namespace Content.Shared.Roles [DataField] public ProtoId Icon { get; private set; } = "JobIconUnknown"; - [DataField("special", serverOnly: true)] + [DataField(serverOnly: true)] public JobSpecial[] Special { get; private set; } = Array.Empty(); - [DataField("access")] + [DataField] public IReadOnlyCollection> Access { get; private set; } = Array.Empty>(); - [DataField("accessGroups")] + [DataField] public IReadOnlyCollection> AccessGroups { get; private set; } = Array.Empty>(); - [DataField("extendedAccess")] + [DataField] public IReadOnlyCollection> ExtendedAccess { get; private set; } = Array.Empty>(); - [DataField("extendedAccessGroups")] + [DataField] public IReadOnlyCollection> ExtendedAccessGroups { get; private set; } = Array.Empty>(); [DataField] diff --git a/Resources/Locale/en-US/job/job-supervisors.ftl b/Resources/Locale/en-US/job/job-supervisors.ftl index b7615903ee..5e2cf153fc 100644 --- a/Resources/Locale/en-US/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/job/job-supervisors.ftl @@ -12,4 +12,5 @@ job-supervisors-medicine = Medical Doctors, Paramedics, Chemists, and the Chief job-supervisors-security = Security Officers, the Warden, and the Head of Security job-supervisors-science = Scientists and the Research Director job-supervisors-hire = whoever hires you -job-supervisors-everyone = absolutely everyone \ No newline at end of file +job-supervisors-everyone = absolutely everyone +job-supervisors-nobody = nobody From 5b38148651ec2f21fbab27a5b7f01e7e297139ea Mon Sep 17 00:00:00 2001 From: qwerltaz <69696513+qwerltaz@users.noreply.github.com> Date: Sat, 11 Oct 2025 02:41:22 +0200 Subject: [PATCH 157/216] Hop console grant all and revoke all access buttons (#39375) * add hop console select and deselect all access buttons * align the buttons right * document code --- .../Access/UI/IdCardConsoleWindow.xaml | 19 +++++++++++---- .../Access/UI/IdCardConsoleWindow.xaml.cs | 23 ++++++++++++++----- .../components/id-card-console-component.ftl | 4 +++- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/Content.Client/Access/UI/IdCardConsoleWindow.xaml b/Content.Client/Access/UI/IdCardConsoleWindow.xaml index a2f5f3382b..0a695a3dce 100644 --- a/Content.Client/Access/UI/IdCardConsoleWindow.xaml +++ b/Content.Client/Access/UI/IdCardConsoleWindow.xaml @@ -1,6 +1,7 @@ + + [DataField("emote", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string EmoteId = String.Empty; + public string EmoteId = string.Empty; /// /// How often an attempt at the emote will be made. /// - [DataField("interval", required: true)] + [DataField(required: true)] public TimeSpan Interval; /// /// Probability of performing the emote each interval. - /// + /// [DataField("chance")] public float Chance = 1; /// /// Also send the emote in chat. - /// - [DataField("withChat")] + /// + [DataField] public bool WithChat = true; + /// + /// Should we ignore action blockers? + /// This does nothing if WithChat is false. + /// + [DataField] + public bool IgnoreActionBlocker; + + /// + /// Should we ignore whitelists and force the emote? + /// This does nothing if WithChat is false. + /// + [DataField] + public bool Force; + /// /// Hide the chat message from the chat window, only showing the popup. /// This does nothing if WithChat is false. - /// - [DataField("hiddenFromChatWindow")] - public bool HiddenFromChatWindow = false; + /// + [DataField] + public bool HiddenFromChatWindow; } diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index 6c01a2a8dd..1afe45e5ef 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -256,13 +256,9 @@ Quantity: 2 - ReagentId: Protein Quantity: 1 - - type: Respirator - damage: - types: - Asphyxiation: 0.25 - damageRecovery: - types: - Asphyxiation: -0.25 + - type: AutoEmote # Meat Kudzu used to have respirator, but couldn't breathe so all it would do is gasp. + emotes: + - MeatGasp - type: Tag tags: - Meat diff --git a/Resources/Prototypes/Voice/auto_emotes.yml b/Resources/Prototypes/Voice/auto_emotes.yml index 2d2de26604..4b9830ccd5 100644 --- a/Resources/Prototypes/Voice/auto_emotes.yml +++ b/Resources/Prototypes/Voice/auto_emotes.yml @@ -12,3 +12,12 @@ interval: 5.0 chance: 0.5 withChat: false +# Kudzu +- type: autoEmote + id: MeatGasp + emote: Gasp + interval: 4.0 # Same interval as a full breathing cycle + chance: 0.01 # Make it very rare + ignoreActionBlocker: true + force: true + hiddenFromChatWindow: true From 20175bffb241be3963048c1113ac007d1e85401e Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 12 Oct 2025 10:48:37 +0000 Subject: [PATCH 191/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 329c9e82d6..945768a43c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Minemoder5000 - changes: - - message: Grape juice cups now contain grape juice. - type: Fix - id: 8579 - time: '2025-05-28T09:32:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37895 - author: Moomoobeef changes: - message: Made high-viz vest less visible. @@ -3944,3 +3937,10 @@ id: 9081 time: '2025-10-12T05:45:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39850 +- author: Princess-Cheeseballs + changes: + - message: Meat Kudzu gasps less often. + type: Tweak + id: 9082 + time: '2025-10-12T10:47:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39304 From beb3db14f0dbad99e806bf2bc47632f4d02c8817 Mon Sep 17 00:00:00 2001 From: B_Kirill <153602297+B-Kirill@users.noreply.github.com> Date: Sun, 12 Oct 2025 20:42:57 +1000 Subject: [PATCH 192/216] Flash immunity examine visibility toggle (#40848) --- Content.Shared/Flash/Components/FlashImmunityComponent.cs | 6 ++++++ Content.Shared/Flash/SharedFlashSystem.cs | 3 ++- Resources/Prototypes/Entities/Mobs/Species/skeleton.yml | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Flash/Components/FlashImmunityComponent.cs b/Content.Shared/Flash/Components/FlashImmunityComponent.cs index 149c27c517..8015f31e70 100644 --- a/Content.Shared/Flash/Components/FlashImmunityComponent.cs +++ b/Content.Shared/Flash/Components/FlashImmunityComponent.cs @@ -15,4 +15,10 @@ public sealed partial class FlashImmunityComponent : Component /// [DataField, AutoNetworkedField] public bool Enabled = true; + + /// + /// Should the flash protection be shown when examining the entity? + /// + [DataField, AutoNetworkedField] + public bool ShowInExamine = true; } diff --git a/Content.Shared/Flash/SharedFlashSystem.cs b/Content.Shared/Flash/SharedFlashSystem.cs index 02513aa91b..a762a94e58 100644 --- a/Content.Shared/Flash/SharedFlashSystem.cs +++ b/Content.Shared/Flash/SharedFlashSystem.cs @@ -268,6 +268,7 @@ public abstract class SharedFlashSystem : EntitySystem private void OnExamine(Entity ent, ref ExaminedEvent args) { - args.PushMarkup(Loc.GetString("flash-protection")); + if (ent.Comp.ShowInExamine) + args.PushMarkup(Loc.GetString("flash-protection")); } } diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index 5dc127878f..d223293862 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -102,6 +102,7 @@ - type: FireVisuals alternateState: Standing - type: FlashImmunity + showInExamine: false - type: Inventory femaleDisplacements: jumpsuit: From 4eaf7526e4a420351d923b7b7f9603b36a983ad6 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 12 Oct 2025 12:51:33 +0200 Subject: [PATCH 193/216] Fix patrons in in-game credits (#40840) --- Resources/Credits/Patrons.yml | 2244 +++++++++++++-------------------- Tools/dump_patrons.ps1 | 2 +- 2 files changed, 862 insertions(+), 1384 deletions(-) diff --git a/Resources/Credits/Patrons.yml b/Resources/Credits/Patrons.yml index fe313d4a8e..d736857edc 100644 --- a/Resources/Credits/Patrons.yml +++ b/Resources/Credits/Patrons.yml @@ -1,1417 +1,895 @@ -- Name: Luaan +- Name: "'-Y-" Tier: Syndicate Agent -- Name: Nugmania - Tier: Revolutionary -- Name: Xoxeyos - Tier: Free -- Name: CobaltCobra - Tier: Syndicate Agent -- Name: Train - Tier: Free -- Name: ExclusiveWizard - Tier: Syndicate Agent -- Name: Matthew Umney - Tier: Free -- Name: Hat Kid - Tier: Revolutionary -- Name: Ingvar Tornberg - Tier: Revolutionary -- Name: Joshua Hines - Tier: Nuclear Operative -- Name: Ashley Parfitt - Tier: Revolutionary -- Name: thehomelessmanbehindthedumpster - Tier: Free -- Name: VmasterVX - Tier: Revolutionary -- Name: JenericJen - Tier: Nuclear Operative -- Name: Cosu - Tier: Revolutionary -- Name: AileenOnline - Tier: Free -- Name: Grotty Bepis - Tier: Nuclear Operative -- Name: Dizzy_Eevee - Tier: Syndicate Agent -- Name: Lizard - Tier: Free -- Name: Michael Van Gaasbeck - Tier: Revolutionary -- Name: Statix AraAra - Tier: Revolutionary -- Name: WWII Kitsune - Tier: Nuclear Operative -- Name: Bruno Bigras - Tier: Revolutionary -- Name: TheLocalTryHard - Tier: Free -- Name: Sufary - Tier: Nuclear Operative -- Name: taydeo - Tier: Nuclear Operative -- Name: dubdubchan - Tier: Syndicate Agent -- Name: tremors08 - Tier: Syndicate Agent -- Name: Jan Gocník - Tier: Free -- Name: Tret Mekiao - Tier: Free -- Name: Ben Joja Hotop - Tier: Free -- Name: Sean Lenin - Tier: Free -- Name: KiddoTBH - Tier: Free -- Name: Kubakura - Tier: Syndicate Agent -- Name: Bullet Kin - Tier: Free -- Name: Abby Eveland - Tier: Revolutionary -- Name: Zoe - Tier: Free -- Name: ghost--page - Tier: Nuclear Operative -- Name: MechaKitty - Tier: Revolutionary -- Name: BlueNexa - Tier: Free -- Name: Noah Heaverin - Tier: Free -- Name: jamozen - Tier: Free -- Name: SireHambone - Tier: Nuclear Operative -- Name: Blair Cyprus - Tier: Free -- Name: Ryan Hanson - Tier: Revolutionary -- Name: Heinrick Archsider - Tier: Free -- Name: Arsalan Sarwari - Tier: Free -- Name: Scardy - Tier: Free -- Name: Nagano - Tier: Revolutionary -- Name: Aridia - Tier: Free -- Name: illpala - Tier: Revolutionary -- Name: kayo josé - Tier: Free -- Name: Tymon Tymek - Tier: Free -- Name: AlexDragoon - Tier: Revolutionary -- Name: Henrik Møller - Tier: Syndicate Agent -- Name: Mythtic B - Tier: Revolutionary -- Name: zedd - Tier: Nuclear Operative -- Name: Penguin Commoner - Tier: Revolutionary -- Name: Davyei - Tier: Free -- Name: Akaelik - Tier: Nuclear Operative -- Name: Kyle Tyo - Tier: Revolutionary -- Name: Rhys Williams - Tier: Free -- Name: Drakkenlupen - Tier: Revolutionary -- Name: Randomposter - Tier: Free -- Name: Justin White - Tier: Free -- Name: Ty Ashley - Tier: Revolutionary -- Name: Scorching Rae - Tier: Nuclear Operative -- Name: Cindy Sampaga - Tier: Free -- Name: Plague - Tier: Free -- Name: dude - Tier: Free -- Name: NIACO - Tier: Free -- Name: Tee The Kobold - Tier: Revolutionary -- Name: Redstones563 - Tier: Free -- Name: Celestrogen - Tier: Syndicate Agent -- Name: SotetSotetSotetSotetSotet - Tier: Syndicate Agent -- Name: Guffin - Tier: Free -- Name: Southbridge - Tier: Nuclear Operative -- Name: ZazaRyn - Tier: Syndicate Agent -- Name: Magic Crystal Radio - Tier: Free -- Name: Sam Sullins - Tier: Free -- Name: Widoux 341 - Tier: Free -- Name: spookerton - Tier: Syndicate Agent -- Name: Tom Goodman (TauOmicronMu#2500) - Tier: Revolutionary -- Name: Robbie Me - Tier: Free -- Name: momochitters - Tier: Free -- Name: Raspberry1111 - Tier: Revolutionary -- Name: flipways - Tier: Nuclear Operative -- Name: Nictis - Tier: Revolutionary -- Name: crazybrain - Tier: Free -- Name: peanut - Tier: Nuclear Operative -- Name: Lewis McCalmont - Tier: Free -- Name: T.P_Gaming - Tier: Revolutionary -- Name: A Patreon of the Ahts - Tier: Free -- Name: brbrbrbrbr brbrbr - Tier: Revolutionary -- Name: Shadcake - Tier: Free -- Name: kristopher arnott - Tier: Syndicate Agent -- Name: Reebe - Tier: Free -- Name: blossom - Tier: Revolutionary -- Name: ml726 - Tier: Free -- Name: Logan Splett - Tier: Free -- Name: Patrick Mitchell - Tier: Free -- Name: Semiotics - Tier: Syndicate Agent -- Name: Snowlili - Tier: Revolutionary -- Name: Hyeronimus Bosch - Tier: Free -- Name: S1rFl0 - Tier: Revolutionary -- Name: Gavin - Tier: Free -- Name: Faust Statler - Tier: Syndicate Agent -- Name: the good king wompicus - Tier: Syndicate Agent -- Name: DerBall - Tier: Revolutionary -- Name: Gallagin - Tier: Revolutionary -- Name: Edward Doyle - Tier: Revolutionary -- Name: Preston Pickering - Tier: Revolutionary -- Name: Andrew Danke - Tier: Syndicate Agent -- Name: Alexis - Tier: Nuclear Operative -- Name: Saphinara - Tier: Free -- Name: Random Person - Tier: Syndicate Agent -- Name: mage_period - Tier: Syndicate Agent -- Name: piras314 - Tier: Free -- Name: Mark Khudaev - Tier: Free -- Name: Saver - Tier: Free -- Name: Snilo Black - Tier: Free -- Name: CptFalcon - Tier: Revolutionary -- Name: Daxx (Justin Winningham) - Tier: Syndicate Agent -- Name: Posters Union Australia (Shlee) - Tier: Free -- Name: nathan - Tier: Free -- Name: funnylookingwolf - Tier: Revolutionary -- Name: Sporkyz - Tier: Revolutionary -- Name: SarahRaven - Tier: Revolutionary -- Name: Da Skolin - Tier: Free -- Name: Joshua Meyer - Tier: Free -- Name: BUMBLE - Tier: Free -- Name: Lily Roche - Tier: Free -- Name: Klive McToaster - Tier: Free -- Name: CasuallyAPerson - Tier: Free -- Name: Powder - Tier: Revolutionary -- Name: Noah Heaverin - Tier: Free -- Name: Violette - Tier: Revolutionary -- Name: Amble - Tier: Nuclear Operative -- Name: James Sanders - Tier: Free -- Name: Susaniel - Tier: Free -- Name: Eve Holly - Tier: Free -- Name: Superscope - Tier: Free -- Name: Nyxilath - Tier: Nuclear Operative -- Name: RedChair368 - Tier: Revolutionary -- Name: Blumbee - Tier: Revolutionary -- Name: Mason Fawcett - Tier: Revolutionary -- Name: Cerzix - Tier: Revolutionary -- Name: Aeris Ophelia - Tier: Free -- Name: Troll_King_907 - Tier: Nuclear Operative -- Name: Certified Hood Classic - Tier: Free -- Name: Hydraliks - Tier: Free -- Name: Meguneri - Tier: Free -- Name: hyphenation - Tier: Nuclear Operative -- Name: Psy - Tier: Revolutionary -- Name: Pinet - Tier: Nuclear Operative -- Name: Vivi Bunny - Tier: Free -- Name: James Stevens - Tier: Revolutionary -- Name: anharmlessguest - Tier: Syndicate Agent -- Name: Outlier - Tier: Free -- Name: Brandon Hackney - Tier: Free -- Name: eleanor nora - Tier: Free -- Name: starch - Tier: Syndicate Agent -- Name: Jacob Watson - Tier: Syndicate Agent -- Name: Seinfeld - Tier: Revolutionary -- Name: Prime! - Tier: Free -- Name: John - Tier: Free -- Name: FauxParadox - Tier: Revolutionary -- Name: Mr_Clank - Tier: Revolutionary -- Name: rafael rabelo - Tier: Free -- Name: TBF_Jack - Tier: Free -- Name: StaceyBalcom - Tier: Revolutionary -- Name: guh - Tier: Revolutionary -- Name: Fran Picek - Tier: Free -- Name: Austenn - Tier: Revolutionary -- Name: Flayn - Tier: Free -- Name: Nye - Tier: Free -- Name: Phycoweirdo - Tier: Nuclear Operative -- Name: Madeleine LeFleur - Tier: Syndicate Agent -- Name: Anton - Tier: Revolutionary -- Name: That Furry Fuck - Tier: Free -- Name: sat - Tier: Free -- Name: goober - Tier: Free -- Name: Boogerfoot - Tier: Nuclear Operative -- Name: Raiden Johnson - Tier: Revolutionary -- Name: Talbot - Tier: Revolutionary -- Name: Alen Kadric - Tier: Free -- Name: pogcat - Tier: Free -- Name: Dave - Tier: Free -- Name: Nathaniel Taylor - Tier: Revolutionary -- Name: Z4NEER - Tier: Nuclear Operative -- Name: Laying on my penis until it falls asleep, so it feels like I'm giving someone else a hando - Tier: Revolutionary -- Name: Sam Caesar - Tier: Revolutionary -- Name: Lykan - Tier: Free -- Name: tarna41 - Tier: Free -- Name: Ryan Johnson - Tier: Free -- Name: Andrew Montagne - Tier: Syndicate Agent -- Name: yakub mobutu - Tier: Free -- Name: Michael Krebs - Tier: Free -- Name: mr funny swag - Tier: Free -- Name: Crazyeyes24 - Tier: Syndicate Agent -- Name: Zylo - Tier: Free -- Name: ScarKy0 - Tier: Revolutionary -- Name: Randall Hudson - Tier: Free -- Name: FaberTheCatboy - Tier: Free -- Name: IamOzyman - Tier: Revolutionary -- Name: Jado0213 - Tier: Revolutionary -- Name: StaticeStorm - Tier: Syndicate Agent -- Name: Baron Mathot - Tier: Free -- Name: CrudeOil - Tier: Nuclear Operative -- Name: Sartec - Tier: Revolutionary -- Name: Mathew McGuire - Tier: Revolutionary -- Name: Jelloterd2 - Tier: Free -- Name: Commissar Fox - Tier: Syndicate Agent -- Name: tyler adams - Tier: Revolutionary -- Name: Logan Britt - Tier: Free -- Name: Joshua A. - Tier: Free -- Name: ya boi darth Vader - Tier: Free -- Name: Syndlkat - Tier: Free -- Name: Zyleak - Tier: Revolutionary -- Name: Hunter - Tier: Free -- Name: Killerqu00 - Tier: Free -- Name: lzk - Tier: Free -- Name: Cai Williamson - Tier: Syndicate Agent -- Name: Arykh - Tier: Nuclear Operative -- Name: Pallastovid - Tier: Free -- Name: Rome - Tier: Revolutionary -- Name: mawrk - Tier: Free -- Name: Jack - Tier: Revolutionary -- Name: stikfigz - Tier: Revolutionary -- Name: RyanTuek - Tier: Revolutionary -- Name: David N - Tier: Syndicate Agent -- Name: Panzer IV - Tier: Free -- Name: Novaq - Tier: Revolutionary -- Name: Trevor Doyle - Tier: Free -- Name: Borna Punda - Tier: Revolutionary -- Name: Patrick Long - Tier: Free -- Name: Alpha - Tier: Nuclear Operative -- Name: Gaëtan GOUSSEAUD - Tier: Revolutionary -- Name: Hayden Wessing - Tier: Revolutionary -- Name: Noodle is me - Tier: Syndicate Agent -- Name: snakebb - Tier: Revolutionary -- Name: Patrick - Tier: Revolutionary -- Name: Väinö Kontinen - Tier: Free -- Name: Devin Nelson - Tier: Revolutionary -- Name: Rat Man - Tier: Revolutionary -- Name: Christopher Day - Tier: Free -- Name: Wilhelm 17 - Tier: Free -- Name: Kieue Caprie - Tier: Revolutionary -- Name: RamenZorn - Tier: Syndicate Agent -- Name: Swix Swix - Tier: Revolutionary -- Name: Katharina - Tier: Free -- Name: Blackmare - Tier: Syndicate Agent -- Name: lukiw - Tier: Revolutionary -- Name: Magelfik - Tier: Revolutionary -- Name: Kevin - Tier: Nuclear Operative -- Name: Tomáš Sitarčík - Tier: Syndicate Agent -- Name: Coolsurf6 - Tier: Revolutionary -- Name: Neexdle - Tier: Free -- Name: Lucid - Tier: Free -- Name: MissKay1994 - Tier: Syndicate Agent -- Name: Raccoononi - Tier: Revolutionary -- Name: Avocado999 - Tier: Free -- Name: Invisorum - Tier: Nuclear Operative -- Name: Hannah - Tier: Nuclear Operative -- Name: Thomas - Tier: Revolutionary -- Name: Cozmicc - Tier: Free -- Name: Unalterableness Happiness - Tier: Free -- Name: Sparlight - Tier: Nuclear Operative -- Name: MAILS ADVISORY - Tier: Free -- Name: Rq52 - Tier: Free -- Name: Ben Wahba - Tier: Free -- Name: North - Tier: Free -- Name: Tyran - Tier: Free -- Name: TheSimpleTime - Tier: Free -- Name: Minemoder - Tier: Syndicate Agent -- Name: Richard "Rei" Weeks - Tier: Syndicate Agent -- Name: Sika-Voi - Tier: Free -- Name: Dumbdestroyer2 - Tier: Free -- Name: Ferox Heist - Tier: Free -- Name: Ryan Vieira - Tier: Free -- Name: kithri - Tier: Nuclear Operative -- Name: Luzurper - Tier: Revolutionary -- Name: Rainy - Tier: Revolutionary -- Name: Dusk - Tier: Revolutionary -- Name: Apocist - Tier: Revolutionary -- Name: Yukari_TK - Tier: Free -- Name: Iris - Tier: Free -- Name: Jamie Forkner - Tier: Free -- Name: rokudara - Tier: Free -- Name: Xionwalker - Tier: Free -- Name: Michael Schrader - Tier: Free -- Name: JT Billings - Tier: Revolutionary -- Name: Stedar - Tier: Syndicate Agent -- Name: Alex Burd - Tier: Nuclear Operative -- Name: Vasilis The Pikachu - Tier: Free -- Name: Erik Meinke - Tier: Revolutionary -- Name: Sleeepz - Tier: Syndicate Agent -- Name: Jonathan - Tier: Free -- Name: Trent Warfel - Tier: Nuclear Operative -- Name: Fritz Vohlkson - Tier: Free -- Name: Гоша Ушаров - Tier: Free -- Name: Cpt Blastahoe - Tier: Free -- Name: dedomena - Tier: Free -- Name: Nolan Downing - Tier: Free -- Name: Seth Morron - Tier: Revolutionary -- Name: Fumo Legionnaire - Tier: Free -- Name: obama - Tier: Free -- Name: Daniel Megiddo - Tier: Free -- Name: Денис - Tier: Free -- Name: Ubaser - Tier: Revolutionary -- Name: Catdere - Tier: Syndicate Agent -- Name: valery xolstov - Tier: Free -- Name: Marios Sardis - Tier: Revolutionary -- Name: Constrife - Tier: Free -- Name: TINYANGRYWOMAN - Tier: Free -- Name: Kerensky - Tier: Revolutionary -- Name: DEATHB4DEFEAT - Tier: Free -- Name: Kristy Denniss - Tier: Free -- Name: orange color - Tier: Revolutionary -- Name: Hectik - Tier: Free -- Name: SomeDogo - Tier: Free -- Name: Joshua Meyer - Tier: Nuclear Operative -- Name: Matthias Bechtold - Tier: Revolutionary -- Name: Serafim - Tier: Free -- Name: Cindy Xiao - Tier: Free -- Name: SmokingKilz - Tier: Free -- Name: Jacob Scott - Tier: Free -- Name: Ryan Kelly - Tier: Revolutionary -- Name: mikiju - Tier: Syndicate Agent -- Name: TheGungeonologist - Tier: Revolutionary -- Name: Tia - Tier: Revolutionary -- Name: yeoshua - Tier: Syndicate Agent -- Name: David Ilina - Tier: Free -- Name: Robyn Pothagan - Tier: Free -- Name: chomp - Tier: Free -- Name: Maksym Aleinikov - Tier: Free -- Name: Chase M. - Tier: Free -- Name: Ethan Maria - Tier: Free -- Name: Luna Rose - Tier: Free -- Name: Jordon - Tier: Revolutionary -- Name: Godfiend - Tier: Revolutionary -- Name: Jake Huxell - Tier: Free -- Name: Alexander Simakov - Tier: Free -- Name: Hannah Dawson - Tier: Syndicate Agent -- Name: Dieselmohawk D. - Tier: Revolutionary -- Name: Sean Lilly - Tier: Syndicate Agent -- Name: Brandon Roughley - Tier: Syndicate Agent -- Name: Jack - Tier: Free -- Name: Cooliano Rizzo - Tier: Free -- Name: North Star - Tier: Free -- Name: Flamebrain - Tier: Free -- Name: Andrew - Tier: Revolutionary -- Name: Ostoja - Tier: Free -- Name: Russian TS - Tier: Nuclear Operative -- Name: Kyu, The Meme Fairy - Tier: Free -- Name: LIMIT_bro . - Tier: Free -- Name: Kim - Tier: Revolutionary -- Name: Dourbii - Tier: Revolutionary -- Name: Autistic Dog - Tier: Free -- Name: Black Rose - Tier: Free -- Name: rose soul - Tier: Free -- Name: Toast - Tier: Free -- Name: Jiangshi Luvr - Tier: Free -- Name: OllyTheFoxcoon - Tier: Free -- Name: Christopher Peltola - Tier: Revolutionary -- Name: Bonefan223 - Tier: Nuclear Operative -- Name: Fie - Tier: Free -- Name: DuskyJay - Tier: Free -- Name: Zella Zane - Tier: Revolutionary -- Name: Pixel Realms - Tier: Free -- Name: ConcaveGnome - Tier: Syndicate Agent -- Name: Ростислав Мірошніченко - Tier: Free -- Name: Hunter Tew - Tier: Syndicate Agent -- Name: Daniel D - Tier: Syndicate Agent -- Name: Kick Buttowski - Tier: Free -- Name: Eggexe - Tier: Free -- Name: Lv - Tier: Free -- Name: Ali Alashar - Tier: Free -- Name: Nathaniel Joseph Hurd - Tier: Revolutionary -- Name: sk3iron - Tier: Revolutionary -- Name: Dax XZ - Tier: Free -- Name: debelizm - Tier: Free -- Name: Kaisering - Tier: Revolutionary -- Name: VividWisp - Tier: Syndicate Agent -- Name: Alex Mercer - Tier: Free -- Name: AmalgoMyte - Tier: Revolutionary -- Name: SeanKim - Tier: Free -- Name: Siegorvus - Tier: Free -- Name: вася васильев - Tier: Free -- Name: Mci - Tier: Revolutionary -- Name: KateSlime206 - Tier: Nuclear Operative -- Name: Robert - Tier: Free -- Name: Ben Z' - Tier: Revolutionary -- Name: Luke - Tier: Free -- Name: Tyler Putnam - Tier: Free -- Name: Ville Sarmiola - Tier: Free -- Name: kelaclone - Tier: Free -- Name: Archmonarch - Tier: Syndicate Agent -- Name: Brett - Tier: Free -- Name: Hanzdegloker - Tier: Syndicate Agent -- Name: Piotr - Tier: Revolutionary -- Name: CloudyClover - Tier: Revolutionary -- Name: Jim Masterson - Tier: Free -- Name: kenneth heller - Tier: Syndicate Agent -- Name: Gosera - - Tier: Syndicate Agent -- Name: Asaf Ataş - Tier: Free -- Name: DeckDevilYGO - Tier: Free -- Name: nokko - Tier: Free -- Name: Krokodiel89 - Tier: Free -- Name: Nojan Niaki - Tier: Revolutionary -- Name: YuNii - Tier: Nuclear Operative -- Name: Georgia Partyka - Tier: Syndicate Agent -- Name: Teeth - Tier: Free -- Name: DrMelon - Tier: Revolutionary -- Name: Molly the Bully - Tier: Nuclear Operative -- Name: An Evil Eel - Tier: Free -- Name: Hasan al-Binabi - Tier: Free -- Name: franz photos - Tier: Free -- Name: Milkshake45752 - Tier: Free -- Name: Bru Tal - Tier: Free -- Name: krberryy - Tier: Revolutionary -- Name: Thomas Mcintosh - Tier: Free -- Name: Alex Nordlund - Tier: Syndicate Agent -- Name: Swindel_ - Tier: Syndicate Agent -- Name: MrGloopy - Tier: Revolutionary -- Name: blitz gaming - Tier: Free -- Name: Nicholi - Tier: Syndicate Agent -- Name: Taber - Tier: Revolutionary -- Name: 以迪 黃 - Tier: Free -- Name: W Geertsma - Tier: Free -- Name: BloodyJMary - Tier: Free -- Name: quri1q - Tier: Free -- Name: SleepyBody91 - Tier: Free -- Name: David Gee - Tier: Free -- Name: ThoranTW - Tier: Free -- Name: pigeopeas - Tier: Free -- Name: Zakory L Holbrook - Tier: Revolutionary -- Name: Aiden - Tier: Revolutionary -- Name: Pangaron - Tier: Syndicate Agent -- Name: NeatVisor - Tier: Free -- Name: Solidus Snake - Tier: Nuclear Operative -- Name: Oliver Skyler - Tier: Free -- Name: mustafa kılıç - Tier: Free -- Name: IceStorm theDragon - Tier: Revolutionary -- Name: Indri - Tier: Revolutionary -- Name: Graded - Tier: Free -- Name: tunnp0 - Tier: Free -- Name: Vexxtraordinary - Tier: Revolutionary -- Name: Sam Hediger - Tier: Free -- Name: Aldi Abduali - Tier: Free -- Name: Adam Clarke - Tier: Free -- Name: Munt - Tier: Free -- Name: Obspogon - Tier: Free -- Name: Adrian Thompson - Tier: Free -- Name: albatrossMonarch - Tier: Free -- Name: JaQal - Tier: Free -- Name: Simofie - Tier: Free -- Name: redgunny - Tier: Free -- Name: Kevin Chapman - Tier: Free -- Name: Sjevi Aardvark - Tier: Free -- Name: Chris Walter - Tier: Free -- Name: David Sterling - Tier: Free -- Name: Zcore - Tier: Free -- Name: tapohuy - Tier: Free -- Name: MasterFurret - Tier: Revolutionary -- Name: Christian Hicks - Tier: Syndicate Agent -- Name: François Desautels - Tier: Revolutionary -- Name: awndrssk - Tier: Free -- Name: Vice Emargo - Tier: Syndicate Agent -- Name: Mihailo Trickovic - Tier: Syndicate Agent -- Name: Sandvich enjoyer - Tier: Revolutionary -- Name: Higgtastic - Tier: Revolutionary - Name: "612" Tier: Revolutionary -- Name: AlecRazec - Tier: Revolutionary -- Name: Repo - Tier: Nuclear Operative -- Name: Ignoramis - Tier: Free -- Name: Jeffery Pointer - Tier: Syndicate Agent -- Name: DireBoar - Tier: Free -- Name: oBerry - Tier: Free -- Name: Adam Smedstad - Tier: Free -- Name: Superglue - Tier: Syndicate Agent -- Name: DrIvoPotato - Tier: Nuclear Operative -- Name: Petalmeat - Tier: Free -- Name: Malachi Housewright - Tier: Revolutionary -- Name: Fallcon - Tier: Free -- Name: ShaunTexas - Tier: Free -- Name: HCG - Tier: Free -- Name: GeneralMarty - Tier: Free -- Name: Nicholas - Tier: Nuclear Operative -- Name: Geekyhobo2 - Tier: Revolutionary -- Name: Alexandre Courtin - Tier: Revolutionary -- Name: Wolfie - Tier: Revolutionary -- Name: Shaina Gibson - Tier: Free -- Name: Charles Baron - Tier: Free -- Name: Constellations - Tier: Free -- Name: tynobeard 123 - Tier: Revolutionary -- Name: Lyndomen - Tier: Revolutionary -- Name: Glenn Olsen - Tier: Syndicate Agent -- Name: Wiliam - Tier: Nuclear Operative -- Name: SHANE ALAN ZINDA - Tier: Free -- Name: Saiiryn - Tier: Free -- Name: AC Computing - Tier: Nuclear Operative -- Name: eric156 - Tier: Free -- Name: Katarn - Tier: Free -- Name: Blight - Tier: Syndicate Agent -- Name: Tim Foley - Tier: Free -- Name: Sven Tammerijn - Tier: Revolutionary -- Name: Raw Toast - Tier: Free -- Name: Watson Whittington - Tier: Syndicate Agent -- Name: David - Tier: Revolutionary -- Name: DadNotTheBelt - Tier: Free -- Name: Enricoc3l - Tier: Revolutionary -- Name: Vandell - Tier: Free -- Name: BlueisDumb - Tier: Nuclear Operative -- Name: Buldinn Girshovich - Tier: Nuclear Operative -- Name: Whistling Jake - Tier: Revolutionary -- Name: Wallace Megas - Tier: Free -- Name: Samtaro - Tier: Nuclear Operative -- Name: Aexxie - Tier: Revolutionary -- Name: Fiebertraum Illhead - Tier: Syndicate Agent -- Name: tokie - Tier: Nuclear Operative -- Name: Odin7heWanderer - Tier: Free -- Name: Jeff Tatem - Tier: Nuclear Operative -- Name: M4shr00m - Tier: Free -- Name: Gordod - Tier: Syndicate Agent -- Name: Skarlet - Tier: Free -- Name: March - Tier: Syndicate Agent -- Name: Александр Белошапка - Tier: Revolutionary -- Name: Dave - Tier: Revolutionary -- Name: Akira - Tier: Revolutionary -- Name: Alix Shepard - Tier: Nuclear Operative -- Name: JhenMaster - Tier: Free -- Name: Lieutenant Colonel Orangejuice - Tier: Syndicate Agent -- Name: TheGoldElite - Tier: Revolutionary -- Name: Gnomo - Tier: Nuclear Operative -- Name: Never Solus - Tier: Free -- Name: Ari. - Tier: Revolutionary -- Name: Kevin - Tier: Nuclear Operative -- Name: DubzyVEVO - Tier: Revolutionary -- Name: ikamuse johnson - Tier: Revolutionary -- Name: Saphire - Tier: Revolutionary -- Name: Gavin Simmons - Tier: Syndicate Agent -- Name: Tamora Droppa - Tier: Revolutionary -- Name: Gaxeer - Tier: Syndicate Agent -- Name: rosysyn - Tier: Revolutionary -- Name: Scott MacCombie - Tier: Free -- Name: Jeremy Hernandez - Tier: Syndicate Agent -- Name: Kai - Tier: Nuclear Operative -- Name: Victoly - Tier: Free -- Name: chilicheesecat - Tier: Free -- Name: Arthur Norris - Tier: Syndicate Agent -- Name: Carbonhell - Tier: Syndicate Agent -- Name: BrittaBee93 - Tier: Free -- Name: Rasmus Cedergren - Tier: Revolutionary -- Name: Greggo - Tier: Syndicate Agent -- Name: Pasemi - Tier: Revolutionary -- Name: Unknown Kiwi - Tier: Revolutionary -- Name: Mitchell Marry - Tier: Revolutionary -- Name: Matouš Hrdlička - Tier: Revolutionary -- Name: Roman - Tier: Syndicate Agent -- Name: Jacob Schramm - Tier: Free -- Name: Nathan Zaldivar - Tier: Nuclear Operative -- Name: SpydAxe - Tier: Revolutionary -- Name: BokChoy - Tier: Nuclear Operative -- Name: Nicholas Williamson - Tier: Nuclear Operative -- Name: William Grondin - Tier: Revolutionary -- Name: KevKev - Tier: Free -- Name: Gothryd - Tier: Revolutionary -- Name: Brandon Campbell - Tier: Free -- Name: Matthew C Miklaucic - Tier: Revolutionary -- Name: Serianas - Tier: Nuclear Operative -- Name: lapatison - Tier: Revolutionary -- Name: Uinseann - Tier: Revolutionary -- Name: osborn - Tier: Syndicate Agent -- Name: LPGaming - Tier: Free -- Name: Alex Fry - Tier: Nuclear Operative -- Name: Ramiro Agis - Tier: Revolutionary -- Name: Mikhail - Tier: Revolutionary -- Name: SnapKick - Tier: Revolutionary -- Name: liltenhead - Tier: Revolutionary -- Name: James Andrew Peoples Jr - Tier: Revolutionary -- Name: Serathis - Tier: Revolutionary -- Name: Joel - Tier: Revolutionary -- Name: Rafał Kowalewski - Tier: Revolutionary -- Name: Kris Piper - Tier: Free -- Name: Anthony Chicko - Tier: Revolutionary -- Name: Taylor - Tier: Revolutionary -- Name: Phillip Inman - Tier: Revolutionary -- Name: Zakanater 19 - Tier: Revolutionary -- Name: Molon - Tier: Syndicate Agent -- Name: Peter "Azmond" Newhouse - Tier: Free -- Name: Snowni - Tier: Nuclear Operative -- Name: Tom Cruize - Tier: Syndicate Agent -- Name: Corpus Inc. - Tier: Revolutionary -- Name: BlastWind - Tier: Free -- Name: Echinodermata - Tier: Revolutionary -- Name: Hamcha - Tier: Revolutionary -- Name: Kaitlynn Brennan - Tier: Syndicate Agent -- Name: Oxyclean114 - Tier: Revolutionary -- Name: JustanAnus - Tier: Nuclear Operative -- Name: wtcwr68 - Tier: Nuclear Operative -- Name: Azmith Blackheart - Tier: Revolutionary -- Name: Collin R Terrell - Tier: Revolutionary -- Name: Cormos Lemming - Tier: Nuclear Operative -- Name: grhmhome - Tier: Revolutionary -- Name: SpiffyNnemonic - Tier: Revolutionary -- Name: Callum Tubrett - Tier: Nuclear Operative -- Name: Hydration - Tier: Revolutionary -- Name: Morty - Tier: Free -- Name: Dylan Roberts - Tier: Syndicate Agent -- Name: mrniceguy0o0 - Tier: Free -- Name: Wrexbe - Tier: Revolutionary -- Name: Frege Beach - Tier: Revolutionary -- Name: DBF - Tier: Syndicate Agent -- Name: Kesiath - Tier: Nuclear Operative -- Name: Voltinho - Tier: Revolutionary -- Name: AquaDraco - Tier: Revolutionary - Name: A Yaj Tier: Revolutionary -- Name: Miniwoffer +- Name: Aaron Handleman Tier: Revolutionary -- Name: hh +- Name: Abby Eveland + Tier: Revolutionary +- Name: AC Computing + Tier: Nuclear Operative +- Name: Aethan Olsen + Tier: Revolutionary +- Name: Aexxie + Tier: Revolutionary +- Name: Aiden + Tier: Revolutionary +- Name: Akaelik + Tier: Nuclear Operative +- Name: Akira + Tier: Revolutionary +- Name: AlecRazec + Tier: Revolutionary +- Name: Alex Burd + Tier: Nuclear Operative +- Name: Alex Fry + Tier: Nuclear Operative +- Name: Alex Nordlund Tier: Syndicate Agent -- Name: Chase Trotter - Tier: Nuclear Operative -- Name: Skifan180 - Tier: Free -- Name: Florian - Tier: Revolutionary -- Name: Hoplophobia - Tier: Revolutionary -- Name: Viridian - Tier: Free -- Name: Daskata - Tier: Nuclear Operative -- Name: TacoCub - Tier: Revolutionary -- Name: Jack Rose - Tier: Revolutionary -- Name: Chem_Inventory - Tier: Nuclear Operative -- Name: Jax - Tier: Nuclear Operative -- Name: The Hateful Flesh - Tier: Revolutionary -- Name: Gavin Jones - Tier: Nuclear Operative -- Name: Prof. Omii - Tier: Nuclear Operative -- Name: mksky - Tier: Revolutionary -- Name: Greyhound Connect - Tier: Revolutionary - Name: Alex Tempest Tier: Revolutionary -- Name: Rat Fungus +- Name: Alexandre Courtin + Tier: Revolutionary +- Name: AlexDragoon + Tier: Revolutionary +- Name: Alexis Tier: Nuclear Operative -- Name: Will M. - Tier: Revolutionary -- Name: spinnermaster - Tier: Free -- Name: Koyki - Tier: Revolutionary -- Name: Hunter James +- Name: Alix Shepard Tier: Nuclear Operative -- Name: Valinov - Tier: Nuclear Operative -- Name: Nemmay - Tier: Revolutionary -- Name: Dylan Hull - Tier: Revolutionary -- Name: FungiFog - Tier: Revolutionary -- Name: S.C. +- Name: all fields Tier: Syndicate Agent -- Name: "'-Y-" - Tier: Syndicate Agent -- Name: pooba - Tier: Revolutionary -- Name: evilJenny - Tier: Revolutionary -- Name: clyf - Tier: Free -- Name: Kerb - Tier: Revolutionary -- Name: queednyeb - Tier: Revolutionary -- Name: Robin Rottstock - Tier: Revolutionary -- Name: Third - Tier: Revolutionary +- Name: Alpha + Tier: Nuclear Operative - Name: Altana Tier: Revolutionary -- Name: showgun117 +- Name: AmalgoMyte + Tier: Revolutionary +- Name: Amble + Tier: Nuclear Operative +- Name: Andrew Danke Tier: Syndicate Agent -- Name: Durp - Tier: Revolutionary -- Name: Joshington Awesomahee - Tier: Revolutionary -- Name: Diklyquill - Tier: Revolutionary -- Name: Eric VW - Tier: Revolutionary -- Name: Nat - Tier: Revolutionary -- Name: Evan Armstrong - Tier: Revolutionary -- Name: Citizen Battle - Tier: Nuclear Operative -- Name: Cyberate - Tier: Revolutionary -- Name: Enzoman12 - Tier: Nuclear Operative -- Name: Curtis Pearson - Tier: Revolutionary -- Name: Mono - Tier: Revolutionary -- Name: Xenon Dragon +- Name: Andrew Montagne Tier: Syndicate Agent -- Name: Jerg Jerginson - Tier: Nuclear Operative -- Name: kik +- Name: Androidonator Tier: Revolutionary -- Name: Star Lord +- Name: anharmlessguest Tier: Syndicate Agent -- Name: kannthus - Tier: Syndicate Agent -- Name: Ethan Keller +- Name: Anthony Chicko Tier: Revolutionary -- Name: John Doe - Tier: Nuclear Operative -- Name: Robert Reed - Tier: Nuclear Operative -- Name: DramaBuns - Tier: Revolutionary -- Name: Bush Boy - Tier: Nuclear Operative -- Name: Quonn - Tier: Syndicate Agent -- Name: KrystalDisc - Tier: Revolutionary -- Name: LeTobbs - Tier: Revolutionary -- Name: Darren Brady - Tier: Free -- Name: Zandario - Tier: Revolutionary -- Name: Lucas Welsh - Tier: Revolutionary -- Name: Nico Thate - Tier: Free - Name: Anthony Fleck Tier: Nuclear Operative -- Name: vifs_vestige - Tier: Syndicate Agent -- Name: Bobberunio +- Name: Anton Tier: Revolutionary -- Name: Zadenae - Tier: Nuclear Operative -- Name: Into the Stars - Community Host +- Name: AquaDraco + Tier: Revolutionary +- Name: Arandomartfan + Tier: Revolutionary +- Name: Archie Hicks + Tier: Revolutionary +- Name: Archmonarch + Tier: Syndicate Agent +- Name: Ari. + Tier: Revolutionary +- Name: Arin Pearce + Tier: Revolutionary +- Name: Arrol Gantry Tier: Nuclear Operative - Name: arthropods Tier: Revolutionary -- Name: Jack Gardiner - Tier: Revolutionary -- Name: BigMcLargeHuge - Tier: Free -- Name: merklaw - Tier: Revolutionary -- Name: CPM311 - Tier: Revolutionary -- Name: NetGlitch - Tier: Nuclear Operative -- Name: Bahke - Tier: Nuclear Operative -- Name: Prayer - Tier: Nuclear Operative -- Name: Trevor McConnell - Tier: Nuclear Operative -- Name: MetalClone - Tier: Free -- Name: Farewell Fire +- Name: Arthur Norris Tier: Syndicate Agent -- Name: Ninja - Tier: Syndicate Agent -- Name: all fields - Tier: Syndicate Agent -- Name: Kyle Hipke +- Name: Arykh Tier: Nuclear Operative -- Name: Daniel Thompson +- Name: Ashley Parfitt Tier: Revolutionary -- Name: Tyler Young - Tier: Nuclear Operative -- Name: LeoZ +- Name: Asterisk + Tier: Syndicate Agent +- Name: Aussiemandias + Tier: Syndicate Agent +- Name: Austenn Tier: Revolutionary - Name: avcde Tier: Nuclear Operative +- Name: Azmith Blackheart + Tier: Revolutionary +- Name: Bahke + Tier: Nuclear Operative +- Name: Ben Z' + Tier: Revolutionary +- Name: Bex + Tier: Revolutionary +- Name: Blackmare + Tier: Syndicate Agent +- Name: Blight + Tier: Syndicate Agent +- Name: blossom + Tier: Revolutionary +- Name: BlueisDumb + Tier: Nuclear Operative +- Name: Blumbee + Tier: Revolutionary +- Name: Bobberunio + Tier: Revolutionary +- Name: BokChoy + Tier: Nuclear Operative +- Name: Bonefan223 + Tier: Nuclear Operative +- Name: Boogerfoot + Tier: Nuclear Operative +- Name: Borna Punda + Tier: Revolutionary +- Name: Brandon + Tier: Revolutionary +- Name: Brandon Roughley + Tier: Syndicate Agent +- Name: brbrbrbrbr brbrbr + Tier: Revolutionary +- Name: BrunBytes + Tier: Revolutionary +- Name: Bruno Bigras + Tier: Revolutionary +- Name: Buldinn Girshovich + Tier: Nuclear Operative +- Name: Bumlocked + Tier: Revolutionary +- Name: Bush Boy + Tier: Nuclear Operative +- Name: Callum Tubrett + Tier: Nuclear Operative +- Name: Carbonhell + Tier: Syndicate Agent +- Name: Catdere + Tier: Syndicate Agent +- Name: Celestrogen + Tier: Syndicate Agent +- Name: Cerzix + Tier: Revolutionary +- Name: Chase Trotter + Tier: Nuclear Operative +- Name: Chem_Inventory + Tier: Nuclear Operative +- Name: Christian Hicks + Tier: Syndicate Agent +- Name: Citizen Battle + Tier: Nuclear Operative +- Name: CloudyClover + Tier: Revolutionary +- Name: Collin R Terrell + Tier: Revolutionary +- Name: Commissar Fox + Tier: Syndicate Agent +- Name: ConcaveGnome + Tier: Syndicate Agent +- Name: Coolsurf6 + Tier: Revolutionary +- Name: Cormos Lemming + Tier: Nuclear Operative +- Name: Corpus Inc. + Tier: Revolutionary +- Name: CPM311 + Tier: Revolutionary +- Name: CptFalcon + Tier: Revolutionary +- Name: Crazyeyes24 + Tier: Syndicate Agent +- Name: CrudeOil + Tier: Nuclear Operative +- Name: Curtis Pearson + Tier: Revolutionary +- Name: Cyberate + Tier: Revolutionary +- Name: Daniel D + Tier: Syndicate Agent +- Name: Daniel Thompson + Tier: Revolutionary +- Name: Daskata + Tier: Nuclear Operative +- Name: Dastion + Tier: Revolutionary +- Name: Dave + Tier: Revolutionary +- Name: David + Tier: Revolutionary +- Name: David N + Tier: Syndicate Agent +- Name: Davyei + Tier: Revolutionary +- Name: Daxx (Justin Winningham) + Tier: Syndicate Agent +- Name: DBF + Tier: Syndicate Agent +- Name: DerBall + Tier: Revolutionary +- Name: Devin Nelson + Tier: Revolutionary +- Name: Dieselmohawk D. + Tier: Revolutionary +- Name: Diklyquill + Tier: Revolutionary +- Name: Dizzy_Eevee + Tier: Syndicate Agent +- Name: Dourbii + Tier: Revolutionary +- Name: Dr.Raccoon + Tier: Revolutionary +- Name: Dr_Med_Izin + Tier: Revolutionary +- Name: Drakkenlupen + Tier: Revolutionary +- Name: DramaBuns + Tier: Revolutionary +- Name: DrIvoPotato + Tier: Nuclear Operative +- Name: DrMelon + Tier: Revolutionary +- Name: dubdubchan + Tier: Syndicate Agent +- Name: DubzyVEVO + Tier: Revolutionary +- Name: Durp + Tier: Revolutionary +- Name: Dusk + Tier: Revolutionary +- Name: Dylan Hull + Tier: Revolutionary +- Name: Dylan Roberts + Tier: Syndicate Agent +- Name: Echinodermata + Tier: Revolutionary +- Name: Edward Doyle + Tier: Revolutionary +- Name: Enricoc3l + Tier: Revolutionary +- Name: Enzoman12 + Tier: Nuclear Operative +- Name: Erik Meinke + Tier: Revolutionary +- Name: Ethan Keller + Tier: Revolutionary +- Name: Evan Armstrong + Tier: Revolutionary +- Name: evilJenny + Tier: Revolutionary +- Name: ExclusiveWizard + Tier: Syndicate Agent +- Name: Farewell Fire + Tier: Syndicate Agent +- Name: Faust Statler + Tier: Syndicate Agent +- Name: FauxParadox + Tier: Revolutionary +- Name: Fiebertraum Illhead + Tier: Syndicate Agent +- Name: flipways + Tier: Nuclear Operative +- Name: Florian + Tier: Revolutionary +- Name: François Desautels + Tier: Revolutionary +- Name: Frege Beach + Tier: Revolutionary +- Name: FungiFog + Tier: Revolutionary +- Name: funnylookingwolf + Tier: Revolutionary +- Name: Gallagin + Tier: Revolutionary +- Name: Gavin Jones + Tier: Nuclear Operative +- Name: Gavin Simmons + Tier: Revolutionary +- Name: Gaxeer + Tier: Syndicate Agent +- Name: Gaëtan GOUSSEAUD + Tier: Revolutionary +- Name: Geekyhobo2 + Tier: Revolutionary +- Name: Georgia Partyka + Tier: Syndicate Agent +- Name: ghost--page + Tier: Nuclear Operative +- Name: Glenn Olsen + Tier: Syndicate Agent +- Name: Gnomo + Tier: Nuclear Operative +- Name: Godfiend + Tier: Revolutionary +- Name: Gordod + Tier: Syndicate Agent +- Name: Gosera - + Tier: Syndicate Agent +- Name: Gothryd + Tier: Revolutionary +- Name: Greggo + Tier: Syndicate Agent +- Name: Greyhound Connect + Tier: Revolutionary +- Name: grhmhome + Tier: Revolutionary +- Name: guh + Tier: Revolutionary +- Name: Hamcha + Tier: Revolutionary +- Name: Hannah + Tier: Nuclear Operative +- Name: Hannah Dawson + Tier: Syndicate Agent +- Name: Hanzdegloker + Tier: Syndicate Agent +- Name: Hat Kid + Tier: Revolutionary +- Name: Hayden + Tier: Revolutionary +- Name: Henrik Møller + Tier: Syndicate Agent +- Name: hh + Tier: Syndicate Agent +- Name: Higgtastic + Tier: Revolutionary +- Name: Hoplophobia + Tier: Revolutionary +- Name: huh? + Tier: Revolutionary +- Name: Hunter James + Tier: Nuclear Operative +- Name: Hunter Tew + Tier: Syndicate Agent +- Name: hyphenation + Tier: Nuclear Operative +- Name: I'm going to resurrect Charlie Kirk as a gay zombie with a permanent hard cock, like the scene where robocop is lungs, but boner + Tier: Revolutionary +- Name: IamOzyman + Tier: Revolutionary +- Name: IceStorm theDragon + Tier: Revolutionary +- Name: ikamuse johnson + Tier: Revolutionary +- Name: illpala + Tier: Revolutionary +- Name: Ingvar Tornberg + Tier: Revolutionary +- Name: Into the Stars - Community Host + Tier: Nuclear Operative +- Name: Invisorum + Tier: Nuclear Operative +- Name: Irish Kelly + Tier: Syndicate Agent +- Name: Jack + Tier: Revolutionary +- Name: Jack Gardiner + Tier: Revolutionary +- Name: Jack Rose + Tier: Revolutionary +- Name: Jacob Watson + Tier: Syndicate Agent +- Name: Jado0213 + Tier: Revolutionary +- Name: JagerVonS + Tier: Revolutionary +- Name: James Andrew Peoples Jr + Tier: Revolutionary +- Name: James Stevens + Tier: Revolutionary +- Name: Jax + Tier: Nuclear Operative +- Name: Jeaglekill + Tier: Revolutionary +- Name: Jeff Tatem + Tier: Nuclear Operative +- Name: Jeffery Pointer + Tier: Syndicate Agent +- Name: JenericJen + Tier: Revolutionary +- Name: Jeremy Hernandez + Tier: Syndicate Agent +- Name: Jerg Jerginson + Tier: Nuclear Operative +- Name: Joel + Tier: Revolutionary +- Name: JohannVanDerwis + Tier: Revolutionary +- Name: John Doe + Tier: Nuclear Operative +- Name: Jordon + Tier: Revolutionary +- Name: Joshington Awesomahee + Tier: Revolutionary +- Name: Joshua Hines + Tier: Nuclear Operative +- Name: Joshua Meyer + Tier: Nuclear Operative +- Name: JT Billings + Tier: Revolutionary +- Name: JustanAnus + Tier: Nuclear Operative +- Name: Kai + Tier: Nuclear Operative +- Name: Kaitlynn Brennan + Tier: Syndicate Agent +- Name: kannthus + Tier: Syndicate Agent +- Name: Karma Hunter + Tier: Revolutionary +- Name: Kashieru + Tier: Revolutionary +- Name: KateSlime206 + Tier: Nuclear Operative +- Name: Kayla Solace + Tier: Revolutionary +- Name: kenneth heller + Tier: Syndicate Agent +- Name: Kerb + Tier: Revolutionary +- Name: Kerensky + Tier: Revolutionary +- Name: Kesiath + Tier: Nuclear Operative +- Name: Kevin + Tier: Nuclear Operative +- Name: Kevin + Tier: Nuclear Operative +- Name: Kieue Caprie + Tier: Revolutionary +- Name: kik + Tier: Revolutionary +- Name: Kim + Tier: Revolutionary +- Name: kithri + Tier: Nuclear Operative +- Name: Koyki + Tier: Revolutionary +- Name: krberryy + Tier: Revolutionary +- Name: kristopher arnott + Tier: Syndicate Agent +- Name: KrystalDisc + Tier: Revolutionary +- Name: Krystian Janecki + Tier: Revolutionary +- Name: Kubakura + Tier: Revolutionary +- Name: Kyle Hipke + Tier: Nuclear Operative +- Name: Kyle Tyo + Tier: Syndicate Agent +- Name: lapatison + Tier: Revolutionary +- Name: LeoZ + Tier: Revolutionary +- Name: LeTobbs + Tier: Revolutionary +- Name: Lieutenant Colonel Orangejuice + Tier: Syndicate Agent +- Name: Lilith + Tier: Nuclear Operative +- Name: liltenhead + Tier: Revolutionary +- Name: Luaan + Tier: Syndicate Agent +- Name: Lucas Welsh + Tier: Revolutionary +- Name: lukiw + Tier: Revolutionary +- Name: Luzurper + Tier: Revolutionary +- Name: Lyndomen + Tier: Revolutionary +- Name: Madeleine LeFleur + Tier: Syndicate Agent +- Name: mage_period + Tier: Syndicate Agent +- Name: Magelfik + Tier: Revolutionary +- Name: Malachi Housewright + Tier: Revolutionary +- Name: March + Tier: Syndicate Agent +- Name: Marios Sardis + Tier: Revolutionary +- Name: Mason Fawcett + Tier: Revolutionary +- Name: MasterFurret + Tier: Revolutionary +- Name: Mathew McGuire + Tier: Revolutionary +- Name: Matthew C Miklaucic + Tier: Revolutionary +- Name: Matthias Bechtold + Tier: Revolutionary +- Name: Mci + Tier: Revolutionary +- Name: MechaKitty + Tier: Revolutionary +- Name: Mega Awesome Man + Tier: Syndicate Agent +- Name: merklaw + Tier: Revolutionary +- Name: Michael Van Gaasbeck + Tier: Revolutionary +- Name: Mihailo Trickovic + Tier: Syndicate Agent +- Name: Mikhail + Tier: Revolutionary +- Name: mikiju + Tier: Syndicate Agent +- Name: Minemoder + Tier: Syndicate Agent +- Name: Miniwoffer + Tier: Revolutionary +- Name: Mitchell Marry + Tier: Revolutionary +- Name: mksky + Tier: Revolutionary +- Name: Molly the Bully + Tier: Nuclear Operative +- Name: Molon + Tier: Syndicate Agent +- Name: Mono + Tier: Revolutionary +- Name: Mr_Clank + Tier: Revolutionary +- Name: MrGloopy + Tier: Revolutionary +- Name: Mythtic B + Tier: Revolutionary +- Name: Nagano + Tier: Revolutionary +- Name: Nat + Tier: Revolutionary +- Name: Nathan Zaldivar + Tier: Nuclear Operative +- Name: Nathaniel Joseph Hurd + Tier: Revolutionary +- Name: Nathaniel Taylor + Tier: Revolutionary +- Name: Nemmay + Tier: Revolutionary +- Name: Neo Move + Tier: Syndicate Agent +- Name: NetGlitch + Tier: Nuclear Operative +- Name: Nicholas + Tier: Nuclear Operative +- Name: Nicholas Williamson + Tier: Nuclear Operative +- Name: Nicholi + Tier: Syndicate Agent +- Name: Nictis + Tier: Revolutionary +- Name: Ninja + Tier: Syndicate Agent +- Name: Nojan Niaki + Tier: Revolutionary +- Name: Noodle is me + Tier: Syndicate Agent +- Name: Novaq + Tier: Revolutionary +- Name: Noxy + Tier: Syndicate Agent +- Name: Nudal + Tier: Revolutionary +- Name: Nugmania + Tier: Revolutionary +- Name: Nyxilath + Tier: Nuclear Operative +- Name: orange color + Tier: Revolutionary +- Name: osborn + Tier: Syndicate Agent +- Name: Oscar Tobias Herra Bravo + Tier: Revolutionary +- Name: Oxyclean114 + Tier: Revolutionary +- Name: Pangaron + Tier: Syndicate Agent +- Name: Pasemi + Tier: Revolutionary +- Name: peanut + Tier: Revolutionary +- Name: Penguin Commoner + Tier: Revolutionary +- Name: Phillip Inman + Tier: Revolutionary +- Name: Phycoweirdo + Tier: Nuclear Operative +- Name: Pinet + Tier: Nuclear Operative +- Name: Piotr + Tier: Revolutionary +- Name: pooba + Tier: Revolutionary +- Name: Powder + Tier: Revolutionary +- Name: ppie + Tier: Syndicate Agent +- Name: Prayer + Tier: Nuclear Operative +- Name: Preston Pickering + Tier: Revolutionary +- Name: Prof. Omii + Tier: Nuclear Operative +- Name: ProxyGen + Tier: Revolutionary +- Name: Psy + Tier: Revolutionary +- Name: queednyeb + Tier: Revolutionary +- Name: Quonn + Tier: Syndicate Agent +- Name: Raccoononi + Tier: Revolutionary +- Name: Rafał Kowalewski + Tier: Revolutionary +- Name: Raiden Johnson + Tier: Revolutionary +- Name: Rainy + Tier: Revolutionary +- Name: RamenZorn + Tier: Syndicate Agent +- Name: Ramiro Agis + Tier: Revolutionary +- Name: Random Person + Tier: Syndicate Agent +- Name: Rasmus Cedergren + Tier: Revolutionary +- Name: Raspberry1111 + Tier: Revolutionary +- Name: Rat Fungus + Tier: Nuclear Operative +- Name: Rat Man + Tier: Revolutionary +- Name: RedChair368 + Tier: Revolutionary +- Name: Repo + Tier: Nuclear Operative +- Name: Richard "Rei" Weeks + Tier: Syndicate Agent +- Name: Robert Reed + Tier: Nuclear Operative +- Name: Robin Rottstock + Tier: Revolutionary +- Name: Roman + Tier: Syndicate Agent +- Name: Rome + Tier: Revolutionary +- Name: rosysyn + Tier: Revolutionary +- Name: Rusty Shackleford + Tier: Nuclear Operative +- Name: Ryan Hanson + Tier: Revolutionary +- Name: Ryan Kelly + Tier: Revolutionary +- Name: RyanTuek + Tier: Revolutionary +- Name: S.C. + Tier: Syndicate Agent +- Name: S1rFl0 + Tier: Revolutionary +- Name: Sam Caesar + Tier: Revolutionary +- Name: Samtaro + Tier: Nuclear Operative +- Name: Sandvich enjoyer + Tier: Revolutionary +- Name: Saphire + Tier: Revolutionary +- Name: SarahRaven + Tier: Revolutionary +- Name: Sartec + Tier: Revolutionary +- Name: ScarKy0 + Tier: Revolutionary +- Name: Sean Lilly + Tier: Syndicate Agent +- Name: Seinfeld + Tier: Revolutionary +- Name: Semiotics + Tier: Syndicate Agent +- Name: Serathis + Tier: Revolutionary +- Name: Serianas + Tier: Nuclear Operative +- Name: Seth Morron + Tier: Revolutionary +- Name: showgun117 + Tier: Syndicate Agent +- Name: Simon N Heath + Tier: Revolutionary +- Name: SireHambone + Tier: Nuclear Operative +- Name: sk3iron + Tier: Revolutionary +- Name: Sleeepz + Tier: Syndicate Agent +- Name: SnapKick + Tier: Revolutionary +- Name: Snowlili + Tier: Revolutionary +- Name: Snowni + Tier: Nuclear Operative +- Name: Solid_Syn + Tier: Revolutionary +- Name: Solidus Snake + Tier: Nuclear Operative +- Name: SotetSotetSotetSotetSotet + Tier: Syndicate Agent +- Name: Southbridge + Tier: Nuclear Operative +- Name: Sparlight + Tier: Nuclear Operative +- Name: SpiffyNnemonic + Tier: Revolutionary +- Name: spookerton + Tier: Syndicate Agent +- Name: Sporkyz + Tier: Revolutionary +- Name: SpydAxe + Tier: Revolutionary +- Name: StaceyBalcom + Tier: Revolutionary +- Name: Star Lord + Tier: Syndicate Agent +- Name: starch + Tier: Syndicate Agent +- Name: StaticeStorm + Tier: Syndicate Agent +- Name: Statix AraAra + Tier: Revolutionary +- Name: Stedar + Tier: Syndicate Agent +- Name: stikfigz + Tier: Revolutionary +- Name: Sufary + Tier: Nuclear Operative +- Name: Superglue + Tier: Syndicate Agent +- Name: Sven Tammerijn + Tier: Revolutionary +- Name: Swindel_ + Tier: Syndicate Agent +- Name: Swix Swix + Tier: Revolutionary +- Name: T.P_Gaming + Tier: Revolutionary +- Name: Tabatha Mendonski + Tier: Revolutionary +- Name: Taber + Tier: Revolutionary +- Name: TacoCub + Tier: Revolutionary +- Name: Tairenar + Tier: Nuclear Operative +- Name: Talbot + Tier: Revolutionary +- Name: Tamora Droppa + Tier: Revolutionary +- Name: taydeo + Tier: Nuclear Operative +- Name: Taylor + Tier: Revolutionary +- Name: Tee The Kobold + Tier: Revolutionary +- Name: The Best Sean + Tier: Syndicate Agent +- Name: the good king wompicus + Tier: Syndicate Agent +- Name: The Hateful Flesh + Tier: Revolutionary +- Name: The Pain + Tier: Syndicate Agent +- Name: Thebluegameingdoggo + Tier: Revolutionary +- Name: TheGoldElite + Tier: Revolutionary +- Name: TheGungeonologist + Tier: Revolutionary +- Name: Third + Tier: Revolutionary +- Name: Thomas Pollard + Tier: Nuclear Operative +- Name: Tia + Tier: Revolutionary +- Name: tokie + Tier: Nuclear Operative +- Name: Tom Cruize + Tier: Syndicate Agent +- Name: Tom Goodman (TauOmicronMu#2500) + Tier: Revolutionary - Name: Tomeno Tier: Revolutionary +- Name: ToonaLemons + Tier: Revolutionary +- Name: tremors08 + Tier: Syndicate Agent +- Name: Trent Warfel + Tier: Nuclear Operative +- Name: Trevor Johnson + Tier: Revolutionary +- Name: Trevor McConnell + Tier: Nuclear Operative +- Name: TrixxedHeart + Tier: Nuclear Operative +- Name: Troll_King_907 + Tier: Nuclear Operative +- Name: Ty Ashley + Tier: Revolutionary +- Name: tyler adams + Tier: Revolutionary +- Name: Tyler Young + Tier: Nuclear Operative +- Name: tynobeard 123 + Tier: Revolutionary +- Name: Uinseann + Tier: Revolutionary +- Name: Unknown Kiwi + Tier: Revolutionary +- Name: Valinov + Tier: Nuclear Operative +- Name: Vexxtraordinary + Tier: Revolutionary +- Name: Vice Emargo + Tier: Syndicate Agent +- Name: vifs_vestige + Tier: Syndicate Agent +- Name: Violette + Tier: Revolutionary +- Name: VividWisp + Tier: Syndicate Agent +- Name: VmasterVX + Tier: Revolutionary +- Name: Voidliing + Tier: Revolutionary +- Name: Voltinho + Tier: Revolutionary +- Name: Watson Whittington + Tier: Syndicate Agent +- Name: Whistling Jake + Tier: Revolutionary +- Name: Wiliam + Tier: Nuclear Operative +- Name: Will M. + Tier: Revolutionary +- Name: William Grondin + Tier: Revolutionary +- Name: Wolfie + Tier: Revolutionary +- Name: Wrexbe + Tier: Revolutionary +- Name: wtcwr68 + Tier: Nuclear Operative +- Name: WWII Kitsune + Tier: Nuclear Operative +- Name: Xenon Dragon + Tier: Syndicate Agent +- Name: yeoshua + Tier: Syndicate Agent +- Name: YuNii + Tier: Nuclear Operative +- Name: Z4NEER + Tier: Nuclear Operative +- Name: Zadenae + Tier: Nuclear Operative +- Name: Zak The Dragon + Tier: Revolutionary +- Name: Zakanater 19 + Tier: Revolutionary +- Name: Zakory L Holbrook + Tier: Revolutionary +- Name: Zandario + Tier: Revolutionary +- Name: zedd + Tier: Nuclear Operative +- Name: Zella Zane + Tier: Revolutionary +- Name: Zenari Ari + Tier: Nuclear Operative +- Name: Zero + Tier: Revolutionary +- Name: Zoe Rose + Tier: Syndicate Agent +- Name: Александр Белошапка + Tier: Revolutionary diff --git a/Tools/dump_patrons.ps1 b/Tools/dump_patrons.ps1 index d08e095421..21b8b7b1cb 100755 --- a/Tools/dump_patrons.ps1 +++ b/Tools/dump_patrons.ps1 @@ -5,4 +5,4 @@ param([string]$csvPath) # Dumps Patreon's CSV download into a YAML file the game reads. # Have to trim patron names because apparently Patreon doesn't which is quite ridiculous. -Get-content $csvPath | ConvertFrom-Csv -Delimiter "," | select @{l="Name";e={$_.Name.Trim()}},Tier | where-object Tier -ne "" | ConvertTo-Yaml +Get-content $csvPath | ConvertFrom-Csv -Delimiter "," | select @{l="Name";e={$_.Name.Trim()}},Tier | where-object Tier -ne "" | where-object Tier -ne "Free" | ConvertTo-Yaml From 02a7f5721dc156fe130b0373d9908f393a73cfce Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 12 Oct 2025 11:03:41 +0000 Subject: [PATCH 194/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 945768a43c..86e28267e8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Moomoobeef - changes: - - message: Made high-viz vest less visible. - type: Tweak - id: 8580 - time: '2025-05-28T09:39:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37869 - author: deltanedas changes: - message: Diona "Gib yourself!" action now has a suicide warning like microbombs. @@ -3944,3 +3937,10 @@ id: 9082 time: '2025-10-12T10:47:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39304 +- author: PJB3005 + changes: + - message: The patrons list in the in-game credits works again. + type: Fix + id: 9083 + time: '2025-10-12T11:02:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40840 From 982624f0dd94472f987dc56cbbb6422e6c277f38 Mon Sep 17 00:00:00 2001 From: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> Date: Sun, 12 Oct 2025 03:54:37 -0700 Subject: [PATCH 195/216] Fix species not being ordered alphabetically in the character customization UI (#39359) * Fix species not being ordered alphabetically in the character customization UI * Update Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index 821722ec35..b568491b67 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -607,6 +607,7 @@ namespace Content.Client.Lobby.UI _species.Clear(); _species.AddRange(_prototypeManager.EnumeratePrototypes().Where(o => o.RoundStart)); + _species.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.CurrentCultureIgnoreCase)); var speciesIds = _species.Select(o => o.ID).ToList(); for (var i = 0; i < _species.Count; i++) From e92597a4d9f755c87c8e7402c3a72ab90cf8657f Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 12 Oct 2025 11:15:53 +0000 Subject: [PATCH 196/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 86e28267e8..062e35f91f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: deltanedas - changes: - - message: Diona "Gib yourself!" action now has a suicide warning like microbombs. - type: Tweak - id: 8581 - time: '2025-05-28T19:52:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27422 - author: sowelipililimute changes: - message: Plants can process nutrition again @@ -3944,3 +3937,11 @@ id: 9083 time: '2025-10-12T11:02:33.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40840 +- author: DrSmugleaf + changes: + - message: Fixed species not being ordered alphabetically in the character customization + UI. + type: Fix + id: 9084 + time: '2025-10-12T11:14:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39359 From 294cae8de157cebb6dfc65acf7e1d5f3a326c21f Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 15:27:32 +0200 Subject: [PATCH 197/216] Super Synth Removal from rng It was decided during the maintainer meeting to remove these. --- .../Entities/Markers/Spawners/Random/instruments.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml index 93e7e58e88..6131844472 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/instruments.yml @@ -119,10 +119,6 @@ weight: 0.1 children: - id: DawInstrumentMachineCircuitboard - - !type:GroupSelector - weight: 0.05 - children: - - id: SuperSynthesizerInstrument - type: entityTable id: SalvageInstrumentTable @@ -140,8 +136,6 @@ tableId: WoodwindInstrumentTable - !type:NestedSelector tableId: SpecialInstrumentTable - - id: SuperSynthesizerInstrument - weight: 0.3 - type: entity id: RandomInstruments From 90b438635d8f9ba2abdb2c78bedeaf4236db5057 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 15:29:01 +0200 Subject: [PATCH 198/216] Revert "Readds Tasers to Security (#39087)" This reverts commit 398c8df343e2b41ebdf03fe6d3714a1e894434c0. This will be pushed into vulture testing for another release cycle due to potencial influence with newmed, we dont have a better way of doing something like this sooo i will just unrevert the revert Taser changelog removal --- Content.Server/Stunnable/Systems/StunOnCollideSystem.cs | 1 - Resources/Changelog/Changelog.yml | 8 -------- Resources/Prototypes/Catalog/Fills/Lockers/heads.yml | 1 - Resources/Prototypes/Catalog/Fills/Lockers/security.yml | 3 --- .../Objects/Weapons/Guns/Battery/battery_guns.yml | 1 - .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 4 +--- 6 files changed, 1 insertion(+), 17 deletions(-) diff --git a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs index 09e42966c7..c1757b1c2d 100644 --- a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs +++ b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs @@ -27,7 +27,6 @@ internal sealed class StunOnCollideSystem : EntitySystem if (ent.Comp.Refresh) { _stunSystem.TryUpdateStunDuration(target, ent.Comp.StunAmount); - _movementMod.TryUpdateMovementSpeedModDuration( target, MovementModStatusSystem.TaserSlowdown, diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index de112f2b02..e5de0b2e3d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3561,14 +3561,6 @@ id: 9012 time: '2025-09-27T20:51:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40572 -- author: keronshb - changes: - - message: 'EXPERIMENTAL: Tasers, a short-ranged gun capable of causing targets - to become prone, are now added into Warden, HoS, and Security locker fills.' - type: Add - id: 9013 - time: '2025-09-27T21:21:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/39087 - author: SurrealShibe changes: - message: Vulpkanin now audibly gasp. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 2b4c5c9b36..2db34c0459 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -324,7 +324,6 @@ - id: RubberStampHos - id: BoxHoSCircuitboards - id: WeaponDisabler - - id: WeaponTaser - id: WantedListCartridge - id: DrinkHosFlask diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 48bed23bc9..1111058871 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -28,7 +28,6 @@ children: - id: FlashlightSeclite - id: WeaponDisabler - - id: WeaponTaser - id: ClothingBeltSecurityFilled - id: Flash - id: ClothingEyesGlassesSecurity @@ -73,7 +72,6 @@ - id: FlashlightSeclite prob: 0.8 - id: WeaponDisabler - - id: WeaponTaser - id: ClothingUniformJumpsuitSecGrey prob: 0.3 - id: ClothingHeadHelmetBasic @@ -107,7 +105,6 @@ table: !type:AllSelector children: - id: ClothingEyesGlassesSecurity - - id: WeaponTaser - id: WeaponDisabler - id: TrackingImplanter amount: 2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 2f2ebfa5fd..bd532ce709 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -611,7 +611,6 @@ slots: - Belt - type: Gun - fireRate: 0.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser.ogg - type: ProjectileBatteryAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index bc9f40f85a..74f546c61d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -227,8 +227,7 @@ lifetime: 0.170 # Very short range - type: StunOnCollide stunAmount: 0 - knockdownAmount: 2.5 # Enough to subdue and follow up with a stun baton - drop: false #Ranged KD and item drop are too strong in one package + knockdownAmount: 2.5 # Enough to subdue and follow up with a stun batong slowdownAmount: 2.5 walkSpeedModifier: 0.5 sprintSpeedModifier: 0.5 @@ -256,7 +255,6 @@ lifetime: 1.0 # Not so short range - type: StunOnCollide stunAmount: 5 - drop: true # this is the evil taser knockdownAmount: 10 slowdownAmount: 10 walkSpeedModifier: 0.5 From f3ade672602f2815b6485151253f848e4696001d Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 15:46:15 +0200 Subject: [PATCH 199/216] Add missing changelog --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e5de0b2e3d..deabf58db0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,4 +1,15 @@ Entries: +- author: CoconutThunder + changes: + - message: Fixed lubed items being thrown when looking at the pickup verb. + type: Fix + - message: Fixed multihanded items showing a popup when looking at the pickup verb. + type: Fix + - message: Fixed a bug with lubed handcuffs. + type: Fix + id: 8561 + time: '2025-05-25T05:10:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38705 - author: CoconutThunder changes: - message: The Chief Medical Officer should now appear with the correct precedence From 7837a5cc72fabcfc8255d614b3ac781bfd7fa1ca Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 16:07:56 +0200 Subject: [PATCH 200/216] Mark supersynth as admin --- .../Entities/Objects/Fun/Instruments/instrument_keyed.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml index 46af54f86f..cda539e4fb 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instrument_keyed.yml @@ -26,6 +26,7 @@ - type: entity parent: BaseKeyedInstrument id: SuperSynthesizerInstrument + suffix: Admin name: super synthesizer description: Blasting the ghetto with Touhou MIDIs since 2020. components: @@ -41,7 +42,7 @@ - type: entity parent: SuperSynthesizerInstrument id: SuperSynthesizerNoLimitInstrument - suffix: NoLimits + suffix: NoLimits Admin components: - type: Instrument respectMidiLimits: false From a803bcca467ae47e5349e1c2ef9521a1e97004f2 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Mon, 13 Oct 2025 06:38:41 +1300 Subject: [PATCH 201/216] Explicitly attribute each state in organs.rsi, exchange CEV-Eris stomach sprite with /tg/station 13 (#39753) attribute each state, replace cev-eris stomach sprite with tg --- .../Mobs/Species/Human/organs.rsi/meta.json | 2 +- .../Mobs/Species/Human/organs.rsi/stomach.png | Bin 191 -> 384 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json index a9112535f8..ddc468082b 100644 --- a/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af, inhands by mubururu_ (github)", + "copyright": "brain, ears, eyeball-l, eyeball-r, heart-on, heart-off, kidney-l, kidney-r, liver, lung-l, lung-r, stomach, tongue, taken from /tg/station 13 at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 | appendix, appendix-inflamed, muscle, nerve, vessel taken from CEV-Eris at https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af | inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach.png index ebf1d5f5141efea3d613ee4a659f6e4f6c6b9dd7..ca3c4a5510b899b957b58ad6621d6831f74613a2 100644 GIT binary patch delta 369 zcmV-%0gnE^0e}OL7=H)`0001UdV2H#0004VQb$4nuFf3k0003xNkl1u3cSCe?chC?Pe!|&=i4`^{T;x9h6DvbqjDNtz!O4U$Ij}%Z^hQcp3Pv17JoLw?F|&c?iz?fjSl>8 zHBY&jGqIo7KyNm80J&(L0|>z7Rm(hgy$5(@AMaXoP0z)~Bl6Olg8>a)Hs>G*$QO~Tpw9Y9&e zk|4ie28U-i(tw<3PZ!4!jfrQ^T@-9k;9JA%Q`4E<*wHoqEywOtA|!`@E|K ze;S;cpncHHA>>`*gv*kk#mT?Z}iB5uV}IK3g>8dXvYL b|Ib-}v~q6D-%xoSXb*#@tDnm{r-UW|B6UT; From 11525673ba352cdbe0edbafd06c3749d39151ed8 Mon Sep 17 00:00:00 2001 From: Fildrance Date: Sun, 12 Oct 2025 20:54:08 +0300 Subject: [PATCH 202/216] Use PredictedQueueDel in SharedDestructibleSystem.DestroyEntity (#40856) feat: predict queuedel in SharedDestructibleSystem.DestroyEntity Co-authored-by: pa.pecherskij --- .../Destructible/SharedDestructibleSystem.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Content.Shared/Destructible/SharedDestructibleSystem.cs b/Content.Shared/Destructible/SharedDestructibleSystem.cs index 572ed9d560..f37561e0d8 100644 --- a/Content.Shared/Destructible/SharedDestructibleSystem.cs +++ b/Content.Shared/Destructible/SharedDestructibleSystem.cs @@ -1,9 +1,9 @@ -namespace Content.Shared.Destructible; +namespace Content.Shared.Destructible; public abstract class SharedDestructibleSystem : EntitySystem { /// - /// Force entity to be destroyed and deleted. + /// Force entity to be destroyed and deleted. /// public bool DestroyEntity(EntityUid owner) { @@ -15,12 +15,12 @@ public abstract class SharedDestructibleSystem : EntitySystem var eventArgs = new DestructionEventArgs(); RaiseLocalEvent(owner, eventArgs); - QueueDel(owner); + PredictedQueueDel(owner); return true; } /// - /// Force entity to break. + /// Force entity to break. /// public void BreakEntity(EntityUid owner) { @@ -30,7 +30,7 @@ public abstract class SharedDestructibleSystem : EntitySystem } /// -/// Raised before an entity is about to be destroyed and deleted +/// Raised before an entity is about to be destroyed and deleted /// public sealed class DestructionAttemptEvent : CancellableEntityEventArgs { @@ -38,7 +38,7 @@ public sealed class DestructionAttemptEvent : CancellableEntityEventArgs } /// -/// Raised when entity is destroyed and about to be deleted. +/// Raised when entity is destroyed and about to be deleted. /// public sealed class DestructionEventArgs : EntityEventArgs { @@ -46,7 +46,7 @@ public sealed class DestructionEventArgs : EntityEventArgs } /// -/// Raised when entity was heavy damage and about to break. +/// Raised when entity was heavy damage and about to break. /// public sealed class BreakageEventArgs : EntityEventArgs { From 2696fd7cd50cb1ed097875c4edff00a8f2f61f48 Mon Sep 17 00:00:00 2001 From: Callmore <22885888+Callmore@users.noreply.github.com> Date: Sun, 12 Oct 2025 19:34:20 +0100 Subject: [PATCH 203/216] Automatically add trash tag to spent bullet casings (#40829) * Automatically add trash tag to spent bullet casings * Resolving comments * 2 * Update Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Weapons/Ranged/Components/AmmoComponent.cs | 6 ++++++ .../Weapons/Ranged/Systems/SharedGunSystem.cs | 10 ++++++++++ .../Weapons/Guns/Ammunition/Cartridges/pistol.yml | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs b/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs index 0ba8a5faee..0fedf95146 100644 --- a/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs @@ -34,6 +34,12 @@ public sealed partial class CartridgeAmmoComponent : AmmoComponent [DataField, AutoNetworkedField] public bool Spent; + /// + /// Is this cartridge automatically marked as trash once spent? + /// + [DataField, AutoNetworkedField] + public bool MarkSpentAsTrash = true; + /// /// Caseless ammunition. /// diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index e3fbec0d5d..952b53acf2 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -65,6 +65,8 @@ public abstract partial class SharedGunSystem : EntitySystem [Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; + private static readonly ProtoId TrashTag = "Trash"; + private const float InteractNextFire = 0.3f; private const double SafetyNextFire = 0.5; private const float EjectOffset = 0.4f; @@ -452,6 +454,14 @@ public abstract partial class SharedGunSystem : EntitySystem cartridge.Spent = spent; Appearance.SetData(uid, AmmoVisuals.Spent, spent); + + if (!cartridge.MarkSpentAsTrash) + return; + + if (spent) + TagSystem.AddTag(uid, TrashTag); + else + TagSystem.RemoveTag(uid, TrashTag); } /// diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml index ba2b856778..3862918e38 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml @@ -89,3 +89,7 @@ - type: CartridgeAmmo proto: BulletPistol spent: true + - type: Tag + tags: + - CartridgePistol + - Trash # surely theres a way to automatically add this... From e3318ad17ab025e672fab3f0322a743c8f83bfbc Mon Sep 17 00:00:00 2001 From: Coco Date: Sun, 12 Oct 2025 14:35:13 -0400 Subject: [PATCH 204/216] Plasma: reduced highly illegal syndicate shark attack rate (#40855) reduced highly illegal syndicate shark attack rate to 2 (per #39250, #39874) --- Resources/Maps/plasma.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Maps/plasma.yml b/Resources/Maps/plasma.yml index 71dba17d74..d8873dee61 100644 --- a/Resources/Maps/plasma.yml +++ b/Resources/Maps/plasma.yml @@ -131573,7 +131573,7 @@ entities: pos: -14.584713,16.470493 parent: 2 - type: MeleeWeapon - attackRate: 10 + attackRate: 2 autoAttack: True - type: Item size: Huge From 43a0553e3013b58fa9c11189ef35d4d9de480bea Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 12 Oct 2025 18:47:04 +0000 Subject: [PATCH 205/216] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- Resources/Changelog/Maps.yml | 7 +++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 062e35f91f..044f5f052d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: sowelipililimute - changes: - - message: Plants can process nutrition again - type: Fix - - message: Plants can process robust harvest again - type: Fix - id: 8582 - time: '2025-05-28T22:51:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37912 - author: mhamster changes: - message: Chameleon clothes are now affected by any kind of EMP explosion, which @@ -3945,3 +3936,10 @@ id: 9084 time: '2025-10-12T11:14:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39359 +- author: Callmore + changes: + - message: Bullet casings can now be picked up again. + type: Fix + id: 9085 + time: '2025-10-12T18:45:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40829 diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 0c8783e4a5..d7a91135e1 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -778,4 +778,11 @@ id: 94 time: '2025-10-10T20:33:03.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40821 +- author: CoconutThunder + changes: + - message: Reduced frequency of syndicate shark attacks + type: Tweak + id: 95 + time: '2025-10-12T18:45:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40855 Order: 1 From 02b623b16ef2525aa29937aa61309ea339bdecaf Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:09:08 +0200 Subject: [PATCH 206/216] Revert "Add slowdown to nocturine, buff duration and minor delay reduction (#40797)" This reverts commit 33c0c46b5da5a462d05e267a887b8254e95096ce. --- Resources/Prototypes/Reagents/narcotics.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index 92236d746c..a1b1033a4b 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -289,19 +289,16 @@ meltingPoint: 128.0 metabolisms: Narcotic: - effects: # It would be nice to have speech slurred or mumbly, but accents are a bit iffy atm. Same for distortion effects. - - !type:MovespeedModifier - walkSpeedModifier: 0.65 - sprintSpeedModifier: 0.65 + effects: - !type:ModifyStatusEffect conditions: - !type:ReagentThreshold reagent: Nocturine min: 8 effectProto: StatusEffectForcedSleeping - time: 6 - delay: 5 - type: Update + time: 3 + delay: 6 + type: Add - type: reagent id: MuteToxin From 2a261d3bc0f542156f2517453c68199673f9ae19 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:33:18 +0200 Subject: [PATCH 207/216] Reapply "Readds Tasers to Security (#39087)" This reverts commit 90b438635d8f9ba2abdb2c78bedeaf4236db5057. --- Content.Server/Stunnable/Systems/StunOnCollideSystem.cs | 1 + Resources/Changelog/Changelog.yml | 8 ++++++++ Resources/Prototypes/Catalog/Fills/Lockers/heads.yml | 1 + Resources/Prototypes/Catalog/Fills/Lockers/security.yml | 3 +++ .../Objects/Weapons/Guns/Battery/battery_guns.yml | 1 + .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 4 +++- 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs index c1757b1c2d..09e42966c7 100644 --- a/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs +++ b/Content.Server/Stunnable/Systems/StunOnCollideSystem.cs @@ -27,6 +27,7 @@ internal sealed class StunOnCollideSystem : EntitySystem if (ent.Comp.Refresh) { _stunSystem.TryUpdateStunDuration(target, ent.Comp.StunAmount); + _movementMod.TryUpdateMovementSpeedModDuration( target, MovementModStatusSystem.TaserSlowdown, diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index deabf58db0..b60c29e299 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3572,6 +3572,14 @@ id: 9012 time: '2025-09-27T20:51:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40572 +- author: keronshb + changes: + - message: 'EXPERIMENTAL: Tasers, a short-ranged gun capable of causing targets + to become prone, are now added into Warden, HoS, and Security locker fills.' + type: Add + id: 9013 + time: '2025-09-27T21:21:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39087 - author: SurrealShibe changes: - message: Vulpkanin now audibly gasp. diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 2db34c0459..2b4c5c9b36 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -324,6 +324,7 @@ - id: RubberStampHos - id: BoxHoSCircuitboards - id: WeaponDisabler + - id: WeaponTaser - id: WantedListCartridge - id: DrinkHosFlask diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 1111058871..48bed23bc9 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -28,6 +28,7 @@ children: - id: FlashlightSeclite - id: WeaponDisabler + - id: WeaponTaser - id: ClothingBeltSecurityFilled - id: Flash - id: ClothingEyesGlassesSecurity @@ -72,6 +73,7 @@ - id: FlashlightSeclite prob: 0.8 - id: WeaponDisabler + - id: WeaponTaser - id: ClothingUniformJumpsuitSecGrey prob: 0.3 - id: ClothingHeadHelmetBasic @@ -105,6 +107,7 @@ table: !type:AllSelector children: - id: ClothingEyesGlassesSecurity + - id: WeaponTaser - id: WeaponDisabler - id: TrackingImplanter amount: 2 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index bd532ce709..2f2ebfa5fd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -611,6 +611,7 @@ slots: - Belt - type: Gun + fireRate: 0.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser.ogg - type: ProjectileBatteryAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 74f546c61d..bc9f40f85a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -227,7 +227,8 @@ lifetime: 0.170 # Very short range - type: StunOnCollide stunAmount: 0 - knockdownAmount: 2.5 # Enough to subdue and follow up with a stun batong + knockdownAmount: 2.5 # Enough to subdue and follow up with a stun baton + drop: false #Ranged KD and item drop are too strong in one package slowdownAmount: 2.5 walkSpeedModifier: 0.5 sprintSpeedModifier: 0.5 @@ -255,6 +256,7 @@ lifetime: 1.0 # Not so short range - type: StunOnCollide stunAmount: 5 + drop: true # this is the evil taser knockdownAmount: 10 slowdownAmount: 10 walkSpeedModifier: 0.5 From 8de64ca2bb6f25939d7ebfe7af0d16c78d18774e Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:33:22 +0200 Subject: [PATCH 208/216] Reapply "Add slowdown to nocturine, buff duration and minor delay reduction (#40797)" This reverts commit 02b623b16ef2525aa29937aa61309ea339bdecaf. --- Resources/Prototypes/Reagents/narcotics.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index a1b1033a4b..92236d746c 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -289,16 +289,19 @@ meltingPoint: 128.0 metabolisms: Narcotic: - effects: + effects: # It would be nice to have speech slurred or mumbly, but accents are a bit iffy atm. Same for distortion effects. + - !type:MovespeedModifier + walkSpeedModifier: 0.65 + sprintSpeedModifier: 0.65 - !type:ModifyStatusEffect conditions: - !type:ReagentThreshold reagent: Nocturine min: 8 effectProto: StatusEffectForcedSleeping - time: 3 - delay: 6 - type: Add + time: 6 + delay: 5 + type: Update - type: reagent id: MuteToxin From 632243ad0138feba7f66b5e3858556ddd6bd458e Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:41:27 +0200 Subject: [PATCH 209/216] Now the changelog is fine --- Resources/Changelog/Changelog.yml | 175 ------------------------------ 1 file changed, 175 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d4e49c44b1..6b64a31d64 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,179 +1,4 @@ Entries: -- author: CoconutThunder - changes: - - message: The Chief Medical Officer should now appear with the correct precedence - in the crew manifest. - type: Fix - id: 8560 - time: '2025-05-24T05:10:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37774 -- author: TiniestShark - changes: - - message: Added inhand sprites for the bartender utensils and mugs. - type: Add - id: 8561 - time: '2025-05-24T17:32:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37771 -- author: K-Dynamic - changes: - - message: Shutters and blast doors now appear welded when welded. - type: Fix - id: 8562 - time: '2025-05-25T15:57:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37807 -- author: Stop-Signs - changes: - - message: Meals now better reflect the amount of ingredients put into them. - type: Tweak - id: 8563 - time: '2025-05-25T18:02:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34138 -- author: brainfood1183 - changes: - - message: Kangaroos can now be equipped with northstars and knuckle dusters. - type: Tweak - id: 8564 - time: '2025-05-25T18:03:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37789 -- author: Moomoobeef - changes: - - message: Added new variants to dirty tiles. - type: Tweak - id: 8565 - time: '2025-05-25T18:11:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37800 -- author: AsnDen - changes: - - message: Tile-aligned bar sign version was added. - type: Add - - message: Bar signs now have proper collision. - type: Fix - id: 8566 - time: '2025-05-25T18:36:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37756 -- author: Fildrance - changes: - - message: Spray nozzle now can consume liquids from puddles and put it right into - backpacked tank. - type: Add - id: 8567 - time: '2025-05-26T03:36:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30600 -- author: Southbridge - changes: - - message: On Amber, gave security its missing beacon and barriers. - type: Fix - id: 8568 - time: '2025-05-26T07:29:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37700 -- author: jessicamaybe - changes: - - message: NPC Gorillas can now pry open doors and vault/smash tables! - type: Tweak - id: 8569 - time: '2025-05-26T10:49:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37822 -- author: ArtisticRoomba - changes: - - message: The TEG's efficiency in extracting power from gasses has been tweaked - to promote dual-loop designs that recycle the waste heat of gasses, and punish - "meta" single loop designs. - type: Tweak - id: 8570 - time: '2025-05-26T11:53:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37728 -- author: ArtisticRoomba - changes: - - message: The TEG now outputs smoother power when pressure across the circulators - flutter. (This was causing epilepsy in extreme circumstances). - type: Fix - id: 8571 - time: '2025-05-26T12:07:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37658 -- author: chromiumboy - changes: - - message: Sentry turret control panels can now be found adjacent to rooms containing - sentry turrets. Authorized personnel can use these panels to remotely monitor - and alter the settings of any linked sentry turrets. - type: Add - id: 8572 - time: '2025-05-26T13:00:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35235 -- author: metalgearsloth - changes: - - message: You no longer face items for a single frame when clicking while moving. - type: Tweak - id: 8573 - time: '2025-05-27T11:34:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37874 -- author: Simyon - changes: - - message: Capacitors and Matter bins have been combined into the Manipulator. - type: Remove - id: 8574 - time: '2025-05-27T11:47:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37725 -- author: PicklOH - changes: - - message: Gas Pipes are now named as such in the construction menu. - type: Tweak - id: 8575 - time: '2025-05-27T16:26:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37881 -- author: ProfRenderer - changes: - - message: Cluwne ID cards now have a job icon. - type: Tweak - id: 8576 - time: '2025-05-27T16:39:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37834 -- author: Moomoobeef - changes: - - message: Bookshelves now contain a more reasonable amount of books. - type: Tweak - id: 8577 - time: '2025-05-27T21:21:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37866 -- author: SlamBamActionman - changes: - - message: Seismic Charges now trigger the timer when sent a signal, instead of - detonating instantly. - type: Tweak - - message: Signal Triggers for modular grenades now detonate after a 3 second delay. - type: Tweak - id: 8578 - time: '2025-05-28T07:31:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34465 -- author: Minemoder5000 - changes: - - message: Grape juice cups now contain grape juice. - type: Fix - id: 8579 - time: '2025-05-28T09:32:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37895 -- author: Moomoobeef - changes: - - message: Made high-viz vest less visible. - type: Tweak - id: 8580 - time: '2025-05-28T09:39:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37869 -- author: deltanedas - changes: - - message: Diona "Gib yourself!" action now has a suicide warning like microbombs. - type: Tweak - id: 8581 - time: '2025-05-28T19:52:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27422 -- author: sowelipililimute - changes: - - message: Plants can process nutrition again - type: Fix - - message: Plants can process robust harvest again - type: Fix - id: 8582 - time: '2025-05-28T22:51:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37912 - author: mhamster changes: - message: Chameleon clothes are now affected by any kind of EMP explosion, which From 9877b77ffff017a3d2a4858ea9ea8bd73ea669ce Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:45:17 +0200 Subject: [PATCH 210/216] Remove nocture changelog from stable --- Resources/Changelog/Changelog.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index deabf58db0..917d2c1f78 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3930,14 +3930,6 @@ id: 9059 time: '2025-10-08T23:45:56.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40786 -- author: SlamBamActionman - changes: - - message: Nocturine now slows the target down, with a longer duration and shorter - delay before activating. - type: Tweak - id: 9060 - time: '2025-10-09T13:32:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/40797 - author: Princess-Cheeseballs changes: - message: Dying while asleep shouldn't permanently blind you anymore. From 36b59bddc4108a00978aa7cd719330a8ddf59493 Mon Sep 17 00:00:00 2001 From: Vasilis The Pikachu Date: Sun, 12 Oct 2025 21:46:54 +0200 Subject: [PATCH 211/216] Add experimental to noc changelog --- Resources/Changelog/Changelog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6b64a31d64..903930e634 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -3754,7 +3754,7 @@ url: https://github.com/space-wizards/space-station-14/pull/40786 - author: SlamBamActionman changes: - - message: Nocturine now slows the target down, with a longer duration and shorter + - message: EXPERIMENTAL Nocturine now slows the target down, with a longer duration and shorter delay before activating. type: Tweak id: 9060 From dd278ab81551095c2a07aec9e298c897e98dd724 Mon Sep 17 00:00:00 2001 From: Ps3Moira <113228053+ps3moira@users.noreply.github.com> Date: Sun, 12 Oct 2025 12:49:11 -0700 Subject: [PATCH 212/216] Resprite Maint Hatch + New Syndicate Hatch (#38076) * Resprite + New Syndicate Hatch * Add trailing line * Update airlocks.yml * Update base_structureairlocks.yml * Remove Wall IconSmooth for material doors and shutters * revert iconsmoothing removing lol * Update shutters.yml * Update shutters.yml * Revert Regular Hatch --- .../Structures/Doors/Airlocks/access.yml | 13 +- .../Structures/Doors/Airlocks/airlocks.yml | 9 + .../Standard/hatch.rsi/bolted_unlit.png | Bin 324 -> 105 bytes .../Standard/hatch.rsi/closed_unlit.png | Bin 339 -> 106 bytes .../Airlocks/Standard/hatch.rsi/closing.png | Bin 2938 -> 2575 bytes .../Standard/hatch.rsi/closing_unlit.png | Bin 1163 -> 193 bytes .../Standard/hatch.rsi/deny_unlit.png | Bin 925 -> 250 bytes .../Standard/hatch.rsi/emergency_unlit.png | Bin 340 -> 110 bytes .../Airlocks/Standard/hatch.rsi/meta.json | 390 +++++++++--------- .../Airlocks/Standard/hatch.rsi/open.png | Bin 586 -> 313 bytes .../Airlocks/Standard/hatch.rsi/opening.png | Bin 3052 -> 2513 bytes .../Standard/hatch.rsi/opening_unlit.png | Bin 1162 -> 197 bytes .../Standard/hatch_maint.rsi/assembly.png | Bin 752 -> 895 bytes .../Standard/hatch_maint.rsi/bolted_unlit.png | Bin 324 -> 105 bytes .../Standard/hatch_maint.rsi/closed.png | Bin 775 -> 1011 bytes .../Standard/hatch_maint.rsi/closed_unlit.png | Bin 339 -> 106 bytes .../Standard/hatch_maint.rsi/closing.png | Bin 1643 -> 2738 bytes .../hatch_maint.rsi/closing_unlit.png | Bin 1163 -> 193 bytes .../Standard/hatch_maint.rsi/deny_unlit.png | Bin 925 -> 250 bytes .../hatch_maint.rsi/emergency_unlit.png | Bin 340 -> 110 bytes .../Standard/hatch_maint.rsi/meta.json | 390 +++++++++--------- .../Standard/hatch_maint.rsi/open.png | Bin 593 -> 562 bytes .../Standard/hatch_maint.rsi/opening.png | Bin 1639 -> 2686 bytes .../hatch_maint.rsi/opening_unlit.png | Bin 1162 -> 197 bytes .../Standard/hatch_maint.rsi/panel_open.png | Bin 514 -> 184 bytes .../Standard/hatch_syndicate.rsi/assembly.png | Bin 0 -> 871 bytes .../hatch_syndicate.rsi/bolted_unlit.png | Bin 0 -> 105 bytes .../Standard/hatch_syndicate.rsi/closed.png | Bin 0 -> 400 bytes .../hatch_syndicate.rsi/closed_unlit.png | Bin 0 -> 106 bytes .../Standard/hatch_syndicate.rsi/closing.png | Bin 0 -> 2613 bytes .../hatch_syndicate.rsi/closing_unlit.png | Bin 0 -> 193 bytes .../hatch_syndicate.rsi/deny_unlit.png | Bin 0 -> 250 bytes .../hatch_syndicate.rsi/emergency_unlit.png | Bin 0 -> 110 bytes .../Standard/hatch_syndicate.rsi/meta.json | 198 +++++++++ .../Standard/hatch_syndicate.rsi/open.png | Bin 0 -> 528 bytes .../Standard/hatch_syndicate.rsi/opening.png | Bin 0 -> 2547 bytes .../hatch_syndicate.rsi/opening_unlit.png | Bin 0 -> 197 bytes .../hatch_syndicate.rsi/panel_closing.png | Bin 0 -> 451 bytes .../hatch_syndicate.rsi/panel_open.png | Bin 0 -> 184 bytes .../hatch_syndicate.rsi/panel_opening.png | Bin 0 -> 432 bytes .../Standard/hatch_syndicate.rsi/sparks.png | Bin 0 -> 697 bytes .../hatch_syndicate.rsi/sparks_broken.png | Bin 0 -> 315 bytes .../hatch_syndicate.rsi/sparks_damaged.png | Bin 0 -> 184 bytes .../hatch_syndicate.rsi/sparks_open.png | Bin 0 -> 281 bytes .../Standard/hatch_syndicate.rsi/welded.png | Bin 0 -> 341 bytes 45 files changed, 608 insertions(+), 392 deletions(-) create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/assembly.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/bolted_unlit.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closed_unlit.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closing.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closing_unlit.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/deny_unlit.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/emergency_unlit.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/open.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/opening.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/opening_unlit.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_closing.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_open.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_opening.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_broken.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_damaged.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_open.png create mode 100644 Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/welded.png diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml index 879018d038..3da6805db2 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml @@ -1286,10 +1286,19 @@ #Airtight hatch - type: entity - parent: AirlockHatch - id: AirlockHatchSyndicate + parent: AirlockHatchSyndicate + id: AirlockHatchSyndicateLocked suffix: Syndicate, Locked components: - type: ContainerFill containers: board: [ DoorElectronicsSyndicateAgent ] + +- type: entity + parent: AirlockHatchMaintenance + id: AirlockHatchMaintenanceLocked + suffix: Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsMaintenance ] diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml index 76d98f96d2..52747a3f27 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -180,6 +180,15 @@ - type: Paintable group: null +- type: entity + parent: Airlock + id: AirlockHatchSyndicate + name: airtight hatch + suffix: Syndicate + components: + - type: Sprite + sprite: Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi + # Glass - type: entity parent: AirlockGlass diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/bolted_unlit.png index 57f172d54fe8403a0e397a59d128e37d7f10d53a..b65261aea9709cf43c27ba1f88b1d1bfeb85e924 100644 GIT binary patch delta 75 zcmX@YlsQ4gm9aR;-HBn{IhmIX3=GPiE{-7)t#8j7@-i@RFmL#|{S2eovL>qiCvn@!jXaMQ={4B5v@c=$!>0T&^7a-Jh?yV1o uelb}BGXlWMB2oYaPyhu`00mHh)d60fV`$m*fbTc}0000K delta 298 zcmV+_0oDF$(*lq&e*|YiO+f$vv5yPVGd008Jo zL_t(oN9~ib5yCJGMHLo+f|{CXU<6hpBS6U{)YKF(0r)FcaB{Na_+l!(JDrUZ^uMLJ z`CQg#B09NfUEEzfe1NB4LAYm{zS z8cu!rsu{V0LgXrfSf0^35VAxkk~LBzSVCNg*2D;sEz%gbUnr?HHG=BQHV`{KNIi>@ wJ%YK#v+Jf_BrG|RM#;Bf7=~dOhVdtezR$>4DS5Xd!vFvP07*qoM6N<$g6cYfg8%>k diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/closing.png index 3f88010d627ae7ab4d5ed648ec53fe75500d1daa..d4d288e299f25d8251afa00f76a933a43813f283 100644 GIT binary patch delta 2553 zcmV|k;hy0Gc?El!mu*ba_k`=@l3;~$|VH+ZOV&qt{F}8%sEM4}%Y7h3SsV-G@S9Q0g zf%rRFtyX=nUe$Zu_3A5U%H{GH_wYOq05BSjP_M6{(`n=D*MF}WBt*Gf9%nKcEG#Sl z0EWY%@;;H@^PXX4Wd+yQ*I$>RmdZ^dez!)>_s}bt;HJqM)LA6>1 zV+?0!XSleyfPaer`}Z4s|K7*S%1SES{eB++u&@9l{(5~a@cY4FfNVAk*L6{=tpdPU z9)$bP<3^*2Y&Hu3C>D$S`(m-E?7ssbK>q60&$zz6w(jJ|j~}(O^WD350Dx-s6?(k` zRI61K3I*-}k-t=0Mya%n!C+u*gAPkeOWYZ~UN4kClYf~DaMR$~PKJKJkAA<8rKKf) zEt8p>;CDRF3y|O5-U5Ji$iI2>W~{nSsX%1}g}mH(xzn!eT6JEA=!`J_QfV0gFh4&J z0Jy%sMzL6oH5tS~7u$m{2|Ulciva38A?@_T7z;R&oIs$+gVbr73`y*{y}eaBYZN`-&^^l1kGkk1!zcz75v z9`~J2!yc70GMPDCU7Y~{8jU8O{g^@o(DhEIeHQ^cJ1qd92TbCSm(lI+2R=6%O)$nl zZw)f!2#EUzL=c@J^X%^KVt03!--n0@F!fDX1bpHB z^dqM|-7HoOjw%9d(xEQx$q_IZ4DKR;ke1V4{*P4o%Y@!XjW62#LDb=`bqoiOA;*#t+%3^kbU# zM1RbD0CY$@9qQU!U*8zh%2fy3bQqQPMEqq3U|R5fpT7?4V44n1)1G+$4?h5g1;@yA zXp{D$+Iqwz9`T4r{1|wA2;48C!oIhyLz(`rTrQ7)__rW=1*^ft0EMlFg;&kcfvwe6 zA74Y)*EbNg5L;j0fbaW!rQ7MWwf8c{uz#?yfNVC)_kaNeIH;_FzrsRH7yfC90ixQI zH_vsTm2Ffx!gXC-U7exXY~tqThF_nXn?t+Z#%T24!2L5HfROMv3VR)F(m_};4u&-y zLN1rX%1Q-SS6BG=-~NTtKPve9=g(;U@(b$qI)3}@YoOhk4*=E5W!Qwh4kqbfYkzBN zq8u%PzM}{*t%e>SALD)~L6r_ZecC~%)1KItG!1(lOw&Q9 z)5eo0*@@?nDgv_EtWinY_kHB^1$_9hJ+UQ8p97onp6B7<;8!lmNE-G!$mw8vdzTgMYofJoj|EnA1Z z4ytq@>N8dR4102w8T|#Cj6=w11cZfM{}q;njj9`)zz7@|H_3}CX+$EzJ^Alsa-wNR-R!o3z>|0 zHp^r(C>D!6XEqv5r7fLKJ8UHl2zh)sJP*B3=FjKzfor4Di2q%yt$(7?XpTFbHs3EM zFvh?b3;f=7T`j-%d_XRjo5;U(O@2cXj~N^8uyOvhsunp;D=6Us0oeS1K(>>hmf8+S(9xzwi4-{ELgv0|T1Y1aMs! zi;K_0&j*OkSFKP(PJfDMPlgbVj*cbhU*ZhZZ79_d_ z2wf8+f!?<0L6+18Q*Ph)vAFo03#r5h`7|Z~4MMlO52sdJ#ee+#JhryB_{~X{QX7(RV@4CeLCDhC_N0i-$q)iLF{ur4xMj>@0yvQBB_`xy1u|PB=oyfP4RIVW z>j@AV0U~rKMStR+43QDnhNRrHo&bSbP~4LuaZZMa+L$CZB;j^lm$x&k3E)6D(UJ6| zh|S3mxt*jo#Nk#w$EH029I>&uCq?3%4AI?hYeQ0QYHwB(z!7WzaZZY)bTY(78WVM| z6*rZ+XEgx=#w1Y*+p2TxBUDE_oV8%+dj38>SOL9zYvGu2nJ4 zMkSoYh*>&7gl#!mgoz-RF!2mXN}kk+Svr8=`#v@|HzzjZ)7+353L8-Kyh}_nQ)6*|p zmvedf4U3D%;&nNzAI6%iw z+90ZI>K2BgP*>Kcs_d&&DihAvo)4f%Fd>(faVADY>GNq29?Ahx{1gd{u|RoREM<^T zS8}d)>fR8=^0TN9)tnEwGs2XdU}A(yAFtzo2nX2kQzWR~_~gFR=djHx+4;mDD92Jx zB(+==Y$WQPPCL-P3gY*=f9k4g*VI;9euAoIMCf++C-w+b_jbGcO8)-?-%gkYH3d&d P00000NkvXXu0mjfb|CD@ literal 2938 zcmZ8j2{hDe8~=~NjEo@_BPOQhB3T9@GR97_F9{`UcGV;T!;k*%<2q4FeJ@9EJO~uDLD%G-mPtaO2_Ve0NN)hXDZm-7f*P=J+!> zMnt%wW4LXwcX*Urs25=6<{K2QU}0z{bx{GWpds$NTEmHH_Hs1!HZ?sDKsgEza1z7= zfH>?5N5uc(zfL0q0{>;_;&3#G3lQR<6Gwbgxc{>Iarmz_6$t|9;Q!(OH3c}XYzV;3 ziBwWnQ34VEuKKGZ58>}hc^v+0adGN${S|3*NrS`w$wDhB{qoXqzDe%Z`5gdoMApo4U#O<#TclO!M#g&z)?fG}$ zZTireu$|Sr!;a+X&Yy&-=WdBbg@rzTv!>${FgTpTs0<;r1kaUt_ZMIEW>8*!p}h33 zcNKxI>~0M{l6UTl2SfU1-$XNv(g$@X_;6e&eJW*J*{rx5CjC)A3C{8aOZ2F97tMr&;|$itLsSxmr1 zvYsuOO>Nmkr@)cQuOb6H^r_n?24CwOVs>A? zc{Id^@%eqq%SVz|Kqh_zgF4MQ_}_eR*h^kMA5&hqkybnv7M#MNQVhHuO$osiQv0+D}bMU#*!Za^!zcHGiQa*b_U z?AKIBxFhE^Z|GNOMJbeetebw{`fR;V`;;p^1(DFx0+dqku-123+hf-%3cx0p=t2~b zv}HMo>f+JYca>_%8hK5J34L76tdoNAAnFE$N1X!SOI;EY`p`;;eU#Uk_r~)_IHi69 zpc%$mgbU#NnHHqRRi#*H{i0FlZ!HqTaYN@SAFfHb@^F?spgpIvi6 zDAG~ebjj08bfR#LtXvAS!iIG}t{(g-%~D5OO);tg#hFtia6DhT-)s|~g<*S^zpyd5 zdWq@fShLQjv0WVnB+JQ#P+Dba{`l#L;Zv>M_ACnh(|fL97KG5< zxTXJH!4}t@-?3zq+uL`#^)+q~l&d_HfvDXLan$bX%BrBr9wD5l{ODuwmd_hwOTSOPvgT z+eFAq3Gss8-F)-jdv^o0pS?-V>O@mJB~)Eq+T1N-Sw+`7W8bvJ9ys`K{vsWRG)T%e3`x?jw`t68%uJ0xa^R&4TU})6f1Hn@ z;TahB5e#=RnkL1{_q@Wp)iAZpY-}8f#98xxzuB|=7zb62p%K=rW2SUd$lWsMAs!wc zk#XwK7%?eDTCW7~4MSMZKa2bQY4wuP4X9YD0_3TsqCujSs{FYLkRk1DSvf*W{#-YR z-fdylsIpjic4=UwR-DMSXbV@u6mzZhjkukMBoCHle9?R2789OzN}F<1siQ7SH`P&u zSeCRief=J(vYsl*??jw?e=9Xo%}06^dGP1n_Hw;QvCk_uo3Jx>1@0+G%b=LOxqWnb zpIOvs1PDRx6XVsCFIw+PH!T>SP^#Q&YO{uudvY~(5OXAoalj8j&tM!|L1WJVwPO49WJ9Zi?DuK zO4`lbWNrnUVQgdkQ9~^NEE9QkYytzt4_!#Y^q0rLTc)Q&lC!*%h-~{!hLS? z*VZh5AeYM!aM!hL949_M6jh|mx!_Wf`e|x;E1fLLS|pNgOW}Kw!E$nq-A3WaUs~p# zXfm}9F<9}6++_aSA+^2Az>Va`v&ocp3+yox=5Z#URJEiwG(B4@ z`5A@W576&mVG=O|WzQdG5=)z9)%6sJ0yA)64TvQqzF6L5=T{GcusY~gUVJIqZY)^> zGJXOW2f1@!cH(xI+D`+o8}V3I3c{DPl$g zm}N6{E4);;n5<0Uyl7#OkPz&Kl$DR3&@i`y2Kl|NpraeNcO)C$S%#r1)6r?=4_er!NI?sGdORox1V3n z<-H9>=Z)Ce)}ep^g}mTm&a*vl_1vE}%sL(VpO@fgFk%TWo*0H#1iIphfj7_2A82$;39rvn49jS%I*T$Rf6WYS-l!cNo2~4|g*5AZ#DQ4=%nctY05UQ$q`b2EAJe{{;rlQnmm9 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/closing_unlit.png index a2f351482b5147599893d422d32e7422d8dbd24c..f74a94b60a5a896e245d74d1ddae82535fa9681b 100644 GIT binary patch delta 152 zcmeC?Jjgh~u)f;U#WAE}&f8mxd<_mfEDi@ga{l{o&BDaVceXRxJMS5D?xiJZ<+C&% zM67>t=Hhc^1_5J&*00*=yg#dxkzhr@l1Wq<*S@?C1%Lb*YQWo$%i*^>*W38$ zPE6tFsQoyU6VvRrtp9+<+wrd(1U^77W1Ki?Ze9NYQ8?T_bZiD#bLE;_*MFcBsQW@o z&k|^G%}whg066h7)PU+_{u2=Td#*v6ybY+{ggym;7i)YyzgQE}EmnY+<%=vI2ig0Mnt}ff!KK|tJV*#08UUmlO;A*ub)am8sbEb&78hca%|@G zl@hgy6qLP0{pClL*eYR7`g190$C&H@#G(&UpJ}l+eQ^rPHLjfw)~cTjKuJVHlse;o z))xn0sCSgeozQy#6p_q&KM0!$0C$X5TJs4wpC3;&`F|Kz9e~_)umn#lq&wF&qQg#qYl$s#7fhA*Wjgf#GXdYI56;m)rFh z>i0v(opzM~RC2V#)1o$NDuDOV2DY8^hacW42tiHr00f+mV=6Tuo!NAt&2#sCXvL|0 z5AZME(tjD;wkRDaft%~=`FMKzdi#c*4^KEA&fj4g0AV_?1RCOWpa6HW3j*r*L&seZ zTCD(@iNRT6fg~L$Lf1vkk6vf30Pq<{>ENpUFcbjxqv=3P-?Kw))KtLOhxf0!0>*UE zJK|F%=M#77px4JnEGztLi(YH(6ogq=!}%Q28h_J)h4TZ~gkvfre!rRlfbfg8^F902 zM(v7)^NG1@3w>_-zaak^z}oplxzQJeew0R?F4&!wOpW3mGfi#|wwrbP{n z6d`@g{LomwIj|)O$G2iK^6rdcYhFp8Cy(C?FeKaKezyqp4AG-8iW$9w7E`l z2OiR(U$g=s9)tlcwFziA?ctX$@eVxA6;M0~1zKuP$lZaboq`;dw*gLQq>XPo;tjbR z%>Wb+LV?!W#N7_Op5z#`01wB-qCqH8RU6-6h9;mkYARst<6`w6 zSrh=RL6p!^JA!Xtq-V7P2k}wTaXi=Csu|=Pnt< vQd(+r_&B7x>bs*$2BAeu?VX*Se7f!*0Gio$g{V1q00000NkvXXu0mjf`ZgA4 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/deny_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/deny_unlit.png index ba26f190cb16705c846d33568e6f6898b8e77769..f4851a0ea0dd0d8e5f1d981157ba3ce9151cf5d7 100644 GIT binary patch delta 209 zcmV;?051QX2l@e!F@Lm4L_t(|obB6D3WG2V0MKUlzv~V#q5B%h5Uit;Y2G`4F-=-Q z($>iLYOQC+tR5c#0002EqTXx&R`w0L5000}_6Td`$ke9?s00000 LNkvXXu0mjfMnGi& delta 889 zcmV-<1BU$i0i6esF@FSSK}|sb0I`n?{9y$E000SaNLh0L01m_e01m_fl`9S#0009r zNkl3mkz2Wrixj>>CXH|5#*Jsvb5}19&bjCJ@_#xN@Mo$4KOQ*!`aQJ0 z_wi|HxP-US@%2=`FiqF8{&_ffdKw3TH}o0BNwabN^AP#lTgR>dZJsYQ8`nR7G>qaj z^)!J7*KArJ0YJmgsRmTf=D!R=pXVB+$&UfmP3Thqc+tk!^NThiOMvZN35`g18rLYye+v*g@dO8P80 zH!3SrVV*52x(8&G$ zbkHc7_DcrD zxN@Tpvp>Pw41kjlwLigP3K}`c{se0QKuS5({sc<_;7&fw{sfCDh#XDM-|f{8n)@NP zhm{Y<@(dvQ3|ND?`z^%Yu6|%90ATi}*AATzOa*}8f!M3#JDpBvbDaAJbDi81@om6V P00000NkvXXu0mjf>26$Q|sNTKcy#T)aP}!e@~G* zA0y9k&fe+n+(+8)v!>q)X85;qqP#TwwLNBTLFHePEe>6{GhJWf=b7*;$p)_@Wg|@d zr?3jLoG@gHHLhe4e);Y7)|rMa31aROVox$$d;K*oMf?(@)3IwiBPJ*~ta*9qt^m*f qq)lvTOb*iA3?N_xCb1GZd>`04ETVPZtlV1;QsC+8=d#Wzp$P!hM0`2` diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/meta.json index 394df8c221..09b1c5c0b5 100644 --- a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/meta.json +++ b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/meta.json @@ -1,198 +1,198 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from Paradise Station 13 at commit https://github.com/ParadiseSS13/Paradise/commit/9312f1fb7dcdf1c195e255a528f31092613fb60d. assembly, closed, closing, open, opening, panel_open modified by K-Dynamic (github).", - "size": { - "x": 32, - "y": 32 + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise Station 13 at commit https://github.com/ParadiseSS13/Paradise/commit/9312f1fb7dcdf1c195e255a528f31092613fb60d. assembly, closed, closing, open, opening, panel_open modified by K-Dynamic (github).", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" }, - "states": [ - { - "name": "assembly" - }, - { - "name": "bolted_unlit" - }, - { - "name": "closed" - }, - { - "name": "closed_unlit" - }, - { - "name": "closing", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "closing_unlit", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "deny_unlit", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "open", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "opening", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "opening_unlit", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "panel_closing", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "panel_open", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "panel_opening", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "sparks", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "sparks_broken", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "sparks_damaged", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 1.7 - ] - ] - }, - { - "name": "sparks_open", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "welded" - }, - { - "name": "emergency_unlit", - "delays": [ - [ - 0.4, - 0.4 - ] - ] - } - ] + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] } diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/open.png index 9e38a33a3d9e2cf9896cfd159459a38fdef054d5..0228b8af4cca67aa457f030c36d9bf2eaff2fc6c 100644 GIT binary patch delta 187 zcmV;s07U=F1i1o`F_A%7f161}K~y-6?UPXs!Y~X&?PYD6GT8lZi;_*61cnPhKAYDj zmHYsJTnzhbVIh&VwoY>a7<*d*w9cV{U~d3BXQ&BgG1&=n&QK4y#hkgu7$GOPSwz&D z?rKDqd0hqG`xo`0buoY7r+}|%Il^m@ROKzJLaRdQF*39jdo9jwF}steI0}gEk>aF! p+N{`0y+d9Fj8ooRLw=&p@dV9dG3CY;`(ywB002ovPDHLkV1lVfRO$c# delta 460 zcmdnVbc$tyAumh1qpu?a!^VE@KZ&dp^`h%J3p^r=85sBufiR<}hF1dv1A|0~YeY$K zep*R+Vo@qXKw@TIiJqTph=Qq}p`L|w=BpJzHQQ1nJkvZqwHP>n999M?Mpgz!Aj=Dg zrJ?K~AX|fx87$5OWE(OvF$e(ZC?L*kX90=VGh_idAn>V-k>Le1f=08I0Vp+roq+|Y z(!j{rfN=rDSdf*h3&2J(OaZb%fC*?Y6If-Cr3H`$)n#a40FphECsyMX{6YrET;g3mxWstkF5B9Kno-npv_$2FdLZ
    rVpPv9`bd zx`%8w3ji38$HI1$zgGJpblgs-je5Ni+73YM{GCqQ{kMt?GJYEX?%%(Ud_Ip2!)>aZQO|ms?c^5xkw_$vN~N&A{sc!y?@_NekVqr|K-lNxzX=7R$^gZuh5h(R;Q39sb!4FY z_INz@d_)$Z05%CnNACf^{gAVXfA;K|+c%TR006#x`GP{B;FF1>TrRr?!1n`Z2$a8G zZy0my%70KSuA$Ru!=}5KMJj+SW290kWHK4Ndi4spo-j6vluyS1WX99&cCod!1(1o4 zgFA{0^?KvV1;r(V4mtmE2RDIKE*KgBh-+jnl<_mSYswu}23yv7Q3{}76UfFwhyn0h zU=;&^#DGk>qsm~5IxkWIY>e4#rfdMS*$lYe0)I2`{eujEhbgy-4EC}Wz|IkgL_*5| zf>x033W$R{stooYK>-Lb01Dm!*cO-}sDG3d5XQ|;!X`4fE@+twpiueHfvi4y5?Afd zs3fW$6{@$#Rj$4E+}Xl3dt@f zolaw8qk_?Bgn#|zpD6yVg1>(FfaZ@sqE@Tnx8Hig{&WJDWdI1d%LwCUh$@3S0e`ZC z7zGV0LvRi_Jw3&LKV1F0_51HQJw3(a$B)tP_dN%(pxx4<4S?=wqHvqa5KAzQF0&g%*7{|ZBY&Ju?-A1F)K&@7DpC^+^ym`~| z^hH28dzl7c8VQanLue>MBn1Bg(|_p{D=T@tdDHR*;07u}lLn;Wm}Q6N=c{+VWk-$9W;s@At8>vEe@Bu}lLn;Wm-MK012u$!@DuDrh#F zt{`z-NwR+1+uN@4SsV!DV6sR9p#1fE!v zMH5u1RD8;3oRq&qG))U9-}9d2_T4e%614e z{7myhS&}N{XOnPK20-&OWq^>ZQo&?0agX5iw_dM@QmHg&N`K2{v%V#4Sz&h_ zetv$(B8#*4dOhDWrj$%3gTuo^ZGI31hqdqZdX`8ADvOL?SRcR_Cj?{#dxQwe5-t=9 z%K7rp>WhEnRzj%lebuBBYl%HQLt|=!6 zsNnnW|Lht=82{$xpMRtW#UQ+W`&PPAUcP(@To(#7>%yBg3q5{rK^YK{g{GJ-PzsUf&J~<4Da5(0}Qi*d8h`ZXe|PR zEDccgMfqh9n!4a}|D&<^7mKmb$aP{seX$S;0JX5_Q8?S5$YPnz6@CtWJ)Q z62kI^?6|Umd4H&`fbH#VVgIyrH6s?2v-1wsym39CCrvT4^wxbo3Xbn z*f7Wn7X7Z9s2gB)k=;R*birl8jw36Whfbm{bpaG{yMsl!7hTxX=`?ayFb~s2-P;IT zG2j&H4r0nwzQY~vaECkG;nu){VPyyp-Aa+${vozi?te37l_C7ID3u~XS9!Mq_S2`& zjVeQU=vIo{cG#wsAv|;|MP%+T4%ejP4wnTRhLs^abSp&y+@F%$lR?!TE_-5x;b;n3 zWeDFcYNd$ms#C}9$)Ms6fBNYk+T+FvQ;(~u74zX8KOeP9dgEJ9o=5w6U_1_l%+H_QGD6 zLFNvbTVt2OltJU(>2Y^`SO{b;I=YN;J{CuheUAHHL%pJB`En$5C%?*kh z)E(~a?aAu{ZXz|2j>nWAl%KEb_GA#b!?5}Q23@x&1Md!*@&oGwXp&Zx6(Fk=QO(b1 znR9U@=Tdk0=+OfO{sYhZ$Av^9f!D8J`}l1D7!HRR4u`H!6nz*al_4&|Dn&-40dlz< zjx>*tefjx3|Gj$&AHNC8<+7Uvr@|lS$CqJerzw2@{{eS+m&KN4uZsWx002ovPDHLk FV1hk`#mxW! literal 3052 zcmZ8j2{hDQ8^8ZC8i}DdA(JiI%NCkO%m}4=8BxYkmXLLr8d6ziw4ivSq>-f=AxoBo zQE3oD3(e#+W{9C|Wvh&BY~S?0?>XN&-#zEK&+plO&vVbY=bn4h&i06`w2CwUK=!D$ zrM*~thy^FLM!XLhUOiYsbQp}uY*SUe=iW{Fnyeko;!MU7myMg zl0XHL1dtdV6AS8J{Ck=mki_49m>BCrFd#41E@JVIga7Rh5aZvAe-Q$s693cx*A$3D z$p`=!XX+X3(}NiQu>S5S$@quqo*4gLFflLe?@apxXfgV?N?%X!cXTMq|Hj!9skHz| zXB@ROKY7V*BBL!t;fP9H;AS()hD%rVo0PrF-oAE=D^?^rTJJ#6ozOwKnZ}e>x7lRu z)=$T{Y8QB@KirNpQj?v`VNFgj3;At4>e-5>FO4_@6a3{qe%H|V$)fMZT9R0M3p}2% z+;BTG0FPY|CxcVbRR{;YK-159Y4yNc3Fq#*U5- zFRbp~z5LZPl`A~n)I_w}C`HKm$<2=};vR98D%U)|%9@;<)Sa6Wgv7?h*|@vYmoIqq z@8|lvGK1cJ?&suO?hsITi>y9IO-=Aatb6d9*#drb2;JXMWtd;#J8MF4zgkBgv7H`n zL)GZEmeX|I)8D*lVY+krYf433=r7Ey%{Co*zl$~sP z*u6SLz+BWpC+z7IS&byfVwZkIWk(knL-iDWn{hlE>l0hd*@W#nnQG{8u91j}NN^HAMdw{ryrZ=f!m>svXL*uGi_3D>9kc?|28f zWf^uwJ{<&`ux~PE{OLtm1jx!*?@m{93*P9L0k$b#;XK2X@p0h~T!8_E>u#8zzhoj+ zKbTRZ>H_swWUEqbF*sqAg>s8I%y}DBPjq)QVZv~8727}-3FK}Att@J=`#pe(c^8oH zNEJF1!5GpAYRJ5VNRp#PokZWR?dc zRDt*~bvpim<4l9%kF5@6Yd@yL%jq@WPl`&69Z(Ys8#>2!I&?BF3$zO(##Ojhb^` zd{T-(^J^2k;~wWe;9a|=jOtDy6|L7PN0KOTx@(Qwt@fD%mS35L_O9{eo@e0aJ=Cmh z!&S#0NmyqT7FIk!{yZ@#G_d`Xqi9d`BY-BPxxFMhl_py`6k$G>msDesJWSk1?IGMU zZg0*mG}gv9Tv5Xas!S7 zd*Y6;O}n7^!IYG9q^E*CIy&i;l?C--wjj36J*3aj!9CLR;#41T^79Kp0ISwC6a&5U z8#W$H91 zU(O)!!HJ7sUkwcn8TAN-m8=+)ipn#h@43=$cz;$P{-fHW9w~dJKGeM|gRX977@i(J zCyW^5s`lKE4vSzKbhnXv`1Ama2&r3_6*QAlHc71CE=ovP*Y_(U^OeV3nB=^g6+>NQ z==hExJdj^k*M&JT_5)Q=eE}YQ*Q=qJUIqR@aj9eYe5qar=E8|&ku2(2}QrE z*<&RXIKl?^9*>cqNRuY@RMYZubv`_b#AV7~sYPQ0Jr%C6*=Ga^8+Nco`rTG!>f!26 z5mSO?n4}?fAy8IioE{G0P%<2gcscqsU$??g-v}CP8Tr=YH>PpDk~~B7Qp^{>DI^lA_`V@uiyxH;XF3K*A*5Pja32!F67LNA+K>Bb7AYibGD@&M~}H7Cg43 zkPpa3j$C*+DTsTbyF9c$9b_uysCVa^$oSmJo00`5O1tEEQ89nq?MjYkBCF3=)bD+h zmltRJ#Bna6Ya~b4Ya7(|sqIka7Q(i2(NYu@%~RV0G5-@_R2HqYYIim9+C79uyX6*? z-EFke_A$m<)2cm z82wr1*c0p<#Mg0ql{P5T&32r#68JH0JZ8*1fa5dK<&y@bGU}8i1X(2XWln8b=5Pd6 zx0}zeEG@WjxtP3fOPnxKppM0mbQ3G4{<3CcjO(nuX)r}(AmdF3F%fMt<&7~+pR-?f zM28|F!)2a zhPNqSXDK@S9V8y!Kmv~>(zj1_HYNG_Wv1D&CxLfrJ`y)-v9mcs{UyvkPMx&7-s&zO zDfAcbieqqtQ9)X*c7f-t8jacskoYw17})S;Sa9~s z8kLrk#c?h6vc(x@?_>}dzFUIl&JU$}>2&iRYsgYZYgVA5cm^aGOl3Xp zu)yV)AKx&ON=-^0(0Dw4gIB)X70;5}apBN+Qu3+UhMLJG8)LqAicKGJT-#~Ld(%G8 zxYJ;%du=rR+ZS@Ca4RkS^ts{JL&W?kOA{O6Urrnruua`4dBrG(%We@Ypvu#Ztk1?< zc&*rLk2%|IwAe6Pd2#o*5Uu!VWr6~ghb6rGgjAh!0s7TDpPhwJD+<{= zbn}Yyv4Bn=&Dqg`9}PD;IrXK9UU%e?nqK_Yi^j7KghEa%Gnf+Om%a1pM~v$IXZ`d4 z>Aa-lt!!g(XV){bfCBWoub_$m8mN0XJ!uvH$=8 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch.rsi/opening_unlit.png index 051f78f757d23fb2a2f8326c572427004c038296..05add9c5dc5c58f6126e5dca3c6ac04a02ecddf5 100644 GIT binary patch delta 156 zcmeC;Jjyu1u)f~Y#WAE}&fD9Dd<_O13Dwe8&SetsS|$z)+WxRd^lRFt9eKf)vDS?jq@>*KfB*mL zIuH{GI5t<*O{rJBT&&3yDk9tdzHfn7k2Ax9a#2RtXX>T?arr7BRi3VXF6*2UngE+V BITHW? delta 1128 zcmV-u1eg280g4HbF@FSSK}|sb0I`n?{9y$E000SaNLh0L01m_e01m_fl`9S#000CZ zNkloWI>&-~Miz=G>O&u77}+t_HI0cs%`e=h{9# zyAwm?Iks=Qaw{~OJ?meg@p}Ew8G#pYl`&47ntRv3LKIGyPmRa`YtB-0@A_9ffx0c6 zdX_*#YVKMe0lt5&7ELSBfe99NVIoAkAr)!_?qP*f8hZ zTpK0>kRd9Mle57mCZjB!AEOVJ*l_CVEIi?m5win`9e-qqlmu9!GsRLHvOk1JoR69X z$ZM?ewMuG}WE(W^f+&Uu4#3m_sRCNNi{0H^hp`(8tQ_wHnOBzt8 zNCJ$IY=hPefRJ;3_oRnGDB%RDF_{2{WZR&*1UVj>pIxgc7+|dgAXzqO1prIQ^WF9B z{rAfcJb!At$8mSQD3uamK#C0-0gz61K|uX>=qM3{H6%cm4Vp_3h3NcJgO@rr6M!Vy zkR1T;4u);iETF$e`Hm+9`!AgUl4Kh!W&kmDz#0-j!-hox2y{r{!Fh|p2MF0xnq(Um z{T4)~zGYfFKjs_mnr%=C0Fj0i%6do51R%LKsDB2aHnkE!vIZLt4n7XY{(zR6`p5o& z%KFFtfXe##B3AYP@m_m(`Un6{?DqfpUK_A3qR#-xVvVoo7i&VAvRE_F3;h;^XyrtF zj@W*8rGM-Xn8#Fq?$^+ucp^*s*u4JK5~LwcQu<7}HkOn=Q?89=w9jLIKn9xnb4$>H zF@MPc7>hobdQFS1=`Y?NFoyPWuvPs<`va!XaKI9MNvMm7L9@zQ#36W@?sdvV%Uf8E0l~t?)=mVmwYBqKNFjK|6$`m54tI-# zM8S|Ei!wztITp6K+}sOc!C1`BWM-0VChA&pKA)%4 z>G0(K*(sJ$jDJR>6UR?NtyZJc>5$LoDHe+p0%?PP4uTyC+9-*Tz-a{sxO4M8;Oh!t z+ujdJ0IUchsMTtx5(V}dChSbw;ADKzUHCWb?0&e;jccz%du?r%xBqAhg{YK5DTS``C0sRVG$xjmSApJ%!H-jMEJZtx!)P>`NnF!3>h(Gq!!X9P&NPZ>?q4)_-nx0D z)B5^>?|&B=__|_QMzDrqjI)MejJLM7xOM$iII#2j=a_x(F*7TmSq?WhHvvB zQcAKy2r3ufuqytK4My!p_b>BzXC0*!LI@hsB#}TcN7r=%GV_qj<@{7!|2@O48*AY} zyWQse>crmJ1xl_srD7c@RQi zSr&(fhy3>et6+kuHQX@Rm zJUz7-IDi~h1}R2X21X#u3y7tmY>@9Y7@5K1OhC3FBNKxFkd6Z4%yt&AcovWi0{hDt z8D0Pb2}Yw?$^ev_z|Oz|RB2#jY{0kxVk*c+)&&rgrU2O>zyvgx39K^6(gMhW>M}Gi z0Ll7fEcz*Xj_WBf8uUF~978Pp_fCF2>5u_OYbWmlw$-n%eXqZ2`y^>{-m&@f{N_sR z3#wvbX)TDFrn>3EX;&?og~1$hOFuuAQduhEyGBrkmFxOxNrp!&nQWN+6zm@vI}|o@ zXfPb)oG?MLbNa)Bk`HDpx$M(nkT?3F`jPp;`U`Rr_QDNvMl-hUi1_Kl;ZP#JdGcG{ zL(lxg1n*xf6}@9#J$*sWnY14VooD@R3%RWwW68mFdJku*w?^=V)%WMT(so$;EFdxV z=cI>=?pwPSSpIL`B5^cN#A*ps#;I2(=kmAT`Vhmq=y%8;Ils+}Nk#R4o|s&|d}QbG z=Z~-Zm%M3bGib=Y&G6zzpmjj@35V-jtQ-1PecJh(Wx?Cs2Y>Sacu=y~oMFalqpIH@ t_H`d&dCF5-v6n~d@qLahd#gKY7ujzU(Uf)-Jy{3}Mo(8imvv4FO#m+5{8#`0 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/bolted_unlit.png index 57f172d54fe8403a0e397a59d128e37d7f10d53a..b65261aea9709cf43c27ba1f88b1d1bfeb85e924 100644 GIT binary patch delta 75 zcmX@YlsQ4gm9aR;-HBn{IhmIX3=GPiE{-7)t#8j7@-i@RFmL#|{S2eovL>qiCvn@!jXaMQ={4B5v@c=$!>0T&^7a-Jh?yV1o uelb}BGXlWMB2oYaPyhu`00mHh)d60fV`$m*fbTc}0000<2J;7y8Gix*008_L?V|ty00DDSM?wIu&K&6g00XT_L_t(YiM3Y0Ya2-v zep*W`jMm=e0^@9Kb6F+WD61(FHl&bTq%cX5;))atforc#cTKqV{)FqVQjy|{13NfZ z9QG1SL;{(tjY7y06Qi(TVsFL+!f?Lg`NrdsEX$C42=QiT=70O%uX!`2xw$#egb)H} ziBzmhy4q|u5kfI3L_&y^a%*cV z48x)*dc9tr=Vbs;==FLX;1dA2Ao`u~1EQamz<$4f))ev?9E1={_qzROX$1OEQHdGk zK(Q1$=R6343!wu5RvHH2;o>`;13y}$_m3lpi~mY&+kZy4EI99Qp^S+B)3y1Bi|?MU z%@3XZ1|A@X(v6dB4SpIbSf=*1b-@}g@pyxAd@5+YDKfzM8#MT$MIlw*|yzox7Dzu-v@CV-@Wky^_ADR?%#Zc z`cJ=n)FGCZme7^a1`$G%BqT{G3ap|E0lk_004g<9%fml(1)Dl z3yEGf-~D!32=V;tRow`qvyFR_jdJXCI#CpVRRwJn2sofKwUTgq+S0X zqJKQLlnIQnaeB+Sl4Y4*Q70Ys!|{6po8jl;#L83P>vEPRXMx{b8fYU~Z=P%azE z(1Wg{E7%Fwb)zWS+}!j$uTrU8yYh8@=4+>0?Y!BWnw-eLOyplC-fzS7^z_luk?;G< z%ges+SF6=L&-YG?fgXn8_V#ue0E(gr!(s5hrz7mkYOArgv%lDCtf6V1=We7zw-<9} zcxj*)MFCi*yAwgq;%`6*-XQp>D)jkT$FP z(IT^4&oyn$egbUox9`+x*xR6BqPjC#_$iw}o#P!_4ZAmuO|zbw{bQ)%zTnZlChS0* z*q`tE5A;+T=626hYbfFVE%C=eI@4{!UDpsptxV6gU%hr&JlMMbBKy}k6DNV}w6z~Q z>Jl7Pc6D8N@`GPBBqv7dU$3aNz3CD6!`~k!ZLwY?XZXw8|FdYyli0h?{a+SbVY&L{ z@khxtJ}%YHsH^LbZ@>O%#iU6*4}R7#ooHk&PB?O*@&3|f@!2c;WA`w6ue?6-Hp4ts z*T=cCw-|r8w9Q+1x5w7esPwMWob)&4;_UNxcW>TXWxIC5h2pQ%PQTVGc=k6wB_@tv m`Ri@p0tO$}+BB0N^DgnPRg$zUnyRV|3V%;mKbLh*2~7Y2zXLe{ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/closed_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/closed_unlit.png index fdf7952dd871fb4979d05e775229ece70449e714..116926929f4840945a9685c49cfbd3418b430e24 100644 GIT binary patch delta 63 zcmcc2lr_Q7QpMB7F(jh(?O8`&1_ln61+V9y3fi}|ZFWGzlcsfN+JzYy81kZYnprbV S<`o0k3=E#GelF{r5}E)5Oct>K delta 298 zcmV+_0oDF$(*lq&e*|YiO+f$vv5yPVGd008Jo zL_t(oN9~ib5yCJGMHLo+f|{CXU<6hpBS6U{)YKF(0r)FcaB{Na_+l!(JDrUZ^uMLJ z`CQg#B09NfUEEzfe1NB4LAYm{zS z8cu!rsu{V0LgXrfSf0^35VAxkk~LBzSVCNg*2D;sEz%gbUnr?HHG=BQHV`{KNIi>@ wJ%YK#v+Jf_BrG|RM#;Bf7=~dOhVdtezR$>4DS5Xd!vFvP07*qoM6N<$g6cYfg8%>k diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/closing.png index 11aa3300fad3bec0ddea3c77647a890d5d2d6349..8f654457325c9d337e2cfda1ce9c61e241828d70 100644 GIT binary patch literal 2738 zcmV;j3QhHiP)Px}Fs@X37z?up$9o8+hEPNo zdg!IlQvwU!me4~F-Q2dPmR|Qz<`76Jd&t`DA=sjXS{1A^7>71Pabqvq+9d8|s0gfj zP`>9kqc_t0lN6|bFj$%y&F`DcXVBcs;X!aW)2*v-S@6Yh>54HhK z(_q^+Ha9n=b`T$944F&@&1Tbe+>bv60II5Dad8oqN(H%G4!W)fz0bf{T3SLbmqVpe z!Q$c~R8{52y!@Yh^j6~hx~>Q2*L5A*>?^(jfTAb>fNHf0S*P9K-=C<}YAz=i3I)FT z@uvV_dU_g@lanw_6W6a_cM&Fum6a8krisbPNlZ^q^Zg?K$G0vd&P(|C)`i&o?RGmd zf2maJ;ZFhJ{-slV^^*D}$R;z_}yNz0N9dCouV#=lv4 z;`$48I{{-1X~%I;{jeJzx_%A7exl^BA5N}^R<&A1yWPgx+8W+p`di=MJC5T!^6-N< z?Gf&6UFDw{W6*USmSqLHW}I|*Z|f>_q@X%)b`Ahw zSr(d?&bfXUCmnjzUQkC53u5B~r_Y46xHCzo_k+l@yzq?<0PHW}T;|siBck1I_l(#5pePD#+m4kE#UUy^6ViSsj|$Zf|NZ*YCN?)u z_s2q&o6(_xgfH}(ebL(=Kc?|SR& z>z(42FR*a=1>YAn9R^K%BHq{r7!_Kr7Vh8whi7m2bQm`6DT)HaFffvb?wgE!KHnJ> zZQ|Td*x_)$-IKvsDWZ6sCe)0RATkqnLISa>ez!<}( z_>$lOoujHMs4@JI$z;ag0Dj@0)N0(I>ouEAG@BE6e|gHa?^5>k`-5$uT)qeZffn{H z%R;$acI{IX1v@)CJ?DMIZT57Ye(%{;*Y^k8=VU*Vf-%O` z9Dn$pfy;O1@YB6L{P}|qxUzy^S=RU)Kn(S$Vef|^=^)HH!Rv!;m5Q6xEtzm!`=^J(m`B!=X`R%eH%7x{OO%{a7EZp z9RmQ;lmdYGVef~2>40=Mal+mYLDIo6mLzv}cKF&iff`+m0su(ezWWuj>?N}7CGOmM z7ptqQ&~<&_6Fe-a7gIV|U0nrZ47cxoHSl+SVebb@2LxF~1;$;Nq{>>xuIZ0`aE+pja&8_kTPdDxsJT9zJ}CVzJ1N6^liw z6Os^SQ98JB;|AZ3kB@u!htUcAP_NfHe+mFjPEJrP7IA#sZGAo7!w6TXl5 zy-r9%59Cb;)c8U8lYlpqc<(<20EdT%+=z{hjl_+hp1iTK!O0H~5BYJCf0#W{y!o*F zL84LCVJP4G@uz|AvRtdx;wLs54I~Xx4sUI3^&Io^-@f}_%*@R6oHr`|TCIj_mwNe0 z%vGz^dREc)_xC3Z!|3R`&KKsz5f;hQz5Ek?^#PxJ^cFt-{4&=z0>G!AU*^Y2o>grI2}N~Mx(1V9cD`MW~dC!uW^#BJMlApZIJc>rC9C)oiQ zW0;?xhiRHF{xksB&1YEy+mEN9&AyVposvYaTCKt`j1I{$#N6k7+XK2&4YEe?^3#on zumM52WsM;6lVV!5A;}IPYXn{&P%4%1o#In|Qq$Jqf=VI2~sa86bk zB7PpG4THFci69*y(weYXDH63Zq}^`EiUzVF32w)6dLEAb5T;ydPzOkhJEK;L#4U)6 zW5c+L@sjEQY5JgP8lqN;M5zoBX2+Mu#+O>{2qv>r>FT|He*}2pKWbk$Xz@v_iqY_Ta ziBW8b!|mm(R;zgLn}6Zodlh^C?75~#a?_8VHz2K1xP)0zRl-qJ!GaMTaikE%hB(}` zkJ8B8+kXu$)D0`hwQc+KAxtYus;b6P3CA%at_^Xx$#(kBT2Y0%VH9|xU@M&jd0ZpL z=>RXH2zA2>aur44i$Sgzu{bK>I7W=q0Z~EuK8he$M5MVOQ8yG+2H4MtI5v!fTf`s* zp2#hm{zycg9z_+L6vn|V8)k+PAGH!0#D?!ZM#R1OOXD* zps3_=jYz_VQE?{$u>%c#Js^k?ZvwY%+t4&^sFQh?W%UdSQjJDqB;+z9L#Vk5k8&T|_q%R=+%IlhS;x~{`8jGh-l?=cc-jchUR1EWaH?pYn#$slX>%J0ltN{YIiL8`0Jv7YtB>#ML&J~koOX*C6x75ok&ILls)9-Cvb&-p2!=g-F sW<*l*beRoHq)$ literal 1643 zcmZuxdpOg382|ldGbV;ZhTKL-nh8CWG{QEIOmnB0%QWgBmuh8e!(0xzmvqub>gcYM z(2a3&kS??%he@KjCdE0mxt^cu{Bxf3KF{a-`MmG<^L^jvdH?w4czY3*Q93990F=oj zS1QCb2m}Q==zKYq<_Hm(L?yZaH=l2qgcA4x=RM8PfuT8-+I1d+ZF5bQv~&2Q8*m#5)!GJi;9N9 zuvlzlNC?#F0k0nikybL*%V+g}0~jNWg+dm^1X55E0I0OA0cwkKJn4X zN5d28fOmLITr$qf&DYQlXN|MhjhU)}JoWTIax|H20VqHT0?+{w00=1$2)f_(+6K%) zxvzB?q^&_1pbBv?gqSS&*Lp0Z*P{Oj2uwhW`j`JR6o9S@kpLWW;R=D4@2{-!__bRJD~1=b_jD7q{mW!mXWu~LOn~^v;I?(|g4OTk zAAN0mcwv=4pv}<&s!YB#GP~?=Z&JxNYSBH*5zo-ctFF~$;#1c@PM@hDTXea^|w4}`X0d)eH;rE?-bfP z@@K`Kf>L^VV(g9m8b22lt522#o0HDO;OOhIFw~8^HbqkMS)2V=$Och<R@5*&TnygD!Cr&5uwG^TVvGXcUoYVZ&12mu5PK?{ITjs%eZW5owHnUKm}ZT&QV8 z16PK2m)o;>Ijx~IuCTow2}ijDKVeUt*5TQ++p=3#12YMJT43lx_!8=rOY>ikR`n4l zCeh%&-I`AqkBkP8G>#9b!-F;U4Qy2-45STC5P-dmoL)?Gm0RT}BFxY(<-CljacByI zm@ux+_X3y|bHxvz!`IIl%PJJsg~At1jO9wy%+dJfAD&>hP{U;99Es#*JU4ovb?4wQ zjZl3AOIVZ8wl{<}f3mPwP%O-7k9{iTA@bjRW_@IcHDSZnERJ#y9#c1JrpGW+U$wjQ zR$*!}s!hu>yfw|~5jmDmb+)F$nzhJw!y|Oo43;vGfqB}@#5%#1SoKN8p6`Q`m&ZXw&GKMGju`5!B z102+82+xFUPlP&`Kjx>>nyrzk*Az{e z+p(bhX;v0CW5-o&4JvYBZ?KfMYr}Q;POEL#`y8UVNvdD*1#=2IZza)~+D2(SKT)M4hoH=UH+y|{=`nY_e1Bw| jaMWKo(AvvcC|yDPv2meH9xtD{_Ir`tyj*X((9-?^hH|dx diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/closing_unlit.png index a2f351482b5147599893d422d32e7422d8dbd24c..f74a94b60a5a896e245d74d1ddae82535fa9681b 100644 GIT binary patch delta 152 zcmeC?Jjgh~u)f;U#WAE}&f8mxd<_mfEDi@ga{l{o&BDaVceXRxJMS5D?xiJZ<+C&% zM67>t=Hhc^1_5J&*00*=yg#dxkzhr@l1Wq<*S@?C1%Lb*YQWo$%i*^>*W38$ zPE6tFsQoyU6VvRrtp9+<+wrd(1U^77W1Ki?Ze9NYQ8?T_bZiD#bLE;_*MFcBsQW@o z&k|^G%}whg066h7)PU+_{u2=Td#*v6ybY+{ggym;7i)YyzgQE}EmnY+<%=vI2ig0Mnt}ff!KK|tJV*#08UUmlO;A*ub)am8sbEb&78hca%|@G zl@hgy6qLP0{pClL*eYR7`g190$C&H@#G(&UpJ}l+eQ^rPHLjfw)~cTjKuJVHlse;o z))xn0sCSgeozQy#6p_q&KM0!$0C$X5TJs4wpC3;&`F|Kz9e~_)umn#lq&wF&qQg#qYl$s#7fhA*Wjgf#GXdYI56;m)rFh z>i0v(opzM~RC2V#)1o$NDuDOV2DY8^hacW42tiHr00f+mV=6Tuo!NAt&2#sCXvL|0 z5AZME(tjD;wkRDaft%~=`FMKzdi#c*4^KEA&fj4g0AV_?1RCOWpa6HW3j*r*L&seZ zTCD(@iNRT6fg~L$Lf1vkk6vf30Pq<{>ENpUFcbjxqv=3P-?Kw))KtLOhxf0!0>*UE zJK|F%=M#77px4JnEGztLi(YH(6ogq=!}%Q28h_J)h4TZ~gkvfre!rRlfbfg8^F902 zM(v7)^NG1@3w>_-zaak^z}oplxzQJeew0R?F4&!wOpW3mGfi#|wwrbP{n z6d`@g{LomwIj|)O$G2iK^6rdcYhFp8Cy(C?FeKaKezyqp4AG-8iW$9w7E`l z2OiR(U$g=s9)tlcwFziA?ctX$@eVxA6;M0~1zKuP$lZaboq`;dw*gLQq>XPo;tjbR z%>Wb+LV?!W#N7_Op5z#`01wB-qCqH8RU6-6h9;mkYARst<6`w6 zSrh=RL6p!^JA!Xtq-V7P2k}wTaXi=Csu|=Pnt< vQd(+r_&B7x>bs*$2BAeu?VX*Se7f!*0Gio$g{V1q00000NkvXXu0mjf`ZgA4 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/deny_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/deny_unlit.png index ba26f190cb16705c846d33568e6f6898b8e77769..f4851a0ea0dd0d8e5f1d981157ba3ce9151cf5d7 100644 GIT binary patch delta 209 zcmV;?051QX2l@e!F@Lm4L_t(|obB6D3WG2V0MKUlzv~V#q5B%h5Uit;Y2G`4F-=-Q z($>iLYOQC+tR5c#0002EqTXx&R`w0L5000}_6Td`$ke9?s00000 LNkvXXu0mjfMnGi& delta 889 zcmV-<1BU$i0i6esF@FSSK}|sb0I`n?{9y$E000SaNLh0L01m_e01m_fl`9S#0009r zNkl3mkz2Wrixj>>CXH|5#*Jsvb5}19&bjCJ@_#xN@Mo$4KOQ*!`aQJ0 z_wi|HxP-US@%2=`FiqF8{&_ffdKw3TH}o0BNwabN^AP#lTgR>dZJsYQ8`nR7G>qaj z^)!J7*KArJ0YJmgsRmTf=D!R=pXVB+$&UfmP3Thqc+tk!^NThiOMvZN35`g18rLYye+v*g@dO8P80 zH!3SrVV*52x(8&G$ zbkHc7_DcrD zxN@Tpvp>Pw41kjlwLigP3K}`c{se0QKuS5({sc<_;7&fw{sfCDh#XDM-|f{8n)@NP zhm{Y<@(dvQ3|ND?`z^%Yu6|%90ATi}*AATzOa*}8f!M3#JDpBvbDaAJbDi81@om6V P00000NkvXXu0mjf>26$Q|sNTKcy#T)aP}!e@~G* zA0y9k&fe+n+(+8)v!>q)X85;qqP#TwwLNBTLFHePEe>6{GhJWf=b7*;$p)_@Wg|@d zr?3jLoG@gHHLhe4e);Y7)|rMa31aROVox$$d;K*oMf?(@)3IwiBPJ*~ta*9qt^m*f qq)lvTOb*iA3?N_xCb1GZd>`04ETVPZtlV1;QsC+8=d#Wzp$P!hM0`2` diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/meta.json index 394df8c221..de3724e657 100644 --- a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/meta.json +++ b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/meta.json @@ -1,198 +1,198 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from Paradise Station 13 at commit https://github.com/ParadiseSS13/Paradise/commit/9312f1fb7dcdf1c195e255a528f31092613fb60d. assembly, closed, closing, open, opening, panel_open modified by K-Dynamic (github).", - "size": { - "x": 32, - "y": 32 + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at commit https://github.com/ParadiseSS13/Paradise/commit/9312f1fb7dcdf1c195e255a528f31092613fb60d. Modified by Hyenh", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" }, - "states": [ - { - "name": "assembly" - }, - { - "name": "bolted_unlit" - }, - { - "name": "closed" - }, - { - "name": "closed_unlit" - }, - { - "name": "closing", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "closing_unlit", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "deny_unlit", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "open", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "opening", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "opening_unlit", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "panel_closing", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "panel_open", - "delays": [ - [ - 1 - ] - ] - }, - { - "name": "panel_opening", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "sparks", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "sparks_broken", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "sparks_damaged", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 1.7 - ] - ] - }, - { - "name": "sparks_open", - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "welded" - }, - { - "name": "emergency_unlit", - "delays": [ - [ - 0.4, - 0.4 - ] - ] - } - ] + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] } diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/open.png index 8a5b20078cfca4d502b4fc367a624445ecdb7f00..16e4017e9ce327f0bad7e9a45b17c092d7f848b2 100644 GIT binary patch delta 548 zcmV+<0^9x31hNE>8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00HbtL_t(oh3%IytJ+W) zhM!!7z#-&Hgg}N+=;ClD(Jh0Mx^)iy1BLq&I&`>0e?p;4$KocGF6tyULkDrW!KL6} zAtj&`kpo$3hv-4CTxc=Sp?S71=bXGR=i|Wl8ouxEd4v#xUVpF0U@%~{S{aYm{}$i( z_d*DiQWt9#0M~W#JP+HpiQ|}Nvw5xN1&v07#bSY!lI?a&k|d;Q$_;QP-tBe)Fio>? z6YX}JIF7Mx8_)9qasx+k$8i8qO40B43%mXx2oOSGnkJ6pXcO8%9LKzTk&9c5 z>YgElz_Kh|AAd~%RD=+`dwm1^q*}e@+Ygg0%L+B1ltL+m>$<-;j|9JP@6EG+E|qMpBO4BDJdx_Dfz!K{>2b-s#AG?|4eUs^@fW{rKric z)9C>Dd>BQM)-me!`u@Yc0N~;KEnnm3D5VfWFdmN!AAij)%VM|N0r}i{qm<(A?JvGO zROx>@;BZddVtQfS?*F;zm%Jv2ZR5`Q*P--hk^m?7(kkQ1J>Ge%o}Mz%@8TBP)Pxq7nv0H~^p@$qqtjErDsX9pkMy5u4aGD6pNDF--?gC|d(pja&8`1lz6`}=6MS_tAF zRZgI)Dn^xE+SXg&{|b+GrfBdLFxN+ctDvN3B+q=9l4SueF~Ie*75#F7la~ z8311_@8Mgvzy$7oxhZ2_9rYn$b3 zG#Z}c0HA3aY}-buRH9Ds<0sA!!!2urh(80s<$U7IK{!Cv2`qot`8{rJ>J+=ruS1)9 z%J5%6Hk*ZQ+o)EnFbo5_uG0>moSgLVHyRD!PT=`Rm3kQNPP5renWov1wSnhP1Mqde zHg$^0$w_Ear}P5=*=!a7P_0%yxpi`K((`FF8q_$p69`!6|DgDca`!{K-R^r1v5B>z zR4NJi2f;0}f#pvVhY;rv!vQQO*#^3!$oMoR#T^7TJ^I?F^aJcYpIbZZ1B>{mtuv=M928j1B2Q86oR{L4xNVM%0J3VPGRbhP>Z# zKai&|@;3;6BaLhil3T`x3^~E?=ICdHZQF@BASxWkp>N`fqPT2fJ6=%~Paw40?O3CM zaFbF*92+umjYz@)Y-d=Og~pW&zWe0&s;bi8vcY3nR;cTU!_Br4)rL%5BjP#$=#3Ih z(@?zj1!k`v(eHMj&tqY>PWQ*gM)A+Dvh+UWI1U`gfvTz~m&^1x8xZ_G%eL)AxY;(M z+CWp#Svdgc73&6j|n*0Uv&~=?|i_RtFBJkwo0@#vxv)N1q@%KAdR9@%#!n7CV+%Ptz z_>-&ED&G3;-{}5l_3z>B`G3&;pZ)6Jo(3zG3V`ltknKQHqu<@#^>s);<3+!TL%;obm%$4OiO1UiumfY{vZq)ZeW=siGHRWuq6G#V+qz0fN^i^|dE@?}a!U|AN* z<+6(?o6TZ-d)s4xrfIHyGNYubDvH;>7-|5-7 zH!mm89-f}UvMg6|Pv+(4ECL`7cU&7{mm>Hlp8W4$gKgXR%j>VZj)$GV?*}#j2t)xO zdgf1xo840_A>uzG=d;47VzG!?tp;E?0l*8h2!B}as5Y?t82~swK1Q)vWTc6`PI!K_h=tir z+R)h8C?4(D9uhK)MG!gv`1qK9Pxx!K8cL-S<=%QcCY+BT+#~>4RhlS`h@9`oe{=DY zG`DG*oo2I{G7O_5YXi@p0f7DeeE^`HfaR_@_Q<)2R;z_0=OS&0t%b0nTr!+_L)l}z zIG2FsCr%hd0Px~i5&wrDclDuRxMgh+@q5bAevSJf%nMEu^7Q+g*IfZ%nx;#l&bLF3 z`^m$D_+_|75_ORce*C^2@Y5ep(EY9;w>yN$WHkR9c5+%I)ZN?L3*~@`i3wU;$>nlb zTU+Z}XBXK+3TQkb8g7xJe8uRcBqab9AGDtKgM1mol5^mrKl zIQZz+rM~<(ZrlJ6PWK~=rKKege;U9*FP<0bvYkNS$3KWS)*$|TK2L2m3?s4h!%BDZ z`Mistt`8Vg*Op-zJz0uuBVh!&eh}$F7iM1oke305;gV78J$Ued?kDN=Ah0~4MnF(Hh^i8< zzW1M(Tm5B#vIr{|JWFJN=&E2IQG~jFQ5QEI1P%Ld6EbmB!91b}b=efaBI$H6tn?BV znO3V6Nfpc^u1fe-MXFFJbdpj92mMZjZ);SZ;~eKW$2rb145WZ$Zhue3*4s0tZ?fF4=;hbrjxPA9)j4CG>RZei{)*Gl) zD$sSk?-N{DkWoz1VWm>({?k69j~_OOKHhO0eE9Ky6K}uY>P?pa=fC*|TaU+Je44`L z%a=W(;-o;9r{;1w@A`m2IKdBo`g|TqOdpbTxU#ZBKZl2h9{xZ6`7kzD5ZHA1@Zm%E zKW-)Z_(606A4x&_e4alEjSim<$;FHK4-XHi&0*7?ANX|0Uw<0t>f`%$f=o2_TPYHx z&mUwEgyCObUr(Hu_-=iD-NT;&y8lF)UAk|YCZ?}=1zY^e5ca!%D@BMrd~pN?fwU;vZ+T(e*X`0LPEmnBI?l$N7#~+lcPdH)UPTL2!vWRTCG4S z27>T-Jlx5y0Q&-l6-+-bfBF9!AfZaaV2NU)TTl`JsJ1ORc%yXhM>wg?qy;kl_s1|( z7{5dVK8&~oCc%qFH?k#=33hsMW52^1L3E&djJx|900RdoKo>*-Ak4PHuJ@BKZNLmf ze9uELCxZ~624gVnae2t^`8_aSvR5n+7=;)0FaBpJ0GCS801{S`tgJ~O??>0Ai74KW zPUSFPG6?PqeOLO~+rjMTEi#F;R2|8PI}+(z(E@M(g1fULJ<#=IzyNE2guSM>H{^Bu zAb(EojRVG9f?2E+edpu%C}SO;lskJ1DXlvRk5PxWRjO}N-*jSnUC*xcO`OY#ht3;z z@g~DtGOHeb(yy5t=p!C!t?wJ3aj?|bx1&v3k;zmLd5hm18jj!`nPuMm`_uJ-k1eK? z<2y+xDbAC#$0##bZi4nXC9Qfo!*W0MCS%(`V_iyDk7oN<8_i14ZKWF7&^|E6sP^kX z?d0AOPtNV?Dz@gNc4G1eBhN~8yAI-PX%^h;^mYBB#HgK5f7fWz9JpX$lVbwUZHG6 z$@aV0Wpr`(JK^Wh{E&L9NwaF|z1H;@2!R$iVVcwe=p!-8r6kTdQP{9b`2}kQ55!j!#+&13ds*tcJB4~iZ;D_x}7z--SG%7HT+3&e9- z&RFchDJO+)M83^<>@e|+Z+5W zgdLJTRIjw?Mc6I{5yGuJxzFvasy4vY-@mX4=m=<@nW*TvU*$>KKU=5An~?kV+NtWD z$~%`*!x$S{Hl6>RnI9PiGR?IWnYUM~Xc!v%w@<`!_U%B9w#{A<)=t_s8jzM3Z(Xzf z1M;~%Sf|W6c>-m1dA^u>;rd4SjSU%McoP@UgqkQ&I>wqx&7RqO2)nT8#?CfFS*Vo| zlxaW+>d~(Z7r(3(YIT<2ksFuxP2h(%&V|jQwm2Riiu()F8PhFNH zOJ+C`%vGnBnu;Hne}0E;u5U2z;mX1d?45}vtNXhQA#CJHRFU*`uzU+uXY`u*TeynK zHKPhyqHs7pO6BHafD*6OB#g5LgbM@5Nd@6O`ywDjJE`Fx6IRlX>_P?Vc^D{lGdkZBenv_4sU#5dQ6$7-`wjwy9V&uX%j;hScS6~@>kMF>BfgCog ci)U?QAix0fqg@`EE&W{XG%x4+EfHD&02`>Kn*aa+ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_maint.rsi/opening_unlit.png index 051f78f757d23fb2a2f8326c572427004c038296..05add9c5dc5c58f6126e5dca3c6ac04a02ecddf5 100644 GIT binary patch delta 156 zcmeC;Jjyu1u)f~Y#WAE}&fD9Dd<_O13Dwe8&SetsS|$z)+WxRd^lRFt9eKf)vDS?jq@>*KfB*mL zIuH{GI5t<*O{rJBT&&3yDk9tdzHfn7k2Ax9a#2RtXX>T?arr7BRi3VXF6*2UngE+V BITHW? delta 1128 zcmV-u1eg280g4HbF@FSSK}|sb0I`n?{9y$E000SaNLh0L01m_e01m_fl`9S#000CZ zNkloWI>&-~Miz=G>O&u77}+t_HI0cs%`e=h{9# zyAwm?Iks=Qaw{~OJ?meg@p}Ew8G#pYl`&47ntRv3LKIGyPmRa`YtB-0@A_9ffx0c6 zdX_*#YVKMe0lt5&7ELSBfe99NVIoAkAr)!_?qP*f8hZ zTpK0>kRd9Mle57mCZjB!AEOVJ*l_CVEIi?m5win`9e-qqlmu9!GsRLHvOk1JoR69X z$ZM?ewMuG}WE(W^f+&Uu4#3m_sRCNNi{0H^hp`(8tQ_wHnOBzt8 zNCJ$IY=hPefRJ;3_oRnGDB%RDF_{2{WZR&*1UVj>pIxgc7+|dgAXzqO1prIQ^WF9B z{rAfcJb!At$8mSQD3uamK#C0-0gz61K|uX>=qM3{H6%cm4Vp_3h3NcJgO@rr6M!Vy zkR1T;4u);iETF$e`Hm+9`!AgUl4Kh!W&kmDz#0-j!-hox2y{r{!Fh|p2MF0xnq(Um z{T4)~zGYfFKjs_mnr%=C0Fj0i%6do51R%LKsDB2aHnkE!vIZLt4n7XY{(zR6`p5o& z%KFFtfXe##B3AYP@m_m(`Un6{?DqfpUK_A3qR#-xVvVoo7i&VAvRE_F3;h;^XyrtF zj@W*8rGM-Xn8#Fq?$^+ucp^*s*u4JK5~LwcQu<7}HkOn=Q?89=w9jLIKn9xnb4$>H zF@MPc7>hobdQFS1=`Y?NFoyPWuvPs<`va!XaKI9MNvdQn$g>udUkH}&M2EHR8%s5q>PZ}uc>*?Yc65;;#{6^jb z1{^MdlWOlMF8vnZb1-G4E$>ui#k2#O|FZj5`*8r(GCbI_dehN4#jCUKy}P$-?wK6> ot<8 literal 514 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilo1AIbU9UUD@OH0jlb@TG_R&8L{H)OGtlQT9pwq{|8h=}mx;Yna;2db6n z?e_svyd^%FBlnwHk1|u_A zoC(M_WMpCx0Mb!FoY~F-7S95*L4c>6k>Ld}0AMtlr3^r+3G56kK$QkY#s-WFAf|$B zWL*F;X$p`H0!%=2nZPQ8EG>X6s4hbT1CZ>R{lARkJ3<10%v4Vo#}Etuw|(Ax2NXD1 z|2l~Nepi1l>&PD0JPhPd!O!~&IdEJYfae`6=*M#7%zHJwH=BhCrtJAvkM~^}LvzlJhk{g90Aj>^n L{an^LB{Ts5D-D5> diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/assembly.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..65ca749e5c94a406a2bd7cc628f63aeec00ccd73 GIT binary patch literal 871 zcmV-t1DO1YP)Px&AxT6*R9J=WSI=t`K@|R){gE;>WXU3pwGUcii69Xd7QFQ6q5p{givNNXJ$m!# zB?l=LJOGxPT4n>8Xzkb`Ae z*#F|G{?XPhhzR|DA3_Ll&e!rjM3mUJ4aOK4W8j>_G|ed+-}m!w&}G0%rJ@`)O#?Fx zWh56e3x_an(-@!%#k&rcDK7jDd&{h9QC=fbaV$fo$->V1T{7Jyet54h8@a zhGF5jL>$Lc0rLbn=O7|=BBkuaU@(}w_-$}-eu{(hQ`oi*&bcC|16WD$_M@j$zd7ds zfRbfduxmH0NkS626@h$a=OI7CEQ)q6q2DBU9LG30 zIhk9CiU?$PE^|N;h@uEV5FiKwH5dc|zQ#XQKZ>HI2xf!JbtT?CXvoEKss8H%f{SF?73OY?h@dx{O?10mRI61rF_}zoZ(~FC zUyKCaHy#5>i;euwi(nXrBCx0q07&aVy; zgzLIf#jRW}qtof2-|wrjD2h;$;?Xb+)uJc@GY!?U>NczSX2Eq`2qEzH`5PP`ALH5K zA%qZUwOY_LO*PXruQg$o0Amc*BvDNw48ysy+;JTBf6?ppFu79pALAIkUJs+uNXd42 zO?N6t@>f)QRmW&F!iSxmnLant1Iwb*>A-bev|24SCUamV1T;-UyWK{mQdwxL`@X-l z;J8Z&ArOXPngc|HTCKLy;PQ1;0@CDJ6$u$!CaexXX*bF0Pr(?&a5!8lxQwX-=_4`w xbT&=1P?TnC{H)ipd}ZZDDUhDD=Xq0OzW|jCkxXOfNe=)3002ovPDHLkV1j?-keC1f literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/bolted_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..b65261aea9709cf43c27ba1f88b1d1bfeb85e924 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}%APKcArY-_ z&l>VFFmNz$___TIquI0zQW=*LCjBj7VqkDs&U{si`Kw2TQ3_BwgQu&X%Q~loCIB9< B9U}k$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closed.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..b67f2ac91f5024a4f88aed57503447805cda64fd GIT binary patch literal 400 zcmV;B0dM|^P)Px#JWxzjMF0Q*Gcz+xOiWr@T0=ugOG{ByR9Y}FHd5fK+bK|ytOb#88MVq#(v zvI;IPE~N(t5Q_?C0s;mzmra}NH zaV7w`T=1gi1cl&`?9IST$bdV!04EF(KF)nJVp zQX~yw>?D-L`(V?oXR)}%0b$?K6v!dBs49|5kp`^Wwykm(>7QA~ z4Pf108u#s?lf2L>Z#`sx0tA4SGy%MZ381H~{{7A(7vs0vjZBQG_5<+E(}zX7p2q8nrSkx7|3Q|@O1TaS?83{1OQky B9nJs% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closing.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e02df93fe790fbf716ab117b9702727684346b GIT binary patch literal 2613 zcmV-53d;3~P)Px;?@2^KRCt{2T;FRO*%kh5jqG^3l2VTs+nZc!V+$FKYYQCuvJWBTVIK>940+7o zP$+%QzfhL;u?vN~l;p*R-Qb3rKrna}2&`&|O9s|5_PDVm-`buy>VtBw?_AA{?)lQ=#;j%5pRPE1T-e}5l^LIJjIYaM&@=1qM0&${^j{EJyI#&CFe2*+`J?I1qW zG+~-1Y}>}j$cSg3_wV2La2Z5cC=|qjS-~_-Fvh?+N2}Em2KDft=mjb({#-5xb0ja0 zBS+@*c~q-a0O+Ve`1HM#&*#N4xm>O3o731eyQn=qNMZuYUL*0I;^O;^7|#0Nb{4@5f!7 zpPy$!PR<8_^Ye2N1cGhbuq-PRZa+{EWd5w3zqYV~wS^UY^~3ibe&csTXTZPDfS=#Q z^nr~vDO=Nm>$+lSGR81EIx2p9_39N)PftSw5Vaf<{H}wXVObU)9N2hrYYv4%A=3cJ zSX)>D&`pAokr5b=JD1L23-f(zTvX7_34nMCs#Gf4$Hys$YT1)PSxA4Q)zY>lE_yg6 z7|Ml-I-bVkXUMq(PwSHdTCEoL+z(=hq~%a8do9V)Pj1Z-c_NM|Aji`PBpC8eX*xX& zGSB?{dDEN{QP|I0SH3c2FHn*M6=S2W? z+8+ZCK+y0{OAOHOe70?4YHA8^-@X;w#>dC;`d^n5=+D2H1uK=bdQ-0J;^N{0tE;P? zm%Gu?QEY8(;qdTKZ2L*HB2G_F0mL8nLC`G+Gk|5LQ=L;W!Td`s=^o z_V4HM+jgp<%mX^de3c3m- z?O`8;pmI>F)d0jB_CbhJ4q6#ZOXhMptgWq~P$=}>*Ld6+g=w0&_v3CV!#)UVIaps` z7p>s9s)sQ2D+imKn_{1=B7-Oi{yJ^W7%S;mK zR}R+K*L(N@T$wb*aU8*K0Nrenoe*c(2SF_d4KVlmtfV z1(QR+>l9IyUHX(_^p>zkDA^GXVhfUmtLEbc9l=guT5zjE#-;zMYz8&l@Be z6tpq~=t?~R^wsBEmKDhcU2e{~*7|^Au_ywNb^;WO#qjk3@`dN~`6w$zLRW?W-JXkI z5M+MKvaqwW6Um0{?QQ6C`vpPfFBXg9Tv;T5Ul7Fl0L!wlyu2(foK9Nmbi_xEstk2y zi2BLpa-#9&r_ZOGR~#Fna0CA91IYP72|yn;0UXB>{FDIdN9LA;0073+)Ref;{r!D$ z;b}qEL~_nOBcWI%F6-m35`*T}Nr2b^P%|ZHWk?v34t4p-;;OlIppyVb97E)lB5_xS z(0PD(&LA6-awkE*1PEG|Bp+jtA=EsIvr;6^$`BbzY)HzjoAnr<$I4eUw zeE8tm7T1O}xCfa4LwD}n5p9Hi-AZ{PL7uQtJE}S>LkOm6dR~O0+MpsTH*onPW}0S? zN^WLm2EX~oYw`V{-4?x|Mx!C#;OVVfHvvvgPS9*NVaP4oxGP1Ht_+DNjp?^sDzUkF-Ql5+)Eoa5WC_x~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/closing_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..f74a94b60a5a896e245d74d1ddae82535fa9681b GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^2|(j{f+e`w=Z41?-*O$d}fvGhL>EA h%FaFH1*%xEL3&rTdgyPxKPuu*kw8tHq&`(5fLOh4iY;(5CIxvX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/meta.json new file mode 100644 index 0000000000..aff7c8e57a --- /dev/null +++ b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/meta.json @@ -0,0 +1,198 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Hyenh", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..c56c1f88908ce40084bc41f8a1dd598c46bdf815 GIT binary patch literal 528 zcmV+r0`L8aP)Px$%1J~)R9J=WmqBXVKoo{Q7fHrLj9l!38+eP*f(u<4bO4ikc$rJ&0J%hO;clu; z@WyMewaQ{3n<9`=JH--4T{s#`i4Aol=%V^|(wou$YaRpd?}$jjGsfdFzV8!75nAic z^ZL1nNHH7^iR1W1%>ft;2K4)Vlu~G|U#oW#r4%B9F@`ivNs?r5peimRY&IK|QfGa9 zxm=z+srh`4>$;3aBdY-%43y%Y=K+xCIqUWMtmB`}W-nR^hvRo$7XZ)mY9`(QXsx+^ zd?3rRKh-;nQXC-5GHU|Bx$SJ>*B0Imc>i7Vt>U&R@;oQca{xqyZntY|&RubMkWU{m z#xyGa)W!m^w_q}v*m|wU)hpS=^*hC}tKZVn($dn>^8eEL7eh!@$GQ1=2n%11Oe#$V zlgg-Xb)0t>7k1&zkC?9?J_Gwf@>r7jTU^(*2C6fmb60dxN^$-8!2RVF;`@ycrm+8^ z-EKz^1Z=lk!Z5@bv(E)0!u{oy4JPG=rU`<8IF1R!upUf|F^Gr_CdL@zIBu-})9KV^ zjn!&p^C3Ki(=<)X#b~YR^?I+>tx<|C7K>UqwFZ(TAxRRup=kqEBT*F9-u(u3G|`9w S$zNsw0000Px;tw}^dRCt{2T;FRO*%kh5&B*q2ZMhyVvUfAo#w%nnu46FtWgkN5Lmmr#40+7o z(3d{%zfhL;v4z6El;p*RHn^cCPz;U}0#OZdL9mjrN3|^Z*7hWEAH3)K&effnJHMnY z@dv`vXlA~nbIv_8bMALN;yBI~Bv_UuZ^{IWF|Ga1&(Hb$m6a9TfAvrPd2{(LJkNt^ znyA<7a2yAo=Y^inG);J(hi0=Gi$99HUayZhj&r4JL%m+_+in2B^z<|)CnsT97V7mn z+U+*qAxj4Ufa5q|jG^1@;^gE6Dt>Z6sZ@et82J3N&-l3>ynV@S0Kjblf)j@^2GcZQ zS(Y}x4mUy91{J>nz(+ncHN^vvwF9Q6rg+c*a0iI|wr!)`ZlhExq0wkyVqyZX{&T|5 z_3Vp9IF^Ou<6|E`9bYUK`}oV{G8kj9Z99@b4!0bDC>sFu@f+kgay~gT4+p4%AoAO` zje~;&&TX0|3WWl!qRIEA^P8rL_4Re^?d@@!i^U=eg+d>HtJMk&g2*pAUxypORlQyx z0dS>jgB*lW+Ca_^asa(#BV59W^%a{3UYioG%;zgekDg-$|wV#-U6a)gjw=4^-R*Q3| z#e=sm0bF0VWE+T+etXv3Q8p0wsJL?;4tVhPr7{aehz=+e3Yl?lF5kuG@?E73#E}Pg z92-XSGD6n@K=cSoi_PV`ediW$BJ$*pvSD-(Mua&aFHqpA1PlW@HjD;-GXV0uA&$Tw zs|~pYK!-dn#5*e)QJiVZtXwIQ+F)d1L=ZWZo*;77dtG>*hrPW$*tV@aUJSg-4l03Z zxTzJ9#s(v;5osMDzQ4S@M7P^Tx7+34b-P_Oy!ZU`<>jUCJR&z8Px$W3B|1sq@oBiT zu)#=cL|O+B7-Mi82mAZ`xO3+Y-(D`4@$*iLf1W?8V^ava=Xt(9)7aRU^8AF0iwnGe z|K7JPDK{aF4I|ZR^-6pg+27wssZ`=SFDxwJ*Z+FOKOgmaycg7LHu)1QJ@M(1pPilI z^z;+}d=G-Ej-d!@W&wcfx_#eQtJTosYqc7GFF%CF<^G`!0lA|b#|GaufH8*g@o`*S zT=;hW1~*Q1mcQ~nhLaQMZ(Ik|YPAvZ2hfiSLDatL$M%3@vfx%6r)|SXwOYLr9lEr% zgg0;A@Xzb(>-c*2AN=$0e`5EY(6()ULDtD4;Ck4eo}Qvss|7kF%6Qc=QBDloHwkxI z8w>!Lo0|(PK_5SU^tGcO_gp+(S^;qFMAvosu|V_)0Q`-t*a@I;l9&L9$UZRvEXzvG zE#3(wv4NK$YRS&c&Eeg&E{H9jJ-yS~1 z>gp<) z;zG`bncvN!*X!Z03k%xk7-j;b;imeZ#)ed_2obxxyV%&+!0PHM-$uhP3YjMWt`p#A z8pmhRl}%$qW&tP^3fSD-#N^~;R;P@GGzlDFxUhj{${fY*L8E{R@vaXE}G5e^$2hrhXNvA5H=-06YjmJ#oNaN9i0Y zsGKkUNRhu%so>z?0Q2+nXfzsu^AYr;X;O&3Q3}hYqh611d%Cm&6aGmE65ooC_u_Vf=zMw7N9NBX0mL64#1GsAL5ExXtx-0p z_(xPN*f`P@QvK@gs{>JpyF2sV0wBQ zU;q1N;^f&Ei*OtV$H&LMnII8jOEyTTOKRjOJU(;r-Iq%!m&@pMIw+M&sMTsZ6DEE3 z%+AiD)oNjKax!wRf-pBXmxwdU7S#-%a(zGyRWOH+N?2E)kF$P5vw${#PS9E(&~CR; zsZ=5bxj_h1*%3#WKL6oSeh$!CA3$y5xC+7T?d`yk^61ecn5K!@+1c>*0piM-tRYHN zg7o=$I-d}>K7dBLsQb}9@4b8Xlo>1QhKj|adVN6N&KFg3LHhhbLB)Un`@=xVOj^hj zToeQVFsT0J82}L^(z0zE#bOc7W)tV<=b-^eDi{t^?Af-Bhe!46DaZd_06(1$)cvGI zm~JSuc61n`RB~ZRQV!zC1;vpdOK!3N-JAew>CQj`0NglU){N2viLMM#7rKf)DX?)g zLfQz^4aE*XR5^$%)FmmPt_)BYx^ltSuV3@`SvoxoB2TOUgq4G&Dq&I(L@Ds%AZpnE zm|&z)1AT2T>MmxDo-m$)#J2y#_OGVFt#|0%(s ze>xGdpH?|YqY}QwEpBm(TioJPgK~|NjJSOm-Qyg`>6_U3)L=M{bCq;uh`cSyN|8Kg zp#C3VRIAlgD??<&T`BUZ!$`X_L`H&@BFa&c)ns^<=gR{|nq^5rh_hUYCW4Zdy&&k8 z!(j)8&k4&bMO2gW;>r;DJ6b8yXfyz*SBfkyF8bQp-ENnczBFYo2s-6(*w>&;CuEYW z6rq5nDSJWCDTjk9Q$akr%!tKVDMBMJZP^P#R5^SsXpqvDy&!~@!(0LoXQc=QAW7K^ zLY#7#b=eC-P&qVCPEK-@V}yY;`Qzi`x%`{7sB*ZovjfH$zQGtQ%fkKd4>KuyL6FPg z*47pnW7i`M#HR002ov JPDHLkV1jVT-qZj9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/opening_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..05add9c5dc5c58f6126e5dca3c6ac04a02ecddf5 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^2|(JE|YjK$DpFBGv%5_Lj1XfmjCC;1NAU4H0W=9 z$vN|~a^6e9WGxei1#N%WBlZa5yUM|*T l3KfxUf8V#jtH+sPK{=!AGxbvcxO^3mB2QO8mvv4FO#sinKUn|( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_closing.png new file mode 100644 index 0000000000000000000000000000000000000000..c53b5a692ba4c3cd0f814351fc4b8b8a22df2471 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Nn{1`)dPG&Tpb-9OG``5b#?Rd@>XqN*EeLbl#??yHnwJAiHL~sFxIcQoJQWe!>5d0E6udr8b}hXMsm#F#`kNVGw3Kp1&dmXgQCki(^QH``c-^`I;33 zTo@O|o%&y&FYf$C$bH$xUkRI*^XJ4o=Da+;@MoHjgCXNl77^h95aa1Wrsv$Rx4#$s z5%3{(kGsJUf#8~{AD2llnGhs(x*}>p(!IxvCQJLg-eG6a*j0Jn;$;3FwE#oqXQ}5x z6g01JE=X!S^S)9u-T#5JtbkTpkHo2q!aQGFR?Og!*kAw8KESYir^1b-cSWurgw+q};?w{#7%r6ADZH5G)cE%HIre+6p$wKKBA04!|GdEKp_%e~+h;~b?be+8K!piQ zCxFzk>=C(iX@!-%$b}#e@8q@Dn8a3y8|1{V-ddpWV_yNo?R*)|f5$GfTGli4Xi3B; TE`2Ek3@ipuS3j3^P6!lvI6;>1s;*b3=DinK$vl=HlH+5(AU$&F(ktM?fH$o2Mjn|0w>kpQC#{hz~^Af zN?YEk%8F?RH2-Dyt@h&ps%3bvW%Z_`bBb4I-FtU$*W5EX_Q`KnyH ZJ8OLR@cMc@^1cI7?CI*~vd$@?2>>n0KL7v# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_opening.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/panel_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..02b488b9c921c2f2794c7111b8458de2894eb889 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Nn{1`)dPG&Tpb-9OG``5b#?Rd@>XqN*EeLbl#??yHnwJAiHL~sFxIcQoJQWe!>5d0E6udr8b}hXMsm#F#`kNVGw3Kp1&dmDEQOU#W5tp{q6MIT!$3| zSc@;JE&Kidel)L>@;j@ATl7=a1(f9G^ya5el7Gx}gtdcPKwLr3;a`x!+1C7-Q;VN1 zHMkzi&v$`k${nd`0*4o`tIB9FTkzL0CaEVn_Ui?PTn9m)#8bbkq3oRMI6ONC&V^n)h|iKle1znL2#3)3dE%zRAzwFeh50as+OBC5{msANRida(exbsGRqdf0?j+UCWLj0V vWq#!8(;`p$m_qqiKRD^o0HhXloZx=9P$IKXbY3Sg5EwjN{an^LB{Ts57%ZQ{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks.png new file mode 100644 index 0000000000000000000000000000000000000000..dd67e88a315f674a061fb3b27660b8c761c88f38 GIT binary patch literal 697 zcmV;q0!ICbP)7E0M--(oM3v-T6o|50rvB z?(X|$_9K~q!b>Jme`5^XKVF&j%`2QtMsN-@c!MQ;uYX{&xPXV-MV4h*a7^*H)mTo% z^duKBlw8QrI7#Az6a!+!k42gRM*{jVXw(2^)BtAG0A@rO5W6r+TTo*dR0c>itn&u= ziYhf*#29dhKzXbye)sb`x`T#9jF|@skRQx^J~1)&r}u;k?=m8#VH_qLszE1c7I|*U z-vi17+kNaSpCz%9yQ#rS&sN2x0`#dRVZ$Zo3 z(YozxD(tDJ*Nd^#9ngM11*`#hZL|qqUX-aA#5S}G^!n=WLLU@GQ4~c{6dSK|xP5Tx z!-H@vnhtn%y49-Lc3NyR!WG{&^FjpmIbAy+o5nPrx)V}}E%fz`bB+BtcI@^)8^rTf zBx((Ky3EXU1aLM2IGxVm^KA+58-UdY;QHA(FXNaPN!aD?zV8}<6&DioA6qwm%&S`B zG(?rf)v;@BC^IYu=$f%ZGhhqXw5SF!qXsa;V!%*uXSl{qZh&O*G5ePMUQntINQ83i z$upoRb}H)fv5TKDu*ZP$-hvmY3!Atq6ENBh(WYFFM67|7l05p#?E1nmayZKasmvEs z4%uF#@2=U$hCc&#<3^>qaoRUjD5t(Q@!@5>eLn%YPa&y@Wk6F&Jf;Amr=S&p`TF~H zKQmyzZBbK@-3j_NfaCqFrZteLVgLD`ViBgsl+FQ!832*%0DhkaTq4i015y-4Q4~c{ f6h%=KHvsSpwHV1KmpgiI00000NkvXXu0mjf++aJ5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_broken.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..c41fa18ca1a5201b580b0194415c120f2980ad94 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sDEfH31!Z9ZwB-~~??$B>G+x3?U*4jBlrUYO^z=YQuNR}pT- zBWy>`xct87wfm=W{jN74OBfgq^lLtiinBjCrM4q_XUp^LGankKO#7F2v&Y%y%Ff{Q z3~%|r^L0N9BrdH_`lfiRRhipD%PysF@10#wUYOUjy0=@j2J7*HO#%`BwVxio(s#yR z& dN}IerjGt7Q1>7HnEC$-e;OXk;vd$@?2>`@EK-2&L literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/sparks_open.png new file mode 100644 index 0000000000000000000000000000000000000000..40d559f7a3312504e49f41ccd899850ca59b3980 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Nn{1`IRkt`T>t-f`0?Kk$m_OstpifbB|(0{|Nk>wKgA1F%fMOS5n0T@z;_sg z8IR|$NC66VdAc};M7Y15X2^BGK;UrE&;N_7IVHPIx5Rc$QDkj)wW>VRAK0MbAfmt} zz}ms&!nlax=iUc9=SyjmInTllg8=T*qkh)`CG2`A1pH*)B{#SEUB%$(>gTe~ HDWM4fZCPKD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/welded.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hatch_syndicate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..f19a0b8caf237d0020b9a06d1f0ab1160dfd9481 GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STWo2beO-&;rB1}w7+}zx3Y;00eQUU`5!^6XYO6uNlp9E4|B|(0{ z|6zb((;1!fKvB*DkH}&M2EM}}%y>M1MG8=Gm8Xkih=u>u$+!6qEATisw%q>z|AT~S z#*JA4e*>w)C zOnbittY~ET?=N&O;{eMY+ugILMztM{deeAm#Zn2Uj7Gq&|<86I&^TH0sUpK5CaoHUIuKe=C1Rc%;dhz8GZfhTieDRlg Y;SMFcnyprxKvy$(y85}Sb4q9e0EDN1yZ`_I literal 0 HcmV?d00001 From b9254d9ebf79ff28e27f1c54205e89fece209ad4 Mon Sep 17 00:00:00 2001 From: opl- Date: Sun, 12 Oct 2025 21:49:41 +0200 Subject: [PATCH 213/216] Replace all usages of /bin/bash shebang with /usr/bin/env (#40756) Replace all usages of /bin/bash with /usr/bin/env /usr/bin/env is nearly guaranteed to always exist at that location, which can't be said about /bin/bash and /bin/sh. Co-authored-by: opl <4833621+opl@users.noreply.github.com> --- BuildChecker/git_helper.py | 2 +- BuildChecker/hooks/post-checkout | 2 +- BuildChecker/hooks/post-merge | 2 +- Content.Tools/test/run.sh | 2 +- Tools/mapping-merge-driver.sh | 2 +- runclient-Tools.sh | 2 +- runclient.sh | 2 +- runserver-Tools.sh | 2 +- runserver.sh | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/BuildChecker/git_helper.py b/BuildChecker/git_helper.py index 66d2463669..bd6603bd34 100644 --- a/BuildChecker/git_helper.py +++ b/BuildChecker/git_helper.py @@ -13,7 +13,7 @@ from typing import List SOLUTION_PATH = Path("..") / "SpaceStation14.sln" # If this doesn't match the saved version we overwrite them all. -CURRENT_HOOKS_VERSION = "3" +CURRENT_HOOKS_VERSION = "4" QUIET = len(sys.argv) == 2 and sys.argv[1] == "--quiet" diff --git a/BuildChecker/hooks/post-checkout b/BuildChecker/hooks/post-checkout index ee4309de1d..1b91112ff0 100755 --- a/BuildChecker/hooks/post-checkout +++ b/BuildChecker/hooks/post-checkout @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash gitroot=$(git rev-parse --show-toplevel) diff --git a/BuildChecker/hooks/post-merge b/BuildChecker/hooks/post-merge index 5cf3d91120..864a9cff50 100755 --- a/BuildChecker/hooks/post-merge +++ b/BuildChecker/hooks/post-merge @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Just call post-checkout since it does the same thing. gitroot=$(git rev-parse --git-path hooks) diff --git a/Content.Tools/test/run.sh b/Content.Tools/test/run.sh index 7809b4dc92..876325ba56 100755 --- a/Content.Tools/test/run.sh +++ b/Content.Tools/test/run.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env bash cp 0A.yml out.yml ../bin/Debug/net5.0/Content.Tools out.yml 0B.yml 0C.yml diff --git a/Tools/mapping-merge-driver.sh b/Tools/mapping-merge-driver.sh index 0421278f31..fe114ac9cd 100755 --- a/Tools/mapping-merge-driver.sh +++ b/Tools/mapping-merge-driver.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # Add this to .git/config: # [merge "mapping-merge-driver"] diff --git a/runclient-Tools.sh b/runclient-Tools.sh index cc0c958b86..b564c35438 100755 --- a/runclient-Tools.sh +++ b/runclient-Tools.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env bash dotnet run --project Content.Client --configuration Tools read -p "Press enter to continue" diff --git a/runclient.sh b/runclient.sh index 9417cc9218..5df80bb08e 100755 --- a/runclient.sh +++ b/runclient.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env bash dotnet run --project Content.Client read -p "Press enter to continue" diff --git a/runserver-Tools.sh b/runserver-Tools.sh index 6280dc4279..3a786920a7 100755 --- a/runserver-Tools.sh +++ b/runserver-Tools.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env bash dotnet run --project Content.Server --configuration Tools read -p "Press enter to continue" diff --git a/runserver.sh b/runserver.sh index 33258e3190..33638d6bb5 100755 --- a/runserver.sh +++ b/runserver.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env bash dotnet run --project Content.Server read -p "Press enter to continue" From 4059c29ebc760b9200db768d313b5a41f511b915 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Sun, 12 Oct 2025 14:23:42 -0700 Subject: [PATCH 214/216] Entity effects ECS refactor (#40580) * LOCKED THE FUCK IN * Forgot this little fella * Crying * All entity effects ported, needs cleanup still * Commit * HEHEHEHAW * Shelve for now * fixe * Big * First big chunk of changes * Big if true * Commit * IT BUILDS!!! * Fix LINTER fails * Cleanup * Scale working, cut down on some evil code * Delete old Entity Effects * Accidentally breaking shit by fixing bugs * Fix a bunch of effects not working * Fix reagent thresholds * Update damage * Wait don't change the gas metabolisms A * Cleanup * more fixes * Eh * Misc fixes and jank * Remove two things, add bullshit, change condition to inverted * Remove unused "Shared" system structure * Namespace fix * merge conflicts/cleanup * More fixes * Guidebook text begins * Shelve * Push * More shit to push * Fix * Fix merg conflicts * BLOOD FOR THE BLOOD GOD!!! * Mild cleanup and lists * Fix localization and comments * Shuffle localization around a bit. * All done? * Nearly everything * Is this the end? * Whoops forgot to remove that TODO * Get rid of some warnings for good measure... * It's done * Should make those virtual in case we want to override them tbqh... * Update Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeeds.cs Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com> * Fix test fails real * Add to codeowners * Documentation to everything * Forgot to push whoops * Standardize Condition names * Fix up metabolism a little as a treat * review * add IsServer checks --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> Co-authored-by: Pok <113675512+Pok27@users.noreply.github.com> --- .github/CODEOWNERS | 1 + .../Temperature/Systems/TemperatureSystem.cs | 8 + .../Atmos/EntitySystems/FlammableSystem.cs | 2 +- Content.Server/Atmos/Rotting/RottingSystem.cs | 2 +- .../Body/Components/MetabolizerComponent.cs | 4 +- .../Body/Systems/MetabolizerSystem.cs | 450 ++++---- .../Body/Systems/RespiratorSystem.cs | 15 +- .../Body/Systems/ThermalRegulatorSystem.cs | 2 +- Content.Server/Botany/SeedPrototype.cs | 11 +- .../Botany/Systems/BotanySystem.Produce.cs | 7 +- .../Botany/Systems/MutationSystem.cs | 7 +- .../Botany/Systems/PlantHolderSystem.cs | 5 +- .../Commands/DumpReagentGuideText.cs | 2 +- .../ConstructionSystem.Interactions.cs | 1 + .../BreathingEntityConditionSystem.cs | 19 + .../MetabolizerTypesEntityConditionSystem.cs | 21 + .../Atmos/CreateGasEntityEffectSystem.cs | 22 + .../Atmos/FlammableEntityEffectSystem.cs | 25 + .../Effects/Atmos/IgniteEntityEffectSystem.cs | 23 + .../Body/OxygenateEntityEffectsSystem.cs | 20 + .../PlantAdjustHealthEntityEffectSystem.cs | 20 + ...ntAdjustMutationLevelEntityEffectSystem.cs | 20 + ...lantAdjustMutationModEntityEffectSystem.cs | 16 + .../PlantAdjustNutritionEntityEffectSystem.cs | 16 + .../PlantAdjustPestsEntityEffectSystem.cs | 16 + .../PlantAdjustPotencyEntityEffectSystem.cs | 19 + .../PlantAdjustToxinsEntityEffectSystem.cs | 16 + .../PlantAdjustWaterEntityEffectSystem.cs | 16 + .../PlantAdjustWeedsEntityEffectSystem.cs | 16 + .../PlantAffectGrowthEntityEffectSystem.cs | 19 + .../PlantChangeStatEntityEffectSystem.cs | 122 +++ .../PlantCryoxadoneEntityEffectSystem.cs | 30 + .../PlantDestroySeedsEntityEffectSystem.cs | 31 + .../PlantDiethylamineEntityEffectSystem.cs | 31 + .../PlantPhalanximineEntityEffectSystem.cs | 16 + .../PlantRestoreSeedsEntityEffectSystem.cs | 26 + .../RobustHarvestEntityEffectSystem.cs | 41 + .../PlantMutateChemicalsEntityEffectSystem.cs | 43 + .../PlantMutateGasesEntityEffectSystem.cs | 53 + .../PlantMutateHarvestEntityEffectSystem.cs | 25 + ...ntMutateSpeciesChangeEntityEffectSystem.cs | 31 + .../Effects/EmoteEntityEffectSystem.cs | 22 + .../Effects/MakeSentientEntityEffectSystem.cs | 42 + .../Effects/PolymorphEntityEffectSystem.cs | 19 + .../AreaReactionEntityEffectSystem.cs | 51 + .../Transform/ExplosionEntityEffectSystem.cs | 28 + .../EntityEffects/EntityEffectSystem.cs | 976 ------------------ .../Fluids/EntitySystems/SmokeSystem.cs | 7 +- .../GuideGenerator/ChemistryJsonGenerator.cs | 3 +- Content.Server/GuideGenerator/ReagentEntry.cs | 2 +- .../Kitchen/EntitySystems/MicrowaveSystem.cs | 1 + Content.Server/Medical/CryoPodSystem.cs | 2 +- .../Medical/HealthAnalyzerSystem.cs | 2 +- .../NPC/Systems/NPCUtilitySystem.cs | 2 +- .../Temperature/Systems/TemperatureSystem.cs | 19 +- .../Tiles/TileEntityEffectComponent.cs | 2 +- .../Tiles/TileEntityEffectSystem.cs | 10 +- .../Zombies/ZombieSystem.Transform.cs | 2 +- Content.Shared.Database/LogType.cs | 4 +- .../Body/Components/LungComponent.cs | 2 +- Content.Shared/Body/Systems/LungSystem.cs | 12 +- .../Body/Systems/SharedBloodstreamSystem.cs | 7 +- .../SharedSolutionContainerSystem.cs | 21 + .../Reaction/ChemicalReactionSystem.cs | 18 +- .../Chemistry/Reaction/ReactionPrototype.cs | 2 +- .../Chemistry/Reaction/ReactiveComponent.cs | 2 +- Content.Shared/Chemistry/ReactiveSystem.cs | 100 +- .../Chemistry/Reagent/ReagentPrototype.cs | 73 +- .../Body/BreathingEntityCondition.cs | 10 + .../Body/HungerEntityConditionSystem.cs | 33 + .../Body/InternalsEntityConditionSystem.cs | 23 + .../Body/MetabolizerTypeEntityCondition.cs | 31 + .../Body/MobStateEntityConditionSystem.cs | 28 + .../Conditions/JobEntityConditionSystem.cs | 59 ++ .../ReagentEntityConditionSystem.cs | 44 + .../Tags/HasAllTagsEntityConditionSystem.cs | 43 + .../Tags/HasAnyTagEntityConditionSystem.cs | 43 + .../Tags/HasTagEntityConditionSystem.cs | 28 + .../TemperatureEntityConditionSystem.cs | 52 + .../TemplateEntityConditionSystem.cs | 20 + .../TotalDamageEntityConditionSystem.cs | 33 + .../SharedEntityConditionsSystem.cs | 152 +++ .../EffectConditions/BodyTemperature.cs | 23 - .../EffectConditions/BreathingCondition.cs | 21 - .../EffectConditions/HasTagCondition.cs | 28 - .../EffectConditions/InternalsCondition.cs | 30 - .../EffectConditions/JobCondition.cs | 52 - .../EffectConditions/MobStateCondition.cs | 28 - .../EffectConditions/OrganType.cs | 28 - .../EffectConditions/ReagentThreshold.cs | 56 - .../EffectConditions/SolutionTemperature.cs | 36 - .../EffectConditions/TotalDamage.cs | 33 - .../EffectConditions/TotalHunger.cs | 33 - .../Effects/AddToSolutionReaction.cs | 35 - .../EntityEffects/Effects/AdjustAlert.cs | 58 -- .../Effects/AdjustAlertEntityEffectSystem.cs | 65 ++ .../EntityEffects/Effects/AdjustReagent.cs | 90 -- .../Effects/AdjustTemperature.cs | 15 - .../AdjustTemperatureEntityEffectsSystem.cs | 30 + .../Effects/AreaReactionEffect.cs | 43 - .../Effects/ArtifactDurabilityRestore.cs | 36 - .../Effects/ArtifactEntityEffectsSystem.cs | 72 ++ .../EntityEffects/Effects/ArtifactUnlock.cs | 44 - .../Effects/Atmos/CreateGasEntityEffect.cs | 35 + .../Atmos/ExtinguishEntityEffectSystem.cs | 36 + .../Effects/Atmos/FlammableEntityEffect.cs | 28 + .../Effects/Atmos/IgniteEntityEffect.cs | 18 + .../CleanBloodstreamEntityEffectSystem.cs | 43 + .../Body/EyeDamageEntityEffectSystem.cs | 32 + .../Body/ModifyBleedEntityEffectSystem.cs | 32 + .../ModifyBloodLevelEntityEffectSystem.cs | 34 + .../Body/ModifyLungGasEntityEffectSystem.cs | 33 + .../Effects/Body/OxygenateEntityEffect.cs | 14 + .../Body/ReduceRottingEntityEffectSystem.cs | 36 + .../Effects/Body/SatiateEntityEffectSystem.cs | 63 ++ .../Effects/Body/VomitEntityEffectSystem.cs | 37 + .../BasePlantAdjustAttributeEntityEffect.cs | 37 + .../PlantAttributes/PlantAdjustHealth.cs | 7 + .../PlantAdjustMutationLevel.cs | 7 + .../PlantAttributes/PlantAdjustMutationMod.cs | 7 + .../PlantAttributes/PlantAdjustNutrition.cs | 6 + .../PlantAttributes}/PlantAdjustPests.cs | 4 +- .../PlantAttributes/PlantAdjustPotency.cs | 9 + .../PlantAttributes}/PlantAdjustToxins.cs | 5 +- .../PlantAttributes/PlantAdjustWater.cs | 7 + .../PlantAttributes}/PlantAdjustWeeds.cs | 4 +- .../PlantAttributes/PlantAffectGrowth.cs | 7 + .../Botany/PlantAttributes/PlantChangeStat.cs | 21 + .../Botany/PlantAttributes/PlantCryoxadone.cs | 9 + .../PlantAttributes/PlantDestroySeeds.cs | 12 + .../PlantAttributes/PlantDiethylamine.cs | 11 + .../PlantAttributes/PlantPhalanximine.cs | 10 + .../PlantAttributes/PlantRestoreSeeds.cs | 12 + .../Botany/PlantAttributes/RobustHarvest.cs | 22 + .../PlantMutateChemicalsEntityEffect.cs | 16 + .../Botany/PlantMutateGasesEntityEffect.cs | 22 + .../Botany/PlantMutateHarvestEntityEffect.cs | 6 + .../PlantMutateSpeciesChangeEntityEffect.cs | 6 + .../Effects/CauseZombieInfection.cs | 9 - .../Effects/ChemCleanBloodstream.cs | 15 - .../Effects/ChemHealEyeDamage.cs | 28 - .../EntityEffects/Effects/ChemVomit.cs | 19 - .../Effects/CreateEntityReactionEffect.cs | 26 - .../EntityEffects/Effects/CreateGas.cs | 32 - .../Effects/CureZombieInfection.cs | 18 - Content.Shared/EntityEffects/Effects/Drunk.cs | 27 - .../EntityEffects/Effects/Electrocute.cs | 37 - Content.Shared/EntityEffects/Effects/Emote.cs | 44 - .../Effects/EmoteEntityEffect.cs | 40 + .../Effects/EmpReactionEffect.cs | 34 - .../BaseSpawnEntityEntityEffect.cs | 36 + .../SpawnEntityEntityEffectSystem.cs | 37 + ...pawnEntityInContainerEntityEffectSystem.cs | 51 + ...tityInContainerOrDropEntityEffectSystem.cs | 49 + ...pawnEntityInInventoryEntityEffectSystem.cs | 35 + .../EntityEffects/Effects/EvenHealthChange.cs | 139 --- .../EvenHealthChangeEntityEffectSystem.cs | 114 ++ .../Effects/ExtinguishReaction.cs | 32 - .../Effects/FlammableReaction.cs | 21 - .../Effects/FlashReactionEffect.cs | 48 - Content.Shared/EntityEffects/Effects/Glow.cs | 48 - .../Effects/GlowEntityEffectSystem.cs | 55 + .../EntityEffects/Effects/HealthChange.cs | 126 --- .../Effects/HealthChangeEntityEffectSystem.cs | 91 ++ .../EntityEffects/Effects/Ignite.cs | 18 - .../EntityEffects/Effects/MakeSentient.cs | 10 - .../Effects/MakeSentientEntityEffect.cs | 22 + .../Effects/ModifyBleedAmount.cs | 16 - .../EntityEffects/Effects/ModifyBloodLevel.cs | 17 - .../EntityEffects/Effects/ModifyLungGas.cs | 14 - .../Effects/MovespeedModifier.cs | 78 -- .../EntityEffects/Effects/Oxygenate.cs | 13 - .../EntityEffects/Effects/Paralyze.cs | 37 - .../PlantMetabolism/PlantAdjustAttribute.cs | 39 - .../PlantMetabolism/PlantAdjustHealth.cs | 7 - .../PlantAdjustMutationLevel.cs | 6 - .../PlantMetabolism/PlantAdjustMutationMod.cs | 6 - .../PlantMetabolism/PlantAdjustNutrition.cs | 6 - .../PlantMetabolism/PlantAdjustPotency.cs | 12 - .../PlantMetabolism/PlantAdjustWater.cs | 7 - .../PlantMetabolism/PlantAffectGrowth.cs | 7 - .../PlantMetabolism/PlantChangeStat.cs | 24 - .../PlantMetabolism/PlantCryoxadone.cs | 8 - .../PlantMetabolism/PlantDestroySeeds.cs | 13 - .../PlantMetabolism/PlantDiethylamine.cs | 9 - .../PlantMetabolism/PlantPhalanximine.cs | 8 - .../PlantMetabolism/PlantRestoreSeeds.cs | 12 - .../Effects/PlantMetabolism/RobustHarvest.cs | 18 - .../Effects/PlantMutateChemicals.cs | 16 - .../EntityEffects/Effects/PlantMutateGases.cs | 39 - .../Effects/PlantMutateHarvest.cs | 14 - .../Effects/PlantSpeciesChange.cs | 14 - .../EntityEffects/Effects/Polymorph.cs | 19 - .../Effects/PolymorphEntityEffect.cs | 19 + .../EntityEffects/Effects/PopupMessage.cs | 54 - .../EntityEffects/Effects/ReduceRotting.cs | 32 - .../EntityEffects/Effects/ResetNarcolepsy.cs | 19 - .../ResetNarcolepsyEntityEffectSystem.cs | 34 + .../EntityEffects/Effects/SatiateHunger.cs | 40 - .../EntityEffects/Effects/SatiateThirst.cs | 31 - .../EntityEffects/Effects/Slipify.cs | 37 - .../Effects/SlipifyEntityEffectSystem.cs | 44 + .../AddReagentToSolutionEntityEffectSystem.cs | 59 ++ .../AdjustReagentEntityEffectSystem.cs | 52 + ...AdjustReagentsByGroupEntityEffectSystem.cs | 52 + .../Solution/AreaReactionEntityEffect.cs | 39 + .../SolutionTemperatureEntityEffectsSystem.cs | 145 +++ .../Effects/SolutionTemperatureEffects.cs | 143 --- .../BaseStatusEffectEntityEffect.cs | 35 + .../StatusEffects/DrunkEntityEffectSystem.cs | 34 + .../ElectrocuteEntityEffectSystem.cs | 51 + .../StatusEffects/GenericStatusEffect.cs | 76 -- .../GenericStatusEffectEntityEffectSystem.cs | 64 ++ .../Effects/StatusEffects/Jitter.cs | 41 - .../StatusEffects/JitterEntityEffectSystem.cs | 45 + .../Effects/StatusEffects/ModifyKnockdown.cs | 99 -- .../ModifyKnockdownEntityEffectSystem.cs | 72 ++ .../ModifyParalysisEntityEffectSystem.cs | 51 + .../StatusEffects/ModifyStatusEffect.cs | 78 -- .../ModifyStatusEffectEntityEffectSystem.cs | 66 ++ ...MovementSpeedModifierEntityEffectSystem.cs | 92 ++ .../Effects/TemplateEntityEffectSystem.cs | 21 + .../Transform/EmpEntityEffectSystem.cs | 58 ++ .../ExplosionEntityEffect.cs} | 19 +- .../Transform/FlashEntityEffectSystem.cs | 81 ++ .../PopupMessageEntityEffectSystem.cs | 64 ++ .../Effects/WashCreamPieEntityEffectSystem.cs | 27 + .../Effects/WashCreamPieReaction.cs | 19 - .../EntityEffects/Effects/WearableReaction.cs | 47 - .../Effects/ZombieEntityEffectsSystem.cs | 67 ++ Content.Shared/EntityEffects/EntityEffect.cs | 145 --- .../EntityEffects/EntityEffectCondition.cs | 29 - .../EntityEffects/EventEntityEffect.cs | 12 - .../EventEntityEffectCondition.cs | 14 - .../SharedEntityEffectsSystem.cs | 251 +++++ .../Systems/MovementModStatusSystem.cs | 1 + .../EntitySystems/IngestionSystem.API.cs | 9 +- .../StatusEffectNew/StatusEffectSystem.API.cs | 18 + .../Stunnable/SharedStunSystem.Knockdown.cs | 9 +- Content.Shared/Stunnable/SharedStunSystem.cs | 7 +- .../Components/TemperatureComponent.cs | 2 +- .../Systems/SharedTemperatureSystem.cs | 19 +- .../Zombies/IncurableZombieComponent.cs | 3 +- .../Locale/en-US/guidebook/chemistry/core.ftl | 5 +- .../guidebook/chemistry/statuseffects.ftl | 16 - .../conditions.ftl | 0 .../{chemistry => entity-effects}/effects.ftl | 166 +-- .../healthchange.ftl | 0 .../entity-effects/statuseffects.ftl | 16 + .../Prototypes/Entities/Mobs/NPCs/animals.yml | 2 +- .../Entities/Mobs/NPCs/miscellaneous.yml | 20 +- .../Prototypes/Entities/Mobs/NPCs/slimes.yml | 6 +- .../Prototypes/Entities/Mobs/NPCs/space.yml | 2 +- .../Entities/Mobs/Species/arachnid.yml | 6 +- .../Prototypes/Entities/Mobs/Species/base.yml | 2 +- .../Entities/Mobs/Species/diona.yml | 14 +- .../Entities/Mobs/Species/skeleton.yml | 8 +- .../Entities/Mobs/Species/slime.yml | 6 +- .../Entities/Objects/Fun/plushies.yml | 3 +- .../Entities/Objects/Misc/kudzu.yml | 2 +- .../Objects/Specific/rehydrateable.yml | 6 +- .../Entities/StatusEffects/movement.yml | 21 + .../Prototypes/Entities/Structures/soil.yml | 3 +- Resources/Prototypes/Entities/Tiles/lava.yml | 2 +- .../Entities/Tiles/liquid_plasma.yml | 2 +- Resources/Prototypes/Entities/Tiles/water.yml | 4 +- .../Hydroponics/randomMutations.yml | 6 +- .../Reagents/Consumable/Drink/alcohol.yml | 70 +- .../Reagents/Consumable/Drink/base_drink.yml | 4 +- .../Reagents/Consumable/Drink/drinks.yml | 7 +- .../Reagents/Consumable/Drink/soda.yml | 6 +- .../Reagents/Consumable/Food/food.yml | 4 +- .../Reagents/Consumable/Food/ingredients.yml | 19 +- Resources/Prototypes/Reagents/biological.yml | 14 +- Resources/Prototypes/Reagents/botany.yml | 81 +- Resources/Prototypes/Reagents/chemicals.yml | 16 +- Resources/Prototypes/Reagents/cleaning.yml | 14 +- Resources/Prototypes/Reagents/elements.yml | 22 +- Resources/Prototypes/Reagents/fun.yml | 93 +- Resources/Prototypes/Reagents/gases.yml | 282 ++--- Resources/Prototypes/Reagents/medicine.yml | 224 ++-- Resources/Prototypes/Reagents/narcotics.yml | 72 +- Resources/Prototypes/Reagents/pyrotechnic.yml | 26 +- Resources/Prototypes/Reagents/toxins.yml | 127 ++- .../Recipes/Reactions/chemicals.yml | 8 +- .../Prototypes/Recipes/Reactions/food.yml | 26 +- .../Prototypes/Recipes/Reactions/fun.yml | 14 +- .../Recipes/Reactions/pyrotechnic.yml | 4 +- .../Prototypes/Recipes/Reactions/soap.yml | 12 +- 289 files changed, 5635 insertions(+), 4918 deletions(-) create mode 100644 Content.Client/Temperature/Systems/TemperatureSystem.cs create mode 100644 Content.Server/EntityConditions/Conditions/BreathingEntityConditionSystem.cs create mode 100644 Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Atmos/CreateGasEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Atmos/FlammableEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Atmos/IgniteEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Body/OxygenateEntityEffectsSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealthEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevelEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationModEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutritionEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPestsEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotencyEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxinsEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWaterEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeedsEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowthEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStatEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadoneEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeedsEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamineEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximineEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeedsEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvestEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/EmoteEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/MakeSentientEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/PolymorphEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Solution/AreaReactionEntityEffectSystem.cs create mode 100644 Content.Server/EntityEffects/Effects/Transform/ExplosionEntityEffectSystem.cs delete mode 100644 Content.Server/EntityEffects/EntityEffectSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Body/BreathingEntityCondition.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Body/HungerEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Body/InternalsEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Body/MobStateEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/JobEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/ReagentEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Tags/HasAllTagsEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Tags/HasAnyTagEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/Tags/HasTagEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/TemperatureEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/TemplateEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/Conditions/TotalDamageEntityConditionSystem.cs create mode 100644 Content.Shared/EntityConditions/SharedEntityConditionsSystem.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/BodyTemperature.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/BreathingCondition.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/HasTagCondition.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/InternalsCondition.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/JobCondition.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/MobStateCondition.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/OrganType.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/ReagentThreshold.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/SolutionTemperature.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/TotalDamage.cs delete mode 100644 Content.Shared/EntityEffects/EffectConditions/TotalHunger.cs delete mode 100644 Content.Shared/EntityEffects/Effects/AddToSolutionReaction.cs delete mode 100644 Content.Shared/EntityEffects/Effects/AdjustAlert.cs create mode 100644 Content.Shared/EntityEffects/Effects/AdjustAlertEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/AdjustReagent.cs delete mode 100644 Content.Shared/EntityEffects/Effects/AdjustTemperature.cs create mode 100644 Content.Shared/EntityEffects/Effects/AdjustTemperatureEntityEffectsSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/AreaReactionEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ArtifactDurabilityRestore.cs create mode 100644 Content.Shared/EntityEffects/Effects/ArtifactEntityEffectsSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ArtifactUnlock.cs create mode 100644 Content.Shared/EntityEffects/Effects/Atmos/CreateGasEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Atmos/ExtinguishEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Atmos/FlammableEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Atmos/IgniteEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/CleanBloodstreamEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/EyeDamageEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/ModifyBleedEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/ModifyBloodLevelEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/ModifyLungGasEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/OxygenateEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/ReduceRottingEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/SatiateEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Body/VomitEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/BasePlantAdjustAttributeEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealth.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevel.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationMod.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutrition.cs rename Content.Shared/EntityEffects/Effects/{PlantMetabolism => Botany/PlantAttributes}/PlantAdjustPests.cs (53%) create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotency.cs rename Content.Shared/EntityEffects/Effects/{PlantMetabolism => Botany/PlantAttributes}/PlantAdjustToxins.cs (53%) create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWater.cs rename Content.Shared/EntityEffects/Effects/{PlantMetabolism => Botany/PlantAttributes}/PlantAdjustWeeds.cs (53%) create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowth.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStat.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadone.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeeds.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamine.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximine.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeeds.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvest.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/CauseZombieInfection.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ChemCleanBloodstream.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ChemHealEyeDamage.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ChemVomit.cs delete mode 100644 Content.Shared/EntityEffects/Effects/CreateEntityReactionEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/CreateGas.cs delete mode 100644 Content.Shared/EntityEffects/Effects/CureZombieInfection.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Drunk.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Electrocute.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Emote.cs create mode 100644 Content.Shared/EntityEffects/Effects/EmoteEntityEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/EntitySpawning/BaseSpawnEntityEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerOrDropEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInInventoryEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/EvenHealthChange.cs create mode 100644 Content.Shared/EntityEffects/Effects/EvenHealthChangeEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ExtinguishReaction.cs delete mode 100644 Content.Shared/EntityEffects/Effects/FlammableReaction.cs delete mode 100644 Content.Shared/EntityEffects/Effects/FlashReactionEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Glow.cs create mode 100644 Content.Shared/EntityEffects/Effects/GlowEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/HealthChange.cs create mode 100644 Content.Shared/EntityEffects/Effects/HealthChangeEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Ignite.cs delete mode 100644 Content.Shared/EntityEffects/Effects/MakeSentient.cs create mode 100644 Content.Shared/EntityEffects/Effects/MakeSentientEntityEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ModifyBleedAmount.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ModifyBloodLevel.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ModifyLungGas.cs delete mode 100644 Content.Shared/EntityEffects/Effects/MovespeedModifier.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Oxygenate.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Paralyze.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustAttribute.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustHealth.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationLevel.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationMod.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustNutrition.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWater.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAffectGrowth.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantChangeStat.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantCryoxadone.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDiethylamine.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantPhalanximine.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMetabolism/RobustHarvest.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMutateChemicals.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMutateGases.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantMutateHarvest.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PlantSpeciesChange.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Polymorph.cs create mode 100644 Content.Shared/EntityEffects/Effects/PolymorphEntityEffect.cs delete mode 100644 Content.Shared/EntityEffects/Effects/PopupMessage.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ReduceRotting.cs delete mode 100644 Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs create mode 100644 Content.Shared/EntityEffects/Effects/ResetNarcolepsyEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/SatiateHunger.cs delete mode 100644 Content.Shared/EntityEffects/Effects/SatiateThirst.cs delete mode 100644 Content.Shared/EntityEffects/Effects/Slipify.cs create mode 100644 Content.Shared/EntityEffects/Effects/SlipifyEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Solution/AddReagentToSolutionEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Solution/AdjustReagentEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Solution/AreaReactionEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/Solution/SolutionTemperatureEntityEffectsSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/SolutionTemperatureEffects.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/BaseStatusEffectEntityEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/DrunkEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/ElectrocuteEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffectEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/Jitter.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/JitterEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdown.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdownEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/ModifyParalysisEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffect.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffectEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/StatusEffects/MovementSpeedModifierEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/TemplateEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Transform/EmpEntityEffectSystem.cs rename Content.Shared/EntityEffects/Effects/{ExplosionReactionEffect.cs => Transform/ExplosionEntityEffect.cs} (69%) create mode 100644 Content.Shared/EntityEffects/Effects/Transform/FlashEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/Transform/PopupMessageEntityEffectSystem.cs create mode 100644 Content.Shared/EntityEffects/Effects/WashCreamPieEntityEffectSystem.cs delete mode 100644 Content.Shared/EntityEffects/Effects/WashCreamPieReaction.cs delete mode 100644 Content.Shared/EntityEffects/Effects/WearableReaction.cs create mode 100644 Content.Shared/EntityEffects/Effects/ZombieEntityEffectsSystem.cs delete mode 100644 Content.Shared/EntityEffects/EntityEffect.cs delete mode 100644 Content.Shared/EntityEffects/EntityEffectCondition.cs delete mode 100644 Content.Shared/EntityEffects/EventEntityEffect.cs delete mode 100644 Content.Shared/EntityEffects/EventEntityEffectCondition.cs create mode 100644 Content.Shared/EntityEffects/SharedEntityEffectsSystem.cs rename {Content.Server => Content.Shared}/Temperature/Components/TemperatureComponent.cs (98%) rename {Content.Server => Content.Shared}/Zombies/IncurableZombieComponent.cs (77%) delete mode 100644 Resources/Locale/en-US/guidebook/chemistry/statuseffects.ftl rename Resources/Locale/en-US/guidebook/{chemistry => entity-effects}/conditions.ftl (100%) rename Resources/Locale/en-US/guidebook/{chemistry => entity-effects}/effects.ftl (71%) rename Resources/Locale/en-US/guidebook/{chemistry => entity-effects}/healthchange.ftl (100%) create mode 100644 Resources/Locale/en-US/guidebook/entity-effects/statuseffects.ftl diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 14f591ec87..defe08ef23 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -28,6 +28,7 @@ /Content.*/Stunnable/ @Princess-Cheeseballs /Content.*/Nutrition/ @Princess-Cheeseballs +/Content.*/EntityEffects @Princess-Cheeseballs @sowelipililimute # SKREEEE /Content.*.Database/ @PJB3005 @DrSmugleaf diff --git a/Content.Client/Temperature/Systems/TemperatureSystem.cs b/Content.Client/Temperature/Systems/TemperatureSystem.cs new file mode 100644 index 0000000000..94a1e836e8 --- /dev/null +++ b/Content.Client/Temperature/Systems/TemperatureSystem.cs @@ -0,0 +1,8 @@ +using Content.Shared.Temperature.Systems; + +namespace Content.Client.Temperature.Systems; + +/// +/// This exists so runs on client/> +/// +public sealed class TemperatureSystem : SharedTemperatureSystem; diff --git a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs index 424f52ed58..81bd4e5c6c 100644 --- a/Content.Server/Atmos/EntitySystems/FlammableSystem.cs +++ b/Content.Server/Atmos/EntitySystems/FlammableSystem.cs @@ -1,7 +1,6 @@ using Content.Server.Administration.Logs; using Content.Server.Atmos.Components; using Content.Server.Stunnable; -using Content.Server.Temperature.Components; using Content.Server.Temperature.Systems; using Content.Server.Damage.Components; using Content.Shared.ActionBlocker; @@ -24,6 +23,7 @@ using Content.Shared.Toggleable; using Content.Shared.Weapons.Melee.Events; using Content.Shared.FixedPoint; using Content.Shared.Hands; +using Content.Shared.Temperature.Components; using Robust.Server.Audio; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; diff --git a/Content.Server/Atmos/Rotting/RottingSystem.cs b/Content.Server/Atmos/Rotting/RottingSystem.cs index 6f14debc3d..57c1504b16 100644 --- a/Content.Server/Atmos/Rotting/RottingSystem.cs +++ b/Content.Server/Atmos/Rotting/RottingSystem.cs @@ -1,9 +1,9 @@ using Content.Server.Atmos.EntitySystems; -using Content.Server.Temperature.Components; using Content.Shared.Atmos; using Content.Shared.Atmos.Rotting; using Content.Shared.Body.Events; using Content.Shared.Damage; +using Content.Shared.Temperature.Components; using Robust.Server.Containers; using Robust.Shared.Physics.Components; using Robust.Shared.Timing; diff --git a/Content.Server/Body/Components/MetabolizerComponent.cs b/Content.Server/Body/Components/MetabolizerComponent.cs index 5821b0d944..46d2fdd8e8 100644 --- a/Content.Server/Body/Components/MetabolizerComponent.cs +++ b/Content.Server/Body/Components/MetabolizerComponent.cs @@ -10,13 +10,13 @@ namespace Content.Server.Body.Components /// /// Handles metabolizing various reagents with given effects. /// - [RegisterComponent, Access(typeof(MetabolizerSystem))] + [RegisterComponent, AutoGenerateComponentPause, Access(typeof(MetabolizerSystem))] public sealed partial class MetabolizerComponent : Component { /// /// The next time that reagents will be metabolized. /// - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [DataField, AutoPausedField] public TimeSpan NextUpdate; /// diff --git a/Content.Server/Body/Systems/MetabolizerSystem.cs b/Content.Server/Body/Systems/MetabolizerSystem.cs index c59f87f576..6679bfea54 100644 --- a/Content.Server/Body/Systems/MetabolizerSystem.cs +++ b/Content.Server/Body/Systems/MetabolizerSystem.cs @@ -1,14 +1,18 @@ using Content.Server.Body.Components; -using Content.Shared.Administration.Logs; using Content.Shared.Body.Events; using Content.Shared.Body.Organ; +using Content.Shared.Body.Prototypes; using Content.Shared.Body.Systems; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; -using Content.Shared.Database; +using Content.Shared.EntityConditions; +using Content.Shared.EntityConditions.Conditions; +using Content.Shared.EntityConditions.Conditions.Body; using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Body; +using Content.Shared.EntityEffects.Effects.Solution; using Content.Shared.FixedPoint; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; @@ -17,210 +21,258 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; -namespace Content.Server.Body.Systems +namespace Content.Server.Body.Systems; + +/// +public sealed class MetabolizerSystem : SharedMetabolizerSystem { - /// - public sealed class MetabolizerSystem : SharedMetabolizerSystem + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly MobStateSystem _mobStateSystem = default!; + [Dependency] private readonly SharedEntityConditionsSystem _entityConditions = default!; + [Dependency] private readonly SharedEntityEffectsSystem _entityEffects = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + + private EntityQuery _organQuery; + private EntityQuery _solutionQuery; + private static readonly ProtoId Gas = "Gas"; + + public override void Initialize() { - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - [Dependency] private readonly MobStateSystem _mobStateSystem = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; + base.Initialize(); - private EntityQuery _organQuery; - private EntityQuery _solutionQuery; + _organQuery = GetEntityQuery(); + _solutionQuery = GetEntityQuery(); - public override void Initialize() + SubscribeLocalEvent(OnMetabolizerInit); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnApplyMetabolicMultiplier); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.AdjustedUpdateInterval; + } + + private void OnMetabolizerInit(Entity entity, ref ComponentInit args) + { + if (!entity.Comp.SolutionOnBody) { - base.Initialize(); - - _organQuery = GetEntityQuery(); - _solutionQuery = GetEntityQuery(); - - SubscribeLocalEvent(OnMetabolizerInit); - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnUnpaused); - SubscribeLocalEvent(OnApplyMetabolicMultiplier); + _solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.SolutionName, out _); } - - private void OnMapInit(Entity ent, ref MapInitEvent args) + else if (_organQuery.CompOrNull(entity)?.Body is { } body) { - ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.AdjustedUpdateInterval; - } - - private void OnUnpaused(Entity ent, ref EntityUnpausedEvent args) - { - ent.Comp.NextUpdate += args.PausedTime; - } - - private void OnMetabolizerInit(Entity entity, ref ComponentInit args) - { - if (!entity.Comp.SolutionOnBody) - { - _solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.SolutionName, out _); - } - else if (_organQuery.CompOrNull(entity)?.Body is { } body) - { - _solutionContainerSystem.EnsureSolution(body, entity.Comp.SolutionName, out _); - } - } - - private void OnApplyMetabolicMultiplier(Entity ent, ref ApplyMetabolicMultiplierEvent args) - { - ent.Comp.UpdateIntervalMultiplier = args.Multiplier; - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - var metabolizers = new ValueList<(EntityUid Uid, MetabolizerComponent Component)>(Count()); - var query = EntityQueryEnumerator(); - - while (query.MoveNext(out var uid, out var comp)) - { - metabolizers.Add((uid, comp)); - } - - foreach (var (uid, metab) in metabolizers) - { - // Only update as frequently as it should - if (_gameTiming.CurTime < metab.NextUpdate) - continue; - - metab.NextUpdate += metab.AdjustedUpdateInterval; - TryMetabolize((uid, metab)); - } - } - - private void TryMetabolize(Entity ent) - { - _organQuery.Resolve(ent, ref ent.Comp2, logMissing: false); - - // First step is get the solution we actually care about - var solutionName = ent.Comp1.SolutionName; - Solution? solution = null; - Entity? soln = default!; - EntityUid? solutionEntityUid = null; - - if (ent.Comp1.SolutionOnBody) - { - if (ent.Comp2?.Body is { } body) - { - if (!_solutionQuery.Resolve(body, ref ent.Comp3, logMissing: false)) - return; - - _solutionContainerSystem.TryGetSolution((body, ent.Comp3), solutionName, out soln, out solution); - solutionEntityUid = body; - } - } - else - { - if (!_solutionQuery.Resolve(ent, ref ent.Comp3, logMissing: false)) - return; - - _solutionContainerSystem.TryGetSolution((ent, ent), solutionName, out soln, out solution); - solutionEntityUid = ent; - } - - if (solutionEntityUid is null - || soln is null - || solution is null - || solution.Contents.Count == 0) - { - return; - } - - // randomize the reagent list so we don't have any weird quirks - // like alphabetical order or insertion order mattering for processing - var list = solution.Contents.ToArray(); - _random.Shuffle(list); - - int reagents = 0; - foreach (var (reagent, quantity) in list) - { - if (!_prototypeManager.TryIndex(reagent.Prototype, out var proto)) - continue; - - var mostToRemove = FixedPoint2.Zero; - if (proto.Metabolisms is null) - { - if (ent.Comp1.RemoveEmpty) - { - solution.RemoveReagent(reagent, FixedPoint2.New(1)); - } - - continue; - } - - // we're done here entirely if this is true - if (reagents >= ent.Comp1.MaxReagentsProcessable) - return; - - - // loop over all our groups and see which ones apply - if (ent.Comp1.MetabolismGroups is null) - continue; - - foreach (var group in ent.Comp1.MetabolismGroups) - { - if (!proto.Metabolisms.TryGetValue(group.Id, out var entry)) - continue; - - var rate = entry.MetabolismRate * group.MetabolismRateModifier; - - // Remove $rate, as long as there's enough reagent there to actually remove that much - mostToRemove = FixedPoint2.Clamp(rate, 0, quantity); - - float scale = (float) mostToRemove / (float) rate; - - // if it's possible for them to be dead, and they are, - // then we shouldn't process any effects, but should probably - // still remove reagents - if (TryComp(solutionEntityUid.Value, out var state)) - { - if (!proto.WorksOnTheDead && _mobStateSystem.IsDead(solutionEntityUid.Value, state)) - continue; - } - - var actualEntity = ent.Comp2?.Body ?? solutionEntityUid.Value; - var args = new EntityEffectReagentArgs(actualEntity, EntityManager, ent, solution, mostToRemove, proto, null, scale); - - // do all effects, if conditions apply - foreach (var effect in entry.Effects) - { - if (!effect.ShouldApply(args, _random)) - continue; - - if (effect.ShouldLog) - { - _adminLogger.Add( - LogType.ReagentEffect, - effect.LogImpact, - $"Metabolism effect {effect.GetType().Name:effect}" - + $" of reagent {proto.LocalizedName:reagent}" - + $" applied on entity {actualEntity:entity}" - + $" at {Transform(actualEntity).Coordinates:coordinates}" - ); - } - - effect.Effect(args); - } - } - - // remove a certain amount of reagent - if (mostToRemove > FixedPoint2.Zero) - { - solution.RemoveReagent(reagent, mostToRemove); - - // We have processed a reagant, so count it towards the cap - reagents += 1; - } - } - - _solutionContainerSystem.UpdateChemicals(soln.Value); + _solutionContainerSystem.EnsureSolution(body, entity.Comp.SolutionName, out _); } } + + private void OnApplyMetabolicMultiplier(Entity ent, ref ApplyMetabolicMultiplierEvent args) + { + ent.Comp.UpdateIntervalMultiplier = args.Multiplier; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var metabolizers = new ValueList<(EntityUid Uid, MetabolizerComponent Component)>(Count()); + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) + { + metabolizers.Add((uid, comp)); + } + + foreach (var (uid, metab) in metabolizers) + { + // Only update as frequently as it should + if (_gameTiming.CurTime < metab.NextUpdate) + continue; + + metab.NextUpdate += metab.AdjustedUpdateInterval; + TryMetabolize((uid, metab)); + } + } + + private void TryMetabolize(Entity ent) + { + _organQuery.Resolve(ent, ref ent.Comp2, logMissing: false); + + // First step is get the solution we actually care about + var solutionName = ent.Comp1.SolutionName; + Solution? solution = null; + Entity? soln = default!; + EntityUid? solutionEntityUid = null; + + if (ent.Comp1.SolutionOnBody) + { + if (ent.Comp2?.Body is { } body) + { + if (!_solutionQuery.Resolve(body, ref ent.Comp3, logMissing: false)) + return; + + _solutionContainerSystem.TryGetSolution((body, ent.Comp3), solutionName, out soln, out solution); + solutionEntityUid = body; + } + } + else + { + if (!_solutionQuery.Resolve(ent, ref ent.Comp3, logMissing: false)) + return; + + _solutionContainerSystem.TryGetSolution((ent, ent), solutionName, out soln, out solution); + solutionEntityUid = ent; + } + + if (solutionEntityUid is null + || soln is null + || solution is null + || solution.Contents.Count == 0) + { + return; + } + + // randomize the reagent list so we don't have any weird quirks + // like alphabetical order or insertion order mattering for processing + var list = solution.Contents.ToArray(); + _random.Shuffle(list); + + int reagents = 0; + foreach (var (reagent, quantity) in list) + { + if (!_prototypeManager.TryIndex(reagent.Prototype, out var proto)) + continue; + + var mostToRemove = FixedPoint2.Zero; + if (proto.Metabolisms is null) + { + if (ent.Comp1.RemoveEmpty) + { + solution.RemoveReagent(reagent, FixedPoint2.New(1)); + } + + continue; + } + + // we're done here entirely if this is true + if (reagents >= ent.Comp1.MaxReagentsProcessable) + return; + + + // loop over all our groups and see which ones apply + if (ent.Comp1.MetabolismGroups is null) + continue; + + // TODO: Kill MetabolismGroups! + foreach (var group in ent.Comp1.MetabolismGroups) + { + if (!proto.Metabolisms.TryGetValue(group.Id, out var entry)) + continue; + + var rate = entry.MetabolismRate * group.MetabolismRateModifier; + + // Remove $rate, as long as there's enough reagent there to actually remove that much + mostToRemove = FixedPoint2.Clamp(rate, 0, quantity); + + var scale = (float) mostToRemove; + + // TODO: This is a very stupid workaround to lungs heavily relying on scale = reagent quantity. Needs lung and metabolism refactors to remove. + // TODO: Lungs just need to have their scale be equal to the mols consumed, scale needs to be not hardcoded either and configurable per metabolizer... + if (group.Id != Gas) + scale /= (float) entry.MetabolismRate; + + // if it's possible for them to be dead, and they are, + // then we shouldn't process any effects, but should probably + // still remove reagents + if (TryComp(solutionEntityUid.Value, out var state)) + { + if (!proto.WorksOnTheDead && _mobStateSystem.IsDead(solutionEntityUid.Value, state)) + continue; + } + + var actualEntity = ent.Comp2?.Body ?? solutionEntityUid.Value; + + // do all effects, if conditions apply + foreach (var effect in entry.Effects) + { + if (scale < effect.MinScale) + continue; + + // See if conditions apply + if (effect.Conditions != null && !CanMetabolizeEffect(actualEntity, ent, soln.Value, effect.Conditions)) + continue; + + ApplyEffect(effect); + + } + + // TODO: We should have to do this with metabolism. ReagentEffect struct needs refactoring and so does metabolism! + void ApplyEffect(EntityEffect effect) + { + switch (effect) + { + case ModifyLungGas: + _entityEffects.ApplyEffect(ent, effect, scale); + break; + case AdjustReagent: + _entityEffects.ApplyEffect(soln.Value, effect, scale); + break; + default: + _entityEffects.ApplyEffect(actualEntity, effect, scale); + break; + } + } + } + + // remove a certain amount of reagent + if (mostToRemove > FixedPoint2.Zero) + { + solution.RemoveReagent(reagent, mostToRemove); + + // We have processed a reagant, so count it towards the cap + reagents += 1; + } + } + + _solutionContainerSystem.UpdateChemicals(soln.Value); + } + + /// + /// Public API to check if a certain metabolism effect can be applied to an entity. + /// TODO: With metabolism refactor make this logic smarter and unhardcode the old hardcoding entity effects used to have for metabolism! + /// + /// The body metabolizing the effects + /// The organ doing the metabolizing + /// The solution we are metabolizing from + /// The conditions that need to be met to metabolize + /// True if we can metabolize! False if we cannot! + public bool CanMetabolizeEffect(EntityUid body, EntityUid organ, Entity solution, EntityCondition[] conditions) + { + foreach (var condition in conditions) + { + switch (condition) + { + // Need specific handling of specific conditions since Metabolism is funny like that. + // TODO: MetabolizerTypes should be handled well before this stage by metabolism itself. + case MetabolizerTypeCondition: + if (_entityConditions.TryCondition(organ, condition)) + continue; + break; + case ReagentCondition: + if (_entityConditions.TryCondition(solution, condition)) + continue; + break; + default: + if (_entityConditions.TryCondition(body, condition)) + continue; + break; + } + + return false; + } + + return true; + } } + diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 63b04adc6a..2af7b24f26 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Administration.Logs; using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Components; using Content.Server.Chat.Systems; -using Content.Server.EntityEffects; using Content.Shared.Body.Systems; using Content.Shared.Alert; using Content.Shared.Atmos; @@ -14,9 +13,11 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; using Content.Shared.Database; +using Content.Shared.EntityConditions; +using Content.Shared.EntityConditions.Conditions.Body; using Content.Shared.EntityEffects; -using Content.Shared.EntityEffects.EffectConditions; using Content.Shared.EntityEffects.Effects; +using Content.Shared.EntityEffects.Effects.Body; using Content.Shared.Mobs.Systems; using JetBrains.Annotations; using Robust.Shared.Prototypes; @@ -29,16 +30,16 @@ public sealed class RespiratorSystem : EntitySystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; [Dependency] private readonly AlertsSystem _alertsSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosSys = default!; [Dependency] private readonly BodySystem _bodySystem = default!; + [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly DamageableSystem _damageableSys = default!; [Dependency] private readonly LungSystem _lungSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly IPrototypeManager _protoMan = default!; + [Dependency] private readonly SharedEntityConditionsSystem _entityConditions = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly EntityEffectSystem _entityEffect = default!; private static readonly ProtoId GasId = new("Gas"); @@ -340,7 +341,6 @@ public sealed class RespiratorSystem : EntitySystem } } - // TODO generalize condition checks // this is pretty janky, but I just want to bodge a method that checks if an entity can breathe a gas mixture // Applying actual reaction effects require a full ReagentEffectArgs struct. bool CanMetabolize(EntityEffect effect) @@ -348,9 +348,10 @@ public sealed class RespiratorSystem : EntitySystem if (effect.Conditions == null) return true; + // TODO: Use Metabolism Public API to do this instead, once that API has been built. foreach (var cond in effect.Conditions) { - if (cond is OrganType organ && !_entityEffect.OrganCondition(organ, lung)) + if (cond is MetabolizerTypeCondition organ && !_entityConditions.TryCondition(lung, organ)) return false; } diff --git a/Content.Server/Body/Systems/ThermalRegulatorSystem.cs b/Content.Server/Body/Systems/ThermalRegulatorSystem.cs index 3ba9e6af31..af7b17643e 100644 --- a/Content.Server/Body/Systems/ThermalRegulatorSystem.cs +++ b/Content.Server/Body/Systems/ThermalRegulatorSystem.cs @@ -1,7 +1,7 @@ using Content.Server.Body.Components; -using Content.Server.Temperature.Components; using Content.Server.Temperature.Systems; using Content.Shared.ActionBlocker; +using Content.Shared.Temperature.Components; using Robust.Shared.Timing; namespace Content.Server.Body.Systems; diff --git a/Content.Server/Botany/SeedPrototype.cs b/Content.Server/Botany/SeedPrototype.cs index ee7ca4f584..253eea2df9 100644 --- a/Content.Server/Botany/SeedPrototype.cs +++ b/Content.Server/Botany/SeedPrototype.cs @@ -1,8 +1,9 @@ using Content.Server.Botany.Components; using Content.Server.Botany.Systems; -using Content.Server.EntityEffects; +using Content.Server.EntityEffects.Effects.Botany; using Content.Shared.Atmos; using Content.Shared.Database; +using Content.Shared.EntityEffects; using Content.Shared.Random; using Robust.Shared.Audio; using Robust.Shared.Prototypes; @@ -79,9 +80,13 @@ public partial struct SeedChemQuantity [DataField("Inherent")] public bool Inherent = true; } -// TODO reduce the number of friends to a reasonable level. Requires ECS-ing things like plant holder component. +// TODO Make Botany ECS and give it a proper API. I removed the limited access of this class because it's egregious how many systems needed access to it due to a lack of an actual API. +/// +/// SeedData is no longer restricted because the number of friends is absolutely unreasonable. +/// This entire data definition is unreasonable. I felt genuine fear looking at this, this is horrific. Send help. +/// +// TODO: Hit Botany with hammers [Virtual, DataDefinition] -[Access(typeof(BotanySystem), typeof(PlantHolderSystem), typeof(SeedExtractorSystem), typeof(PlantHolderComponent), typeof(EntityEffectSystem), typeof(MutationSystem))] public partial class SeedData { #region Tracking diff --git a/Content.Server/Botany/Systems/BotanySystem.Produce.cs b/Content.Server/Botany/Systems/BotanySystem.Produce.cs index f6f3f99c09..7d8f8652c7 100644 --- a/Content.Server/Botany/Systems/BotanySystem.Produce.cs +++ b/Content.Server/Botany/Systems/BotanySystem.Produce.cs @@ -7,6 +7,8 @@ namespace Content.Server.Botany.Systems; public sealed partial class BotanySystem { + [Dependency] private readonly SharedEntityEffectsSystem _entityEffects = default!; + public void ProduceGrown(EntityUid uid, ProduceComponent produce) { if (!TryGetSeed(produce, out var seed)) @@ -15,10 +17,7 @@ public sealed partial class BotanySystem foreach (var mutation in seed.Mutations) { if (mutation.AppliesToProduce) - { - var args = new EntityEffectBaseArgs(uid, EntityManager); - mutation.Effect.Effect(args); - } + _entityEffects.TryApplyEffect(uid, mutation.Effect); } if (!_solutionContainerSystem.EnsureSolution(uid, diff --git a/Content.Server/Botany/Systems/MutationSystem.cs b/Content.Server/Botany/Systems/MutationSystem.cs index ee35db48e3..834fd9e8ef 100644 --- a/Content.Server/Botany/Systems/MutationSystem.cs +++ b/Content.Server/Botany/Systems/MutationSystem.cs @@ -13,6 +13,7 @@ public sealed class MutationSystem : EntitySystem [Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly SharedEntityEffectsSystem _entityEffects = default!; private RandomPlantMutationListPrototype _randomMutations = default!; public override void Initialize() @@ -32,10 +33,8 @@ public sealed class MutationSystem : EntitySystem if (Random(Math.Min(mutation.BaseOdds * severity, 1.0f))) { if (mutation.AppliesToPlant) - { - var args = new EntityEffectBaseArgs(plantHolder, EntityManager); - mutation.Effect.Effect(args); - } + _entityEffects.TryApplyEffect(plantHolder, mutation.Effect); + // Stat adjustments do not persist by being an attached effect, they just change the stat. if (mutation.Persists && !seed.Mutations.Any(m => m.Name == mutation.Name)) seed.Mutations.Add(mutation); diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index caa796efe2..2554f95455 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -24,8 +24,10 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using Content.Shared.Administration.Logs; +using Content.Shared.Chemistry.Reaction; using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; +using Content.Shared.EntityEffects; using Content.Shared.Kitchen.Components; using Content.Shared.Labels.Components; @@ -48,6 +50,7 @@ public sealed class PlantHolderSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedEntityEffectsSystem _entityEffects = default!; public const float HydroponicsSpeedMultiplier = 1f; public const float HydroponicsConsumptionMultiplier = 2f; @@ -887,7 +890,7 @@ public sealed class PlantHolderSystem : EntitySystem foreach (var entry in _solutionContainerSystem.RemoveEachReagent(component.SoilSolution.Value, amt)) { var reagentProto = _prototype.Index(entry.Reagent.Prototype); - reagentProto.ReactionPlant(uid, entry, solution, EntityManager, _random, _adminLogger); + _entityEffects.ApplyEffects(uid, reagentProto.PlantMetabolisms.ToArray()); } } diff --git a/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs b/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs index a70c2196ab..58c86f058a 100644 --- a/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs +++ b/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs @@ -39,7 +39,7 @@ public sealed class DumpReagentGuideText : LocalizedEntityCommands { foreach (var effect in entry.Effects) { - shell.WriteLine(effect.GuidebookEffectDescription(_prototype, EntityManager.EntitySysManager) ?? + shell.WriteLine(reagent.GuidebookReagentEffectDescription(_prototype, EntityManager.EntitySysManager, effect, entry.MetabolismRate) ?? Loc.GetString($"cmd-dumpreagentguidetext-skipped", ("effect", effect.GetType()))); } } diff --git a/Content.Server/Construction/ConstructionSystem.Interactions.cs b/Content.Server/Construction/ConstructionSystem.Interactions.cs index 3dd5a5b794..77a1a63e02 100644 --- a/Content.Server/Construction/ConstructionSystem.Interactions.cs +++ b/Content.Server/Construction/ConstructionSystem.Interactions.cs @@ -13,6 +13,7 @@ using Content.Shared.Prying.Systems; using Content.Shared.Radio.EntitySystems; using Content.Shared.Stacks; using Content.Shared.Temperature; +using Content.Shared.Temperature.Components; using Content.Shared.Tools.Systems; using Robust.Shared.Containers; using Robust.Shared.Utility; diff --git a/Content.Server/EntityConditions/Conditions/BreathingEntityConditionSystem.cs b/Content.Server/EntityConditions/Conditions/BreathingEntityConditionSystem.cs new file mode 100644 index 0000000000..e7b8aaf22b --- /dev/null +++ b/Content.Server/EntityConditions/Conditions/BreathingEntityConditionSystem.cs @@ -0,0 +1,19 @@ +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Shared.EntityConditions; +using Content.Shared.EntityConditions.Conditions.Body; + +namespace Content.Server.EntityConditions.Conditions; + +/// +/// Returns true if this entity is both able to breathe and is currently breathing. +/// +/// +public sealed partial class IsBreathingEntityConditionSystem : EntityConditionSystem +{ + [Dependency] private readonly RespiratorSystem _respirator = default!; + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + args.Result = _respirator.IsBreathing(entity.AsNullable()); + } +} diff --git a/Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs b/Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs new file mode 100644 index 0000000000..3b4fb5292b --- /dev/null +++ b/Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs @@ -0,0 +1,21 @@ +using System.Linq; +using Content.Server.Body.Components; +using Content.Shared.EntityConditions; +using Content.Shared.EntityConditions.Conditions.Body; + +namespace Content.Server.EntityConditions.Conditions; + +/// +/// Returns true if this entity has any of the listed metabolizer types. +/// +/// +public sealed partial class MetabolizerTypeEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + if (entity.Comp.MetabolizerTypes == null) + return; + + args.Result = entity.Comp.MetabolizerTypes.Overlaps(args.Condition.Type); + } +} diff --git a/Content.Server/EntityEffects/Effects/Atmos/CreateGasEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Atmos/CreateGasEntityEffectSystem.cs new file mode 100644 index 0000000000..033704ffcd --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Atmos/CreateGasEntityEffectSystem.cs @@ -0,0 +1,22 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Atmos; + +namespace Content.Server.EntityEffects.Effects.Atmos; + +/// +/// This effect adjusts a gas at the tile this entity is currently on. +/// The amount changed is modified by scale. +/// +/// +public sealed partial class CreateGasEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly AtmosphereSystem _atmosphere = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var tileMix = _atmosphere.GetContainingMixture(entity.AsNullable(), false, true); + + tileMix?.AdjustMoles(args.Effect.Gas, args.Scale * args.Effect.Moles); + } +} diff --git a/Content.Server/EntityEffects/Effects/Atmos/FlammableEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Atmos/FlammableEntityEffectSystem.cs new file mode 100644 index 0000000000..65c818f143 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Atmos/FlammableEntityEffectSystem.cs @@ -0,0 +1,25 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Atmos; + +namespace Content.Server.EntityEffects.Effects.Atmos; + +/// +/// Adds a number of FireStacks modified by scale to this entity. +/// The amount of FireStacks added is modified by scale. +/// +/// +public sealed partial class FlammableEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly FlammableSystem _flammable = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + // The multiplier is determined by if the entity is already on fire, and if the multiplier for existing FireStacks has a value. + // If both of these are true, we use the MultiplierOnExisting value, otherwise we use the standard Multiplier. + var multiplier = entity.Comp.FireStacks == 0f || args.Effect.MultiplierOnExisting == null ? args.Effect.Multiplier : args.Effect.MultiplierOnExisting.Value; + + _flammable.AdjustFireStacks(entity, args.Scale * multiplier, entity.Comp); + } +} diff --git a/Content.Server/EntityEffects/Effects/Atmos/IgniteEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Atmos/IgniteEntityEffectSystem.cs new file mode 100644 index 0000000000..de90656c66 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Atmos/IgniteEntityEffectSystem.cs @@ -0,0 +1,23 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Atmos.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Atmos; + +namespace Content.Server.EntityEffects.Effects.Atmos; + +/// +/// Sets this entity on fire. +/// +/// +public sealed partial class IngiteEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly FlammableSystem _flammable = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + // TODO: Proper BodySystem Metabolism Effect relay... + // TODO: If this fucks over downstream shitmed, I give you full approval to use whatever shitcode method you need to fix it. Metabolism is awful. + _flammable.Ignite(entity, entity, flammable: entity.Comp); + } +} + diff --git a/Content.Server/EntityEffects/Effects/Body/OxygenateEntityEffectsSystem.cs b/Content.Server/EntityEffects/Effects/Body/OxygenateEntityEffectsSystem.cs new file mode 100644 index 0000000000..0cbf0b3864 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Body/OxygenateEntityEffectsSystem.cs @@ -0,0 +1,20 @@ +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Body; + +namespace Content.Server.EntityEffects.Effects.Body; + +/// +/// This effect adjusts a respirator's saturation value. +/// The saturation adjustment is modified by scale. +/// +/// +public sealed partial class OxygenateEntityEffectsSystem : EntityEffectSystem +{ + [Dependency] private readonly RespiratorSystem _respirator = default!; + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _respirator.UpdateSaturation(entity, args.Scale * args.Effect.Factor, entity.Comp); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealthEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealthEntityEffectSystem.cs new file mode 100644 index 0000000000..64f61f5b11 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealthEntityEffectSystem.cs @@ -0,0 +1,20 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustHealthEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + entity.Comp.MutationLevel += args.Effect.Amount * entity.Comp.MutationMod; + _plantHolder.CheckHealth(entity, entity.Comp); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevelEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevelEntityEffectSystem.cs new file mode 100644 index 0000000000..f35ff25b25 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevelEntityEffectSystem.cs @@ -0,0 +1,20 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustMutationLevelEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + entity.Comp.Health += args.Effect.Amount; + _plantHolder.CheckHealth(entity, entity.Comp); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationModEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationModEntityEffectSystem.cs new file mode 100644 index 0000000000..3163ee374c --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationModEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustMutationModEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + entity.Comp.MutationMod += args.Effect.Amount; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutritionEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutritionEntityEffectSystem.cs new file mode 100644 index 0000000000..56c016700d --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutritionEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustNutritionEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _plantHolder.AdjustNutrient(entity, args.Effect.Amount, entity); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPestsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPestsEntityEffectSystem.cs new file mode 100644 index 0000000000..0495034b38 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPestsEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustPestsEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + entity.Comp.PestLevel += args.Effect.Amount; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotencyEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotencyEntityEffectSystem.cs new file mode 100644 index 0000000000..ebe5c83181 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotencyEntityEffectSystem.cs @@ -0,0 +1,19 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustPotencyEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + _plantHolder.EnsureUniqueSeed(entity, entity.Comp); + entity.Comp.Seed.Potency = Math.Max(entity.Comp.Seed.Potency + args.Effect.Amount, 1); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxinsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxinsEntityEffectSystem.cs new file mode 100644 index 0000000000..31dc328977 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxinsEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustToxinsEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + entity.Comp.Toxins += args.Effect.Amount; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWaterEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWaterEntityEffectSystem.cs new file mode 100644 index 0000000000..706eeb2ffe --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWaterEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustWaterEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _plantHolder.AdjustWater(entity, args.Effect.Amount, entity.Comp); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeedsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeedsEntityEffectSystem.cs new file mode 100644 index 0000000000..34aa51e4ff --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeedsEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustWeedsEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + entity.Comp.WeedLevel += args.Effect.Amount; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowthEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowthEntityEffectSystem.cs new file mode 100644 index 0000000000..b0faa6255e --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowthEntityEffectSystem.cs @@ -0,0 +1,19 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAffectGrowthEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + _plantHolder.AffectGrowth(entity, (int)args.Effect.Amount, entity); + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStatEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStatEntityEffectSystem.cs new file mode 100644 index 0000000000..3d82f74b11 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStatEntityEffectSystem.cs @@ -0,0 +1,122 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +/// +/// This system mutates an inputted stat for a PlantHolder, only works for floats, integers, and bools. +/// +/// +public sealed partial class PlantChangeStatEntityEffectSystem : EntityEffectSystem +{ + // TODO: This is awful. I do not have the strength to refactor this. I want it gone. + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + var effect = args.Effect; + var member = entity.Comp.Seed.GetType().GetField(args.Effect.TargetValue); + + if (member == null) + { + Log.Error($"{ effect.GetType().Name } Error: Member { args.Effect.TargetValue} not found on { entity.Comp.Seed.GetType().Name }. Did you misspell it?"); + return; + } + + var currentValObj = member.GetValue(entity.Comp.Seed); + if (currentValObj == null) + return; + + if (member.FieldType == typeof(float)) + { + var floatVal = (float)currentValObj; + MutateFloat(ref floatVal, args.Effect.MinValue, args.Effect.MaxValue, args.Effect.Steps); + member.SetValue(entity.Comp.Seed, floatVal); + } + else if (member.FieldType == typeof(int)) + { + var intVal = (int)currentValObj; + MutateInt(ref intVal, (int)args.Effect.MinValue, (int)args.Effect.MaxValue, args.Effect.Steps); + member.SetValue(entity.Comp.Seed, intVal); + } + else if (member.FieldType == typeof(bool)) + { + var boolVal = (bool)currentValObj; + boolVal = !boolVal; + member.SetValue(entity.Comp.Seed, boolVal); + } + } + + // Mutate reference 'val' between 'min' and 'max' by pretending the value + // is representable by a thermometer code with 'bits' number of bits and + // randomly flipping some of them. + private void MutateFloat(ref float val, float min, float max, int bits) + { + if (min == max) + { + val = min; + return; + } + + // Starting number of bits that are high, between 0 and bits. + // In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded. + int valInt = (int)MathF.Round((val - min) / (max - min) * bits); + // val may be outside the range of min/max due to starting prototype values, so clamp. + valInt = Math.Clamp(valInt, 0, bits); + + // Probability that the bit flip increases n. + // The higher the current value is, the lower the probability of increasing value is, and the higher the probability of decreasive it it. + // In other words, it tends to go to the middle. + float probIncrease = 1 - (float)valInt / bits; + int valIntMutated; + if (_random.Prob(probIncrease)) + { + valIntMutated = valInt + 1; + } + else + { + valIntMutated = valInt - 1; + } + + // Set value based on mutated thermometer code. + float valMutated = Math.Clamp((float)valIntMutated / bits * (max - min) + min, min, max); + val = valMutated; + } + + private void MutateInt(ref int val, int min, int max, int bits) + { + if (min == max) + { + val = min; + return; + } + + // Starting number of bits that are high, between 0 and bits. + // In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded. + int valInt = (int)MathF.Round((val - min) / (max - min) * bits); + // val may be outside the range of min/max due to starting prototype values, so clamp. + valInt = Math.Clamp(valInt, 0, bits); + + // Probability that the bit flip increases n. + // The higher the current value is, the lower the probability of increasing value is, and the higher the probability of decreasing it. + // In other words, it tends to go to the middle. + float probIncrease = 1 - (float)valInt / bits; + int valMutated; + if (_random.Prob(probIncrease)) + { + valMutated = val + 1; + } + else + { + valMutated = val - 1; + } + + valMutated = Math.Clamp(valMutated, min, max); + val = valMutated; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadoneEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadoneEntityEffectSystem.cs new file mode 100644 index 0000000000..710bce24dd --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadoneEntityEffectSystem.cs @@ -0,0 +1,30 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantCryoxadoneEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + var deviation = 0; + var seed = entity.Comp.Seed; + if (seed == null) + return; + if (entity.Comp.Age > seed.Maturation) + deviation = (int) Math.Max(seed.Maturation - 1, entity.Comp.Age - _random.Next(7, 10)); + else + deviation = (int) (seed.Maturation / seed.GrowthStages); + entity.Comp.Age -= deviation; + entity.Comp.LastProduce = entity.Comp.Age; + entity.Comp.SkipAging++; + entity.Comp.ForceUpdate = true; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeedsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeedsEntityEffectSystem.cs new file mode 100644 index 0000000000..1661c501be --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeedsEntityEffectSystem.cs @@ -0,0 +1,31 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Server.Popups; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; +using Content.Shared.Popups; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantDestroySeedsEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead || entity.Comp.Seed.Immutable) + return; + + if (entity.Comp.Seed.Seedless) + return; + + _plantHolder.EnsureUniqueSeed(entity, entity.Comp); + _popup.PopupEntity( + Loc.GetString("botany-plant-seedsdestroyed"), + entity, + PopupType.SmallCaution + ); + entity.Comp.Seed.Seedless = true; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamineEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamineEntityEffectSystem.cs new file mode 100644 index 0000000000..f6aebde465 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamineEntityEffectSystem.cs @@ -0,0 +1,31 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantDiethylamineEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead || entity.Comp.Seed.Immutable) + return; + + if (_random.Prob(0.1f)) + { + _plantHolder.EnsureUniqueSeed(entity, entity); + entity.Comp.Seed!.Lifespan++; + } + + if (_random.Prob(0.1f)) + { + _plantHolder.EnsureUniqueSeed(entity, entity); + entity.Comp.Seed!.Endurance++; + } + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximineEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximineEntityEffectSystem.cs new file mode 100644 index 0000000000..8a073392e1 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximineEntityEffectSystem.cs @@ -0,0 +1,16 @@ +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantPhalanximineEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead || entity.Comp.Seed.Immutable) + return; + + entity.Comp.Seed.Viable = true; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeedsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeedsEntityEffectSystem.cs new file mode 100644 index 0000000000..4d724be244 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeedsEntityEffectSystem.cs @@ -0,0 +1,26 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Server.Popups; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantRestoreSeedsEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + [Dependency] private readonly PopupSystem _popup = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead || entity.Comp.Seed.Immutable) + return; + + if (!entity.Comp.Seed.Seedless) + return; + + _plantHolder.EnsureUniqueSeed(entity, entity.Comp); + _popup.PopupEntity(Loc.GetString("botany-plant-seedsrestored"), entity); + entity.Comp.Seed.Seedless = false; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvestEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvestEntityEffectSystem.cs new file mode 100644 index 0000000000..68ea3319ef --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvestEntityEffectSystem.cs @@ -0,0 +1,41 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes; + +/// +/// This effect directly increases the potency of a PlantHolder's plant provided it exists and isn't dead. +/// Potency directly correlates to the size of the plant's produce. +/// +/// +public sealed partial class RobustHarvestEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly PlantHolderSystem _plantHolder = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Dead) + return; + + if (entity.Comp.Seed.Potency < args.Effect.PotencyLimit) + { + _plantHolder.EnsureUniqueSeed(entity, entity.Comp); + entity.Comp.Seed.Potency = Math.Min(entity.Comp.Seed.Potency + args.Effect.PotencyIncrease, args.Effect.PotencyLimit); + + if (entity.Comp.Seed.Potency > args.Effect.PotencySeedlessThreshold) + { + entity.Comp.Seed.Seedless = true; + } + } + else if (entity.Comp.Seed.Yield > 1 && _random.Prob(0.1f)) + { + // Too much of a good thing reduces yield + _plantHolder.EnsureUniqueSeed(entity, entity.Comp); + entity.Comp.Seed.Yield--; + } + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs new file mode 100644 index 0000000000..120ae6e881 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffectSystem.cs @@ -0,0 +1,43 @@ +using Content.Server.Botany; +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany; + +public sealed partial class PlantMutateChemicalsEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null) + return; + + var chemicals = entity.Comp.Seed.Chemicals; + var randomChems = _proto.Index(args.Effect.RandomPickBotanyReagent).Fills; + + // Add a random amount of a random chemical to this set of chemicals + var pick = _random.Pick(randomChems); + var chemicalId = _random.Pick(pick.Reagents); + var amount = _random.Next(1, (int)pick.Quantity); + var seedChemQuantity = new SeedChemQuantity(); + if (chemicals.ContainsKey(chemicalId)) + { + seedChemQuantity.Min = chemicals[chemicalId].Min; + seedChemQuantity.Max = chemicals[chemicalId].Max + amount; + } + else + { + seedChemQuantity.Min = 1; + seedChemQuantity.Max = 1 + amount; + seedChemQuantity.Inherent = false; + } + var potencyDivisor = (int)Math.Ceiling(100.0f / seedChemQuantity.Max); + seedChemQuantity.PotencyDivisor = potencyDivisor; + chemicals[chemicalId] = seedChemQuantity; + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffectSystem.cs new file mode 100644 index 0000000000..e2376ba186 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffectSystem.cs @@ -0,0 +1,53 @@ +using System.Linq; +using Content.Server.Botany.Components; +using Content.Shared.Atmos; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany; + +public sealed partial class PlantMutateExudeGasesEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null) + return; + + var gasses = entity.Comp.Seed.ExudeGasses; + + // Add a random amount of a random gas to this gas dictionary + float amount = _random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue); + var gas = _random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); + + if (!gasses.TryAdd(gas, amount)) + { + gasses[gas] += amount; + } + } +} + +public sealed partial class PlantMutateConsumeGasesEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null) + return; + + var gasses = entity.Comp.Seed.ConsumeGasses; + + // Add a random amount of a random gas to this gas dictionary + var amount = _random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue); + var gas = _random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); + + if (!gasses.TryAdd(gas, amount)) + { + gasses[gas] += amount; + } + } +} + diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffectSystem.cs new file mode 100644 index 0000000000..95d7f97bbe --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffectSystem.cs @@ -0,0 +1,25 @@ +using Content.Server.Botany; +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany; + +namespace Content.Server.EntityEffects.Effects.Botany; + +public sealed partial class PlantMutateHarvestEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null) + return; + + switch (entity.Comp.Seed.HarvestRepeat) + { + case HarvestType.NoRepeat: + entity.Comp.Seed.HarvestRepeat = HarvestType.Repeat; + break; + case HarvestType.Repeat: + entity.Comp.Seed.HarvestRepeat = HarvestType.SelfHarvest; + break; + } + } +} diff --git a/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs new file mode 100644 index 0000000000..c26e1e08cf --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffectSystem.cs @@ -0,0 +1,31 @@ +using Content.Server.Botany; +using Content.Server.Botany.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Botany; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.EntityEffects.Effects.Botany; + +public sealed partial class PlantMutateSpeciesChangeEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (entity.Comp.Seed == null || entity.Comp.Seed.MutationPrototypes.Count == 0) + return; + + var targetProto = _random.Pick(entity.Comp.Seed.MutationPrototypes); + _proto.TryIndex(targetProto, out SeedPrototype? protoSeed); + + if (protoSeed == null) + { + Log.Error($"Seed prototype could not be found: {targetProto}!"); + return; + } + + entity.Comp.Seed = entity.Comp.Seed.SpeciesChange(protoSeed); + } +} diff --git a/Content.Server/EntityEffects/Effects/EmoteEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/EmoteEntityEffectSystem.cs new file mode 100644 index 0000000000..05ab857267 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/EmoteEntityEffectSystem.cs @@ -0,0 +1,22 @@ +using Content.Server.Chat.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects; + +namespace Content.Server.EntityEffects.Effects; + +/// +/// Makes this entity emote. +/// +/// +public sealed partial class EmoteEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly ChatSystem _chat = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (args.Effect.ShowInChat) + _chat.TryEmoteWithChat(entity, args.Effect.EmoteId, ChatTransmitRange.GhostRangeLimit, forceEmote: args.Effect.Force); + else + _chat.TryEmoteWithoutChat(entity, args.Effect.EmoteId); + } +} diff --git a/Content.Server/EntityEffects/Effects/MakeSentientEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/MakeSentientEntityEffectSystem.cs new file mode 100644 index 0000000000..c623b25857 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/MakeSentientEntityEffectSystem.cs @@ -0,0 +1,42 @@ +using Content.Server.Ghost.Roles.Components; +using Content.Server.Speech.Components; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects; +using Content.Shared.Mind.Components; + +namespace Content.Server.EntityEffects.Effects; + +/// +/// Makes this entity sentient. Allows ghost to take it over if it's not already occupied. +/// Optionally also allows this entity to speak. +/// +/// +public sealed partial class MakeSentientEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + // Let affected entities speak normally to make this effect different from, say, the "random sentience" event + // This also works on entities that already have a mind + // We call this before the mind check to allow things like player-controlled mice to be able to benefit from the effect + if (args.Effect.AllowSpeech) + { + RemComp(entity); + // TODO: Make MonkeyAccent a replacement accent and remove MonkeyAccent code-smell. + RemComp(entity); + } + + // Stops from adding a ghost role to things like people who already have a mind + if (TryComp(entity, out var mindContainer) && mindContainer.HasMind) + return; + + // Don't add a ghost role to things that already have ghost roles + if (TryComp(entity, out GhostRoleComponent? ghostRole)) + return; + + ghostRole = AddComp(entity); + EnsureComp(entity); + + ghostRole.RoleName = entity.Comp.EntityName; + ghostRole.RoleDescription = Loc.GetString("ghost-role-information-cognizine-description"); + } +} diff --git a/Content.Server/EntityEffects/Effects/PolymorphEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/PolymorphEntityEffectSystem.cs new file mode 100644 index 0000000000..5f19bcc50b --- /dev/null +++ b/Content.Server/EntityEffects/Effects/PolymorphEntityEffectSystem.cs @@ -0,0 +1,19 @@ +using Content.Server.Polymorph.Components; +using Content.Server.Polymorph.Systems; +using Content.Shared.EntityEffects; + +namespace Content.Server.EntityEffects.Effects; + +/// +/// Polymorphs this entity into another entity. +/// +/// +public sealed partial class PolymorphEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly PolymorphSystem _polymorph = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _polymorph.PolymorphEntity(entity, args.Effect.Prototype); + } +} diff --git a/Content.Server/EntityEffects/Effects/Solution/AreaReactionEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Solution/AreaReactionEntityEffectSystem.cs new file mode 100644 index 0000000000..e5ef488de8 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Solution/AreaReactionEntityEffectSystem.cs @@ -0,0 +1,51 @@ +using Content.Server.Fluids.EntitySystems; +using Content.Server.Spreader; +using Content.Shared.Chemistry.Components; +using Content.Shared.Coordinates.Helpers; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Solution; +using Content.Shared.Maps; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Map; + +namespace Content.Server.EntityEffects.Effects.Solution; + +/// +/// This effect creates smoke at this solution's position. +/// The amount of smoke created is modified by scale. +/// +/// +public sealed partial class AreaReactionEntityEffectsSystem : EntityEffectSystem +{ + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedMapSystem _map = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; + [Dependency] private readonly SmokeSystem _smoke = default!; + [Dependency] private readonly SpreaderSystem _spreader = default!; + [Dependency] private readonly TurfSystem _turf = default!; + + // TODO: A sane way to make Smoke without a solution. + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var xform = Transform(entity); + var mapCoords = _xform.GetMapCoordinates(entity); + var spreadAmount = (int) Math.Max(0, Math.Ceiling(args.Scale / args.Effect.OverflowThreshold)); + var effect = args.Effect; + + if (!_mapManager.TryFindGridAt(mapCoords, out var gridUid, out var grid) || + !_map.TryGetTileRef(gridUid, grid, xform.Coordinates, out var tileRef)) + return; + + if (_spreader.RequiresFloorToSpread(effect.PrototypeId.ToString()) && _turf.IsSpace(tileRef)) + return; + + var coords = _map.MapToGrid(gridUid, mapCoords); + var ent = Spawn(args.Effect.PrototypeId, coords.SnapToGrid()); + + _smoke.StartSmoke(ent, entity.Comp.Solution, args.Effect.Duration, spreadAmount); + + _audio.PlayPvs(args.Effect.Sound, entity, AudioParams.Default.WithVariation(0.25f)); + } +} diff --git a/Content.Server/EntityEffects/Effects/Transform/ExplosionEntityEffectSystem.cs b/Content.Server/EntityEffects/Effects/Transform/ExplosionEntityEffectSystem.cs new file mode 100644 index 0000000000..55fc120051 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/Transform/ExplosionEntityEffectSystem.cs @@ -0,0 +1,28 @@ +using Content.Server.Explosion.EntitySystems; +using Content.Shared.EntityEffects; +using Content.Shared.EntityEffects.Effects.Transform; + +namespace Content.Server.EntityEffects.Effects.Transform; + +/// +/// Creates an explosion at this entity's position. +/// Intensity is modified by scale. +/// +/// +public sealed partial class ExplosionEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly ExplosionSystem _explosion = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var intensity = MathF.Min(args.Effect.IntensityPerUnit * args.Scale, args.Effect.MaxTotalIntensity); + + _explosion.QueueExplosion( + entity, + args.Effect.ExplosionType, + intensity, + args.Effect.IntensitySlope, + args.Effect.MaxIntensity, + args.Effect.TileBreakScale); + } +} diff --git a/Content.Server/EntityEffects/EntityEffectSystem.cs b/Content.Server/EntityEffects/EntityEffectSystem.cs deleted file mode 100644 index 238ef4849d..0000000000 --- a/Content.Server/EntityEffects/EntityEffectSystem.cs +++ /dev/null @@ -1,976 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using Content.Server.Atmos.EntitySystems; -using Content.Server.Body.Components; -using Content.Server.Body.Systems; -using Content.Server.Botany.Components; -using Content.Server.Botany.Systems; -using Content.Server.Botany; -using Content.Server.Chat.Systems; -using Content.Server.Emp; -using Content.Server.Explosion.EntitySystems; -using Content.Server.Fluids.EntitySystems; -using Content.Server.Ghost.Roles.Components; -using Content.Server.Polymorph.Components; -using Content.Server.Polymorph.Systems; -using Content.Server.Speech.Components; -using Content.Server.Spreader; -using Content.Server.Temperature.Components; -using Content.Server.Temperature.Systems; -using Content.Server.Zombies; -using Content.Shared.Atmos; -using Content.Shared.Atmos.Components; -using Content.Shared.Body.Components; -using Content.Shared.Coordinates.Helpers; -using Content.Shared.EntityEffects.EffectConditions; -using Content.Shared.EntityEffects.Effects.PlantMetabolism; -using Content.Shared.EntityEffects.Effects; -using Content.Shared.EntityEffects; -using Content.Shared.Flash; -using Content.Shared.Maps; -using Content.Shared.Medical; -using Content.Shared.Mind.Components; -using Content.Shared.Popups; -using Content.Shared.Random; -using Content.Shared.Traits.Assorted; -using Content.Shared.Zombies; -using Robust.Server.GameObjects; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Map; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -using TemperatureCondition = Content.Shared.EntityEffects.EffectConditions.Temperature; // disambiguate the namespace -using PolymorphEffect = Content.Shared.EntityEffects.Effects.Polymorph; - -namespace Content.Server.EntityEffects; - -public sealed class EntityEffectSystem : EntitySystem -{ - private static readonly ProtoId RandomPickBotanyReagent = "RandomPickBotanyReagent"; - - [Dependency] private readonly AtmosphereSystem _atmosphere = default!; - [Dependency] private readonly BloodstreamSystem _bloodstream = default!; - [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly EmpSystem _emp = default!; - [Dependency] private readonly ExplosionSystem _explosion = default!; - [Dependency] private readonly FlammableSystem _flammable = default!; - [Dependency] private readonly SharedFlashSystem _flash = default!; - [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly IPrototypeManager _protoManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedMapSystem _map = default!; - [Dependency] private readonly MutationSystem _mutation = default!; - [Dependency] private readonly NarcolepsySystem _narcolepsy = default!; - [Dependency] private readonly PlantHolderSystem _plantHolder = default!; - [Dependency] private readonly PolymorphSystem _polymorph = default!; - [Dependency] private readonly RespiratorSystem _respirator = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedPointLightSystem _pointLight = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly SmokeSystem _smoke = default!; - [Dependency] private readonly SpreaderSystem _spreader = default!; - [Dependency] private readonly TemperatureSystem _temperature = default!; - [Dependency] private readonly SharedTransformSystem _xform = default!; - [Dependency] private readonly VomitSystem _vomit = default!; - [Dependency] private readonly TurfSystem _turf = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent>(OnCheckTemperature); - SubscribeLocalEvent>(OnCheckBreathing); - SubscribeLocalEvent>(OnCheckOrganType); - SubscribeLocalEvent>(OnExecutePlantAdjustHealth); - SubscribeLocalEvent>(OnExecutePlantAdjustMutationLevel); - SubscribeLocalEvent>(OnExecutePlantAdjustMutationMod); - SubscribeLocalEvent>(OnExecutePlantAdjustNutrition); - SubscribeLocalEvent>(OnExecutePlantAdjustPests); - SubscribeLocalEvent>(OnExecutePlantAdjustPotency); - SubscribeLocalEvent>(OnExecutePlantAdjustToxins); - SubscribeLocalEvent>(OnExecutePlantAdjustWater); - SubscribeLocalEvent>(OnExecutePlantAdjustWeeds); - SubscribeLocalEvent>(OnExecutePlantAffectGrowth); - SubscribeLocalEvent>(OnExecutePlantChangeStat); - SubscribeLocalEvent>(OnExecutePlantCryoxadone); - SubscribeLocalEvent>(OnExecutePlantDestroySeeds); - SubscribeLocalEvent>(OnExecutePlantDiethylamine); - SubscribeLocalEvent>(OnExecutePlantPhalanximine); - SubscribeLocalEvent>(OnExecutePlantRestoreSeeds); - SubscribeLocalEvent>(OnExecuteRobustHarvest); - SubscribeLocalEvent>(OnExecuteAdjustTemperature); - SubscribeLocalEvent>(OnExecuteAreaReactionEffect); - SubscribeLocalEvent>(OnExecuteCauseZombieInfection); - SubscribeLocalEvent>(OnExecuteChemCleanBloodstream); - SubscribeLocalEvent>(OnExecuteChemVomit); - SubscribeLocalEvent>(OnExecuteCreateEntityReactionEffect); - SubscribeLocalEvent>(OnExecuteCreateGas); - SubscribeLocalEvent>(OnExecuteCureZombieInfection); - SubscribeLocalEvent>(OnExecuteEmote); - SubscribeLocalEvent>(OnExecuteEmpReactionEffect); - SubscribeLocalEvent>(OnExecuteExplosionReactionEffect); - SubscribeLocalEvent>(OnExecuteFlammableReaction); - SubscribeLocalEvent>(OnExecuteFlashReactionEffect); - SubscribeLocalEvent>(OnExecuteIgnite); - SubscribeLocalEvent>(OnExecuteMakeSentient); - SubscribeLocalEvent>(OnExecuteModifyBleedAmount); - SubscribeLocalEvent>(OnExecuteModifyBloodLevel); - SubscribeLocalEvent>(OnExecuteModifyLungGas); - SubscribeLocalEvent>(OnExecuteOxygenate); - SubscribeLocalEvent>(OnExecutePlantMutateChemicals); - SubscribeLocalEvent>(OnExecutePlantMutateConsumeGasses); - SubscribeLocalEvent>(OnExecutePlantMutateExudeGasses); - SubscribeLocalEvent>(OnExecutePlantMutateHarvest); - SubscribeLocalEvent>(OnExecutePlantSpeciesChange); - SubscribeLocalEvent>(OnExecutePolymorph); - SubscribeLocalEvent>(OnExecuteResetNarcolepsy); - } - - private void OnCheckTemperature(ref CheckEntityEffectConditionEvent args) - { - args.Result = false; - if (TryComp(args.Args.TargetEntity, out TemperatureComponent? temp)) - { - if (temp.CurrentTemperature >= args.Condition.Min && temp.CurrentTemperature <= args.Condition.Max) - args.Result = true; - } - } - - private void OnCheckBreathing(ref CheckEntityEffectConditionEvent args) - { - if (!TryComp(args.Args.TargetEntity, out RespiratorComponent? respiratorComp)) - { - args.Result = !args.Condition.IsBreathing; - return; - } - - var breathingState = _respirator.IsBreathing((args.Args.TargetEntity, respiratorComp)); - args.Result = args.Condition.IsBreathing == breathingState; - } - - private void OnCheckOrganType(ref CheckEntityEffectConditionEvent args) - { - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - if (reagentArgs.OrganEntity == null) - { - args.Result = false; - return; - } - - args.Result = OrganCondition(args.Condition, reagentArgs.OrganEntity.Value); - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - public bool OrganCondition(OrganType condition, Entity metabolizer) - { - metabolizer.Comp ??= EntityManager.GetComponentOrNull(metabolizer.Owner); - if (metabolizer.Comp != null - && metabolizer.Comp.MetabolizerTypes != null - && metabolizer.Comp.MetabolizerTypes.Contains(condition.Type)) - return condition.ShouldHave; - return !condition.ShouldHave; - } - - /// - /// Checks if the plant holder can metabolize the reagent or not. Checks if it has an alive plant by default. - /// - /// The entity holding the plant - /// The plant holder component - /// The entity manager - /// Whether to check if it has an alive plant or not - /// - private bool CanMetabolizePlant(EntityUid plantHolder, [NotNullWhen(true)] out PlantHolderComponent? plantHolderComponent, - bool mustHaveAlivePlant = true, bool mustHaveMutableSeed = false) - { - plantHolderComponent = null; - - if (!TryComp(plantHolder, out plantHolderComponent)) - return false; - - if (mustHaveAlivePlant && (plantHolderComponent.Seed == null || plantHolderComponent.Dead)) - return false; - - if (mustHaveMutableSeed && (plantHolderComponent.Seed == null || plantHolderComponent.Seed.Immutable)) - return false; - - return true; - } - - private void OnExecutePlantAdjustHealth(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - plantHolderComp.Health += args.Effect.Amount; - _plantHolder.CheckHealth(args.Args.TargetEntity, plantHolderComp); - } - - private void OnExecutePlantAdjustMutationLevel(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - plantHolderComp.MutationLevel += args.Effect.Amount * plantHolderComp.MutationMod; - } - - private void OnExecutePlantAdjustMutationMod(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - plantHolderComp.MutationMod += args.Effect.Amount; - } - - private void OnExecutePlantAdjustNutrition(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp, mustHaveAlivePlant: false)) - return; - - _plantHolder.AdjustNutrient(args.Args.TargetEntity, args.Effect.Amount, plantHolderComp); - } - - private void OnExecutePlantAdjustPests(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - plantHolderComp.PestLevel += args.Effect.Amount; - } - - private void OnExecutePlantAdjustPotency(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - if (plantHolderComp.Seed == null) - return; - - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - plantHolderComp.Seed.Potency = Math.Max(plantHolderComp.Seed.Potency + args.Effect.Amount, 1); - } - - private void OnExecutePlantAdjustToxins(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - plantHolderComp.Toxins += args.Effect.Amount; - } - - private void OnExecutePlantAdjustWater(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp, mustHaveAlivePlant: false)) - return; - - _plantHolder.AdjustWater(args.Args.TargetEntity, args.Effect.Amount, plantHolderComp); - } - - private void OnExecutePlantAdjustWeeds(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - plantHolderComp.WeedLevel += args.Effect.Amount; - } - - private void OnExecutePlantAffectGrowth(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - _plantHolder.AffectGrowth(args.Args.TargetEntity, (int) args.Effect.Amount, plantHolderComp); - } - - // Mutate reference 'val' between 'min' and 'max' by pretending the value - // is representable by a thermometer code with 'bits' number of bits and - // randomly flipping some of them. - private void MutateFloat(ref float val, float min, float max, int bits) - { - if (min == max) - { - val = min; - return; - } - - // Starting number of bits that are high, between 0 and bits. - // In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded. - int valInt = (int)MathF.Round((val - min) / (max - min) * bits); - // val may be outside the range of min/max due to starting prototype values, so clamp. - valInt = Math.Clamp(valInt, 0, bits); - - // Probability that the bit flip increases n. - // The higher the current value is, the lower the probability of increasing value is, and the higher the probability of decreasive it it. - // In other words, it tends to go to the middle. - float probIncrease = 1 - (float)valInt / bits; - int valIntMutated; - if (_random.Prob(probIncrease)) - { - valIntMutated = valInt + 1; - } - else - { - valIntMutated = valInt - 1; - } - - // Set value based on mutated thermometer code. - float valMutated = Math.Clamp((float)valIntMutated / bits * (max - min) + min, min, max); - val = valMutated; - } - - private void MutateInt(ref int val, int min, int max, int bits) - { - if (min == max) - { - val = min; - return; - } - - // Starting number of bits that are high, between 0 and bits. - // In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded. - int valInt = (int)MathF.Round((val - min) / (max - min) * bits); - // val may be outside the range of min/max due to starting prototype values, so clamp. - valInt = Math.Clamp(valInt, 0, bits); - - // Probability that the bit flip increases n. - // The higher the current value is, the lower the probability of increasing value is, and the higher the probability of decreasing it. - // In other words, it tends to go to the middle. - float probIncrease = 1 - (float)valInt / bits; - int valMutated; - if (_random.Prob(probIncrease)) - { - valMutated = val + 1; - } - else - { - valMutated = val - 1; - } - - valMutated = Math.Clamp(valMutated, min, max); - val = valMutated; - } - - private void OnExecutePlantChangeStat(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - if (plantHolderComp.Seed == null) - return; - - var member = plantHolderComp.Seed.GetType().GetField(args.Effect.TargetValue); - - if (member == null) - { - _mutation.Log.Error(args.Effect.GetType().Name + " Error: Member " + args.Effect.TargetValue + " not found on " + plantHolderComp.Seed.GetType().Name + ". Did you misspell it?"); - return; - } - - var currentValObj = member.GetValue(plantHolderComp.Seed); - if (currentValObj == null) - return; - - if (member.FieldType == typeof(float)) - { - var floatVal = (float)currentValObj; - MutateFloat(ref floatVal, args.Effect.MinValue, args.Effect.MaxValue, args.Effect.Steps); - member.SetValue(plantHolderComp.Seed, floatVal); - } - else if (member.FieldType == typeof(int)) - { - var intVal = (int)currentValObj; - MutateInt(ref intVal, (int)args.Effect.MinValue, (int)args.Effect.MaxValue, args.Effect.Steps); - member.SetValue(plantHolderComp.Seed, intVal); - } - else if (member.FieldType == typeof(bool)) - { - var boolVal = (bool)currentValObj; - boolVal = !boolVal; - member.SetValue(plantHolderComp.Seed, boolVal); - } - } - - private void OnExecutePlantCryoxadone(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - var deviation = 0; - var seed = plantHolderComp.Seed; - if (seed == null) - return; - if (plantHolderComp.Age > seed.Maturation) - deviation = (int) Math.Max(seed.Maturation - 1, plantHolderComp.Age - _random.Next(7, 10)); - else - deviation = (int) (seed.Maturation / seed.GrowthStages); - plantHolderComp.Age -= deviation; - plantHolderComp.LastProduce = plantHolderComp.Age; - plantHolderComp.SkipAging++; - plantHolderComp.ForceUpdate = true; - } - - private void OnExecutePlantDestroySeeds(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp, mustHaveMutableSeed: true)) - return; - - if (plantHolderComp.Seed!.Seedless == false) - { - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - _popup.PopupEntity( - Loc.GetString("botany-plant-seedsdestroyed"), - args.Args.TargetEntity, - PopupType.SmallCaution - ); - plantHolderComp.Seed.Seedless = true; - } - } - - private void OnExecutePlantDiethylamine(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp, mustHaveMutableSeed: true)) - return; - - if (_random.Prob(0.1f)) - { - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - plantHolderComp.Seed!.Lifespan++; - } - - if (_random.Prob(0.1f)) - { - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - plantHolderComp.Seed!.Endurance++; - } - } - - private void OnExecutePlantPhalanximine(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp, mustHaveMutableSeed: true)) - return; - - plantHolderComp.Seed!.Viable = true; - } - - private void OnExecutePlantRestoreSeeds(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp, mustHaveMutableSeed: true)) - return; - - if (plantHolderComp.Seed!.Seedless) - { - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - _popup.PopupEntity(Loc.GetString("botany-plant-seedsrestored"), args.Args.TargetEntity); - plantHolderComp.Seed.Seedless = false; - } - } - - private void OnExecuteRobustHarvest(ref ExecuteEntityEffectEvent args) - { - if (!CanMetabolizePlant(args.Args.TargetEntity, out var plantHolderComp)) - return; - - if (plantHolderComp.Seed == null) - return; - - if (plantHolderComp.Seed.Potency < args.Effect.PotencyLimit) - { - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - plantHolderComp.Seed.Potency = Math.Min(plantHolderComp.Seed.Potency + args.Effect.PotencyIncrease, args.Effect.PotencyLimit); - - if (plantHolderComp.Seed.Potency > args.Effect.PotencySeedlessThreshold) - { - plantHolderComp.Seed.Seedless = true; - } - } - else if (plantHolderComp.Seed.Yield > 1 && _random.Prob(0.1f)) - { - // Too much of a good thing reduces yield - _plantHolder.EnsureUniqueSeed(args.Args.TargetEntity, plantHolderComp); - plantHolderComp.Seed.Yield--; - } - } - - private void OnExecuteAdjustTemperature(ref ExecuteEntityEffectEvent args) - { - if (TryComp(args.Args.TargetEntity, out TemperatureComponent? temp)) - { - var amount = args.Effect.Amount; - - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - amount *= reagentArgs.Scale.Float(); - } - - _temperature.ChangeHeat(args.Args.TargetEntity, amount, true, temp); - } - } - - private void OnExecuteAreaReactionEffect(ref ExecuteEntityEffectEvent args) - { - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - if (reagentArgs.Source == null) - return; - - var spreadAmount = (int) Math.Max(0, Math.Ceiling((reagentArgs.Quantity / args.Effect.OverflowThreshold).Float())); - var splitSolution = reagentArgs.Source.SplitSolution(reagentArgs.Source.Volume); - var transform = Comp(reagentArgs.TargetEntity); - var mapCoords = _xform.GetMapCoordinates(reagentArgs.TargetEntity, xform: transform); - - if (!_mapManager.TryFindGridAt(mapCoords, out var gridUid, out var grid) || - !_map.TryGetTileRef(gridUid, grid, transform.Coordinates, out var tileRef)) - { - return; - } - - if (_spreader.RequiresFloorToSpread(args.Effect.PrototypeId) && _turf.IsSpace(tileRef)) - return; - - var coords = _map.MapToGrid(gridUid, mapCoords); - var ent = Spawn(args.Effect.PrototypeId, coords.SnapToGrid()); - - _smoke.StartSmoke(ent, splitSolution, args.Effect.Duration, spreadAmount); - - _audio.PlayPvs(args.Effect.Sound, reagentArgs.TargetEntity, AudioParams.Default.WithVariation(0.25f)); - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - private void OnExecuteCauseZombieInfection(ref ExecuteEntityEffectEvent args) - { - EnsureComp(args.Args.TargetEntity); - EnsureComp(args.Args.TargetEntity); - } - - private void OnExecuteChemCleanBloodstream(ref ExecuteEntityEffectEvent args) - { - var cleanseRate = args.Effect.CleanseRate; - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - if (reagentArgs.Source == null || reagentArgs.Reagent == null) - return; - - cleanseRate *= reagentArgs.Scale.Float(); - _bloodstream.FlushChemicals(args.Args.TargetEntity, reagentArgs.Reagent, cleanseRate); - } - else - { - _bloodstream.FlushChemicals(args.Args.TargetEntity, null, cleanseRate); - } - } - - private void OnExecuteChemVomit(ref ExecuteEntityEffectEvent args) - { - if (args.Args is EntityEffectReagentArgs reagentArgs) - if (reagentArgs.Scale != 1f) - return; - - _vomit.Vomit(args.Args.TargetEntity, args.Effect.ThirstAmount, args.Effect.HungerAmount); - } - - private void OnExecuteCreateEntityReactionEffect(ref ExecuteEntityEffectEvent args) - { - var transform = Comp(args.Args.TargetEntity); - var quantity = (int)args.Effect.Number; - if (args.Args is EntityEffectReagentArgs reagentArgs) - quantity *= reagentArgs.Quantity.Int(); - - for (var i = 0; i < quantity; i++) - { - var uid = Spawn(args.Effect.Entity, _xform.GetMapCoordinates(args.Args.TargetEntity, xform: transform)); - _xform.AttachToGridOrMap(uid); - - // TODO figure out how to properly spawn inside of containers - // e.g. cheese: - // if the user is holding a bowl milk & enzyme, should drop to floor, not attached to the user. - // if reaction happens in a backpack, should insert cheese into backpack. - // --> if it doesn't fit, iterate through parent storage until it attaches to the grid (again, DON'T attach to players). - // if the reaction happens INSIDE a stomach? the bloodstream? I have no idea how to handle that. - // presumably having cheese materialize inside of your blood would have "disadvantages". - } - } - - private void OnExecuteCreateGas(ref ExecuteEntityEffectEvent args) - { - var tileMix = _atmosphere.GetContainingMixture(args.Args.TargetEntity, false, true); - - if (tileMix != null) - { - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - tileMix.AdjustMoles(args.Effect.Gas, reagentArgs.Quantity.Float() * args.Effect.Multiplier); - } - else - { - tileMix.AdjustMoles(args.Effect.Gas, args.Effect.Multiplier); - } - } - } - - private void OnExecuteCureZombieInfection(ref ExecuteEntityEffectEvent args) - { - if (HasComp(args.Args.TargetEntity)) - return; - - RemComp(args.Args.TargetEntity); - RemComp(args.Args.TargetEntity); - - if (args.Effect.Innoculate) - { - EnsureComp(args.Args.TargetEntity); - } - } - - private void OnExecuteEmote(ref ExecuteEntityEffectEvent args) - { - if (args.Effect.EmoteId == null) - return; - - if (args.Effect.ShowInChat) - _chat.TryEmoteWithChat(args.Args.TargetEntity, args.Effect.EmoteId, ChatTransmitRange.GhostRangeLimit, forceEmote: args.Effect.Force); - else - _chat.TryEmoteWithoutChat(args.Args.TargetEntity, args.Effect.EmoteId); - } - - private void OnExecuteEmpReactionEffect(ref ExecuteEntityEffectEvent args) - { - var transform = Comp(args.Args.TargetEntity); - - var range = args.Effect.EmpRangePerUnit; - - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - range = MathF.Min((float) (reagentArgs.Quantity * args.Effect.EmpRangePerUnit), args.Effect.EmpMaxRange); - } - - _emp.EmpPulse(_xform.GetMapCoordinates(args.Args.TargetEntity, xform: transform), - range, - args.Effect.EnergyConsumption, - args.Effect.DisableDuration); - } - - private void OnExecuteExplosionReactionEffect(ref ExecuteEntityEffectEvent args) - { - var intensity = args.Effect.IntensityPerUnit; - - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - intensity = MathF.Min((float) reagentArgs.Quantity * args.Effect.IntensityPerUnit, args.Effect.MaxTotalIntensity); - } - - _explosion.QueueExplosion( - args.Args.TargetEntity, - args.Effect.ExplosionType, - intensity, - args.Effect.IntensitySlope, - args.Effect.MaxIntensity, - args.Effect.TileBreakScale); - } - - private void OnExecuteFlammableReaction(ref ExecuteEntityEffectEvent args) - { - if (!TryComp(args.Args.TargetEntity, out FlammableComponent? flammable)) - return; - - // Sets the multiplier for FireStacks to MultiplierOnExisting is 0 or greater and target already has FireStacks - var multiplier = flammable.FireStacks != 0f && args.Effect.MultiplierOnExisting >= 0 ? args.Effect.MultiplierOnExisting : args.Effect.Multiplier; - var quantity = 1f; - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - quantity = reagentArgs.Quantity.Float(); - _flammable.AdjustFireStacks(args.Args.TargetEntity, quantity * multiplier, flammable); - if (reagentArgs.Reagent != null) - reagentArgs.Source?.RemoveReagent(reagentArgs.Reagent.ID, reagentArgs.Quantity); - } - else - { - _flammable.AdjustFireStacks(args.Args.TargetEntity, multiplier, flammable); - } - } - - private void OnExecuteFlashReactionEffect(ref ExecuteEntityEffectEvent args) - { - var transform = Comp(args.Args.TargetEntity); - - var range = 1f; - - if (args.Args is EntityEffectReagentArgs reagentArgs) - range = MathF.Min((float)(reagentArgs.Quantity * args.Effect.RangePerUnit), args.Effect.MaxRange); - - _flash.FlashArea( - args.Args.TargetEntity, - null, - range, - args.Effect.Duration, - slowTo: args.Effect.SlowTo, - sound: args.Effect.Sound); - - if (args.Effect.FlashEffectPrototype == null) - return; - - var uid = EntityManager.SpawnEntity(args.Effect.FlashEffectPrototype, _xform.GetMapCoordinates(transform)); - _xform.AttachToGridOrMap(uid); - - if (!TryComp(uid, out var pointLightComp)) - return; - - _pointLight.SetRadius(uid, MathF.Max(1.1f, range), pointLightComp); - } - - private void OnExecuteIgnite(ref ExecuteEntityEffectEvent args) - { - if (!TryComp(args.Args.TargetEntity, out FlammableComponent? flammable)) - return; - - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - _flammable.Ignite(reagentArgs.TargetEntity, reagentArgs.OrganEntity ?? reagentArgs.TargetEntity, flammable: flammable); - } - else - { - _flammable.Ignite(args.Args.TargetEntity, args.Args.TargetEntity, flammable: flammable); - } - } - - private void OnExecuteMakeSentient(ref ExecuteEntityEffectEvent args) - { - var uid = args.Args.TargetEntity; - - // Let affected entities speak normally to make this effect different from, say, the "random sentience" event - // This also works on entities that already have a mind - // We call this before the mind check to allow things like player-controlled mice to be able to benefit from the effect - RemComp(uid); - RemComp(uid); - - // Stops from adding a ghost role to things like people who already have a mind - if (TryComp(uid, out var mindContainer) && mindContainer.HasMind) - { - return; - } - - // Don't add a ghost role to things that already have ghost roles - if (TryComp(uid, out GhostRoleComponent? ghostRole)) - { - return; - } - - ghostRole = AddComp(uid); - EnsureComp(uid); - - var entityData = Comp(uid); - ghostRole.RoleName = entityData.EntityName; - ghostRole.RoleDescription = Loc.GetString("ghost-role-information-cognizine-description"); - } - - private void OnExecuteModifyBleedAmount(ref ExecuteEntityEffectEvent args) - { - if (TryComp(args.Args.TargetEntity, out var blood)) - { - var amt = args.Effect.Amount; - if (args.Args is EntityEffectReagentArgs reagentArgs) { - if (args.Effect.Scaled) - amt *= reagentArgs.Quantity.Float(); - amt *= reagentArgs.Scale.Float(); - } - - _bloodstream.TryModifyBleedAmount((args.Args.TargetEntity, blood), amt); - } - } - - private void OnExecuteModifyBloodLevel(ref ExecuteEntityEffectEvent args) - { - if (TryComp(args.Args.TargetEntity, out var blood)) - { - var amt = args.Effect.Amount; - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - if (args.Effect.Scaled) - amt *= reagentArgs.Quantity; - amt *= reagentArgs.Scale; - } - - _bloodstream.TryModifyBloodLevel((args.Args.TargetEntity, blood), amt); - } - } - - private void OnExecuteModifyLungGas(ref ExecuteEntityEffectEvent args) - { - LungComponent? lung; - float amount = 1f; - - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - if (!TryComp(reagentArgs.OrganEntity, out var organLung)) - return; - lung = organLung; - amount = reagentArgs.Quantity.Float(); - } - else - { - if (!TryComp(args.Args.TargetEntity, out var organLung)) //Likely needs to be modified to ensure it works correctly - return; - lung = organLung; - } - - if (lung != null) - { - foreach (var (gas, ratio) in args.Effect.Ratios) - { - var quantity = ratio * amount / Atmospherics.BreathMolesToReagentMultiplier; - if (quantity < 0) - quantity = Math.Max(quantity, -lung.Air[(int) gas]); - lung.Air.AdjustMoles(gas, quantity); - } - } - } - - private void OnExecuteOxygenate(ref ExecuteEntityEffectEvent args) - { - var multiplier = 1f; - if (args.Args is EntityEffectReagentArgs reagentArgs) - { - multiplier = reagentArgs.Quantity.Float(); - } - - if (TryComp(args.Args.TargetEntity, out var resp)) - { - _respirator.UpdateSaturation(args.Args.TargetEntity, multiplier * args.Effect.Factor, resp); - } - } - - private void OnExecutePlantMutateChemicals(ref ExecuteEntityEffectEvent args) - { - var plantholder = Comp(args.Args.TargetEntity); - - if (plantholder.Seed == null) - return; - - var chemicals = plantholder.Seed.Chemicals; - var randomChems = _protoManager.Index(RandomPickBotanyReagent).Fills; - - // Add a random amount of a random chemical to this set of chemicals - if (randomChems != null) - { - var pick = _random.Pick(randomChems); - var chemicalId = _random.Pick(pick.Reagents); - var amount = _random.Next(1, (int)pick.Quantity); - var seedChemQuantity = new SeedChemQuantity(); - if (chemicals.ContainsKey(chemicalId)) - { - seedChemQuantity.Min = chemicals[chemicalId].Min; - seedChemQuantity.Max = chemicals[chemicalId].Max + amount; - } - else - { - seedChemQuantity.Min = 1; - seedChemQuantity.Max = 1 + amount; - seedChemQuantity.Inherent = false; - } - var potencyDivisor = (int)Math.Ceiling(100.0f / seedChemQuantity.Max); - seedChemQuantity.PotencyDivisor = potencyDivisor; - chemicals[chemicalId] = seedChemQuantity; - } - } - - private void OnExecutePlantMutateConsumeGasses(ref ExecuteEntityEffectEvent args) - { - var plantholder = Comp(args.Args.TargetEntity); - - if (plantholder.Seed == null) - return; - - var gasses = plantholder.Seed.ConsumeGasses; - - // Add a random amount of a random gas to this gas dictionary - float amount = _random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue); - Gas gas = _random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); - if (gasses.ContainsKey(gas)) - { - gasses[gas] += amount; - } - else - { - gasses.Add(gas, amount); - } - } - - private void OnExecutePlantMutateExudeGasses(ref ExecuteEntityEffectEvent args) - { - var plantholder = Comp(args.Args.TargetEntity); - - if (plantholder.Seed == null) - return; - - var gasses = plantholder.Seed.ExudeGasses; - - // Add a random amount of a random gas to this gas dictionary - float amount = _random.NextFloat(args.Effect.MinValue, args.Effect.MaxValue); - Gas gas = _random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); - if (gasses.ContainsKey(gas)) - { - gasses[gas] += amount; - } - else - { - gasses.Add(gas, amount); - } - } - - private void OnExecutePlantMutateHarvest(ref ExecuteEntityEffectEvent args) - { - var plantholder = Comp(args.Args.TargetEntity); - - if (plantholder.Seed == null) - return; - - if (plantholder.Seed.HarvestRepeat == HarvestType.NoRepeat) - plantholder.Seed.HarvestRepeat = HarvestType.Repeat; - else if (plantholder.Seed.HarvestRepeat == HarvestType.Repeat) - plantholder.Seed.HarvestRepeat = HarvestType.SelfHarvest; - } - - private void OnExecutePlantSpeciesChange(ref ExecuteEntityEffectEvent args) - { - var plantholder = Comp(args.Args.TargetEntity); - if (plantholder.Seed == null) - return; - - if (plantholder.Seed.MutationPrototypes.Count == 0) - return; - - var targetProto = _random.Pick(plantholder.Seed.MutationPrototypes); - if (!_protoManager.TryIndex(targetProto, out SeedPrototype? protoSeed)) - { - Log.Error($"Seed prototype could not be found: {targetProto}!"); - return; - } - - plantholder.Seed = plantholder.Seed.SpeciesChange(protoSeed); - } - - private void OnExecutePolymorph(ref ExecuteEntityEffectEvent args) - { - // Make it into a prototype - EnsureComp(args.Args.TargetEntity); - _polymorph.PolymorphEntity(args.Args.TargetEntity, args.Effect.PolymorphPrototype); - } - - private void OnExecuteResetNarcolepsy(ref ExecuteEntityEffectEvent args) - { - if (args.Args is EntityEffectReagentArgs reagentArgs) - if (reagentArgs.Scale != 1f) - return; - - _narcolepsy.AdjustNarcolepsyTimer(args.Args.TargetEntity, args.Effect.TimerReset); - } -} diff --git a/Content.Server/Fluids/EntitySystems/SmokeSystem.cs b/Content.Server/Fluids/EntitySystems/SmokeSystem.cs index 13695caff1..7c9d02c561 100644 --- a/Content.Server/Fluids/EntitySystems/SmokeSystem.cs +++ b/Content.Server/Fluids/EntitySystems/SmokeSystem.cs @@ -21,7 +21,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; using System.Linq; - +using Content.Shared.EntityEffects.Effects.Solution; using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent; namespace Content.Server.Fluids.EntitySystems; @@ -278,11 +278,10 @@ public sealed class SmokeSystem : EntitySystem { if (reagentQuantity.Quantity == FixedPoint2.Zero) continue; - var reagentProto = _prototype.Index(reagentQuantity.Reagent.Prototype); - _reactive.ReactionEntity(entity, ReactionMethod.Touch, reagentProto, reagentQuantity, transferSolution); + _reactive.ReactionEntity(entity, ReactionMethod.Touch, reagentQuantity); if (!blockIngestion) - _reactive.ReactionEntity(entity, ReactionMethod.Ingestion, reagentProto, reagentQuantity, transferSolution); + _reactive.ReactionEntity(entity, ReactionMethod.Ingestion, reagentQuantity); } if (blockIngestion) diff --git a/Content.Server/GuideGenerator/ChemistryJsonGenerator.cs b/Content.Server/GuideGenerator/ChemistryJsonGenerator.cs index 8fd088408c..930368255c 100644 --- a/Content.Server/GuideGenerator/ChemistryJsonGenerator.cs +++ b/Content.Server/GuideGenerator/ChemistryJsonGenerator.cs @@ -5,6 +5,7 @@ using System.Text.Json.Serialization; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; +using Content.Shared.EntityConditions; using Content.Shared.EntityEffects; using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; @@ -42,7 +43,7 @@ public sealed class ChemistryJsonGenerator Converters = { new UniversalJsonConverter(), - new UniversalJsonConverter(), + new UniversalJsonConverter(), new UniversalJsonConverter(), new UniversalJsonConverter(), new FixedPointJsonConverter() diff --git a/Content.Server/GuideGenerator/ReagentEntry.cs b/Content.Server/GuideGenerator/ReagentEntry.cs index 8b597ad61b..59a212dbd2 100644 --- a/Content.Server/GuideGenerator/ReagentEntry.cs +++ b/Content.Server/GuideGenerator/ReagentEntry.cs @@ -76,7 +76,7 @@ public sealed class ReactionEntry proto.Products .Select(x => KeyValuePair.Create(x.Key, x.Value.Float())) .ToDictionary(x => x.Key, x => x.Value); - Effects = proto.Effects; + Effects = proto.Effects.ToList(); } } diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index c2d2614a0a..1430f53cdd 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -41,6 +41,7 @@ using Content.Shared.Stacks; using Content.Server.Construction.Components; using Content.Shared.Chat; using Content.Shared.Damage; +using Content.Shared.Temperature.Components; using Robust.Shared.Utility; namespace Content.Server.Kitchen.EntitySystems diff --git a/Content.Server/Medical/CryoPodSystem.cs b/Content.Server/Medical/CryoPodSystem.cs index 20dc114918..8dab21902d 100644 --- a/Content.Server/Medical/CryoPodSystem.cs +++ b/Content.Server/Medical/CryoPodSystem.cs @@ -5,12 +5,12 @@ using Content.Server.Medical.Components; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.Nodes; -using Content.Server.Temperature.Components; using Content.Shared.Atmos; using Content.Shared.Body.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Medical.Cryogenics; using Content.Shared.MedicalScanner; +using Content.Shared.Temperature.Components; using Content.Shared.UserInterface; using Robust.Shared.Containers; diff --git a/Content.Server/Medical/HealthAnalyzerSystem.cs b/Content.Server/Medical/HealthAnalyzerSystem.cs index 11e4ed4fcf..657ac3e636 100644 --- a/Content.Server/Medical/HealthAnalyzerSystem.cs +++ b/Content.Server/Medical/HealthAnalyzerSystem.cs @@ -1,6 +1,5 @@ using Content.Server.Medical.Components; using Content.Server.PowerCell; -using Content.Server.Temperature.Components; using Content.Shared.Body.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; @@ -13,6 +12,7 @@ using Content.Shared.Item.ItemToggle.Components; using Content.Shared.MedicalScanner; using Content.Shared.Mobs.Components; using Content.Shared.Popups; +using Content.Shared.Temperature.Components; using Content.Shared.Traits.Assorted; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs index 81f9415121..e8fe9e4c39 100644 --- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs +++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs @@ -5,7 +5,6 @@ using Content.Server.NPC.Queries.Considerations; using Content.Server.NPC.Queries.Curves; using Content.Server.NPC.Queries.Queries; using Content.Server.Nutrition.Components; -using Content.Server.Temperature.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.Examine; @@ -30,6 +29,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Utility; using Content.Shared.Atmos.Components; using System.Linq; +using Content.Shared.Temperature.Components; namespace Content.Server.NPC.Systems; diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs index 6290e8231a..f6a7536994 100644 --- a/Content.Server/Temperature/Systems/TemperatureSystem.cs +++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs @@ -10,14 +10,14 @@ using Content.Shared.Database; using Content.Shared.Inventory; using Content.Shared.Rejuvenate; using Content.Shared.Temperature; -using Robust.Shared.Physics.Components; using Robust.Shared.Prototypes; -using Robust.Shared.Physics.Events; using Content.Shared.Projectiles; +using Content.Shared.Temperature.Components; +using Content.Shared.Temperature.Systems; namespace Content.Server.Temperature.Systems; -public sealed class TemperatureSystem : EntitySystem +public sealed class TemperatureSystem : SharedTemperatureSystem { [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly AtmosphereSystem _atmosphere = default!; @@ -125,8 +125,7 @@ public sealed class TemperatureSystem : EntitySystem true); } - public void ChangeHeat(EntityUid uid, float heatAmount, bool ignoreHeatResistance = false, - TemperatureComponent? temperature = null) + public override void ChangeHeat(EntityUid uid, float heatAmount, bool ignoreHeatResistance = false, TemperatureComponent? temperature = null) { if (!Resolve(uid, ref temperature, false)) return; @@ -161,16 +160,6 @@ public sealed class TemperatureSystem : EntitySystem ChangeHeat(uid, heat * temperature.AtmosTemperatureTransferEfficiency, temperature: temperature); } - public float GetHeatCapacity(EntityUid uid, TemperatureComponent? comp = null, PhysicsComponent? physics = null) - { - if (!Resolve(uid, ref comp) || !Resolve(uid, ref physics, false) || physics.FixturesMass <= 0) - { - return Atmospherics.MinimumHeatCapacity; - } - - return comp.SpecificHeat * physics.FixturesMass; - } - private void OnInit(EntityUid uid, InternalTemperatureComponent comp, MapInitEvent args) { if (!TryComp(uid, out var temp)) diff --git a/Content.Server/Tiles/TileEntityEffectComponent.cs b/Content.Server/Tiles/TileEntityEffectComponent.cs index 4201af47f9..70f11bb060 100644 --- a/Content.Server/Tiles/TileEntityEffectComponent.cs +++ b/Content.Server/Tiles/TileEntityEffectComponent.cs @@ -14,6 +14,6 @@ public sealed partial class TileEntityEffectComponent : Component /// /// List of effects that should be applied. /// - [ViewVariables(VVAccess.ReadWrite), DataField] + [DataField] public List Effects = default!; } diff --git a/Content.Server/Tiles/TileEntityEffectSystem.cs b/Content.Server/Tiles/TileEntityEffectSystem.cs index 4d866cb254..bd4aa789c2 100644 --- a/Content.Server/Tiles/TileEntityEffectSystem.cs +++ b/Content.Server/Tiles/TileEntityEffectSystem.cs @@ -1,13 +1,11 @@ -using Content.Server.Atmos.Components; -using Content.Server.Atmos.EntitySystems; using Content.Shared.StepTrigger.Systems; -using Content.Shared.Chemistry.Reagent; using Content.Shared.EntityEffects; namespace Content.Server.Tiles; public sealed class TileEntityEffectSystem : EntitySystem { + [Dependency] private readonly SharedEntityEffectsSystem _entityEffects = default!; public override void Initialize() { @@ -23,11 +21,7 @@ public sealed class TileEntityEffectSystem : EntitySystem private void OnTileStepTriggered(Entity ent, ref StepTriggeredOffEvent args) { var otherUid = args.Tripper; - var effectArgs = new EntityEffectBaseArgs(otherUid, EntityManager); - foreach (var effect in ent.Comp.Effects) - { - effect.Effect(effectArgs); - } + _entityEffects.ApplyEffects(otherUid, ent.Comp.Effects.ToArray()); } } diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 7cdcec78c2..720fec490a 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -13,7 +13,6 @@ using Content.Server.NPC.HTN; using Content.Server.NPC.Systems; using Content.Server.StationEvents.Components; using Content.Server.Speech.Components; -using Content.Server.Temperature.Components; using Content.Shared.Body.Components; using Content.Shared.Chat; using Content.Shared.CombatMode; @@ -44,6 +43,7 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Content.Shared.NPC.Prototypes; using Content.Shared.Roles; +using Content.Shared.Temperature.Components; namespace Content.Server.Zombies; diff --git a/Content.Shared.Database/LogType.cs b/Content.Shared.Database/LogType.cs index 58a41a5f7a..d905cc03ae 100644 --- a/Content.Shared.Database/LogType.cs +++ b/Content.Shared.Database/LogType.cs @@ -81,9 +81,9 @@ public enum LogType ChemicalReaction = 17, /// - /// Reagent effects related interactions. + /// EntityEffect related interactions. /// - ReagentEffect = 18, + EntityEffect = 18, /// /// Canister valve was opened or closed. diff --git a/Content.Shared/Body/Components/LungComponent.cs b/Content.Shared/Body/Components/LungComponent.cs index dd31de7722..ab1869f8b1 100644 --- a/Content.Shared/Body/Components/LungComponent.cs +++ b/Content.Shared/Body/Components/LungComponent.cs @@ -22,7 +22,7 @@ public sealed partial class LungComponent : Component /// The name/key of the solution on this entity which these lungs act on. /// [DataField] - public string SolutionName = LungSystem.LungSolutionName; + public string SolutionName = "Lung"; /// /// The solution on this entity that these lungs act on. diff --git a/Content.Shared/Body/Systems/LungSystem.cs b/Content.Shared/Body/Systems/LungSystem.cs index 5f4c1ee4ef..a097a7752a 100644 --- a/Content.Shared/Body/Systems/LungSystem.cs +++ b/Content.Shared/Body/Systems/LungSystem.cs @@ -1,11 +1,14 @@ +using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Atmos.EntitySystems; using Content.Shared.Body.Components; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Atmos; +using Content.Shared.Body.Prototypes; using Content.Shared.Chemistry.Components; -using Content.Shared.Clothing; +using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Inventory.Events; +using Robust.Shared.Prototypes; +using BreathToolComponent = Content.Shared.Atmos.Components.BreathToolComponent; +using InternalsComponent = Content.Shared.Body.Components.InternalsComponent; namespace Content.Shared.Body.Systems; @@ -15,8 +18,6 @@ public sealed class LungSystem : EntitySystem [Dependency] private readonly SharedInternalsSystem _internals = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - public static string LungSolutionName = "Lung"; - public override void Initialize() { base.Initialize(); @@ -53,6 +54,7 @@ public sealed class LungSystem : EntitySystem } } + // TODO: JUST METABOLIZE GASES DIRECTLY DON'T CONVERT TO REAGENTS!!! (Needs Metabolism refactor :B) public void GasToReagent(EntityUid uid, LungComponent lung) { if (!_solutionContainerSystem.ResolveSolution(uid, lung.SolutionName, ref lung.Solution, out var solution)) diff --git a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs index 3b46d3913c..ee85fe65b7 100644 --- a/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs +++ b/Content.Shared/Body/Systems/SharedBloodstreamSystem.cs @@ -6,7 +6,8 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; -using Content.Shared.EntityEffects.Effects; +using Content.Shared.EntityEffects.Effects.Solution; +using Content.Shared.EntityEffects.Effects.Transform; using Content.Shared.FixedPoint; using Content.Shared.Fluids; using Content.Shared.Forensics.Components; @@ -149,7 +150,9 @@ public abstract class SharedBloodstreamSystem : EntitySystem { switch (effect) { - case CreateEntityReactionEffect: // Prevent entities from spawning in the bloodstream + // TODO: Rather than this, ReactionAttempt should allow systems to remove effects from the list before the reaction. + // TODO: I think there's a PR up on the repo for this and if there isn't I'll make one -Princess + case EntityEffects.Effects.EntitySpawning.SpawnEntity: // Prevent entities from spawning in the bloodstream case AreaReactionEffect: // No spontaneous smoke or foam leaking out of blood vessels. args.Cancelled = true; return; diff --git a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs index 54210cf195..671a30dec4 100644 --- a/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs +++ b/Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs @@ -707,6 +707,7 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem } // Thermal energy and temperature management. + // TODO: ENERGY CONSERVATION!!! Nuke this once we have HeatContainers and use methods which properly conserve energy and model heat transfer correctly! #region Thermal Energy and Temperature @@ -763,6 +764,26 @@ public abstract partial class SharedSolutionContainerSystem : EntitySystem UpdateChemicals(soln); } + /// + /// Same as but clamps the value between two temperature values. + /// + /// Solution we're adjusting the energy of + /// Thermal energy we're adding or removing + /// Min desired temperature + /// Max desired temperature + public void AddThermalEnergyClamped(Entity soln, float thermalEnergy, float min, float max) + { + var solution = soln.Comp.Solution; + + if (thermalEnergy == 0.0f) + return; + + var heatCap = solution.GetHeatCapacity(PrototypeManager); + var deltaT = thermalEnergy / heatCap; + solution.Temperature = Math.Clamp(solution.Temperature + deltaT, min, max); + UpdateChemicals(soln); + } + #endregion Thermal Energy and Temperature #region Event Handlers diff --git a/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs b/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs index 351a51ecc1..a995ef90f4 100644 --- a/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs +++ b/Content.Shared/Chemistry/Reaction/ChemicalReactionSystem.cs @@ -31,6 +31,7 @@ namespace Content.Shared.Chemistry.Reaction [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + [Dependency] private readonly SharedEntityEffectsSystem _entityEffects = default!; /// /// A cache of all reactions indexed by at most ONE of their required reactants. @@ -205,27 +206,12 @@ namespace Content.Shared.Chemistry.Reaction private void OnReaction(Entity soln, ReactionPrototype reaction, ReagentPrototype? reagent, FixedPoint2 unitReactions) { - var args = new EntityEffectReagentArgs(soln, EntityManager, null, soln.Comp.Solution, unitReactions, reagent, null, 1f); - var posFound = _transformSystem.TryGetMapOrGridCoordinates(soln, out var gridPos); _adminLogger.Add(LogType.ChemicalReaction, reaction.Impact, $"Chemical reaction {reaction.ID:reaction} occurred with strength {unitReactions:strength} on entity {ToPrettyString(soln):metabolizer} at Pos:{(posFound ? $"{gridPos:coordinates}" : "[Grid or Map not Found]")}"); - foreach (var effect in reaction.Effects) - { - if (!effect.ShouldApply(args)) - continue; - - if (effect.ShouldLog) - { - var entity = args.TargetEntity; - _adminLogger.Add(LogType.ReagentEffect, effect.LogImpact, - $"Reaction effect {effect.GetType().Name:effect} of reaction {reaction.ID:reaction} applied on entity {ToPrettyString(entity):entity} at Pos:{(posFound ? $"{gridPos:coordinates}" : "[Grid or Map not Found")}"); - } - - effect.Effect(args); - } + _entityEffects.ApplyEffects(soln, reaction.Effects, unitReactions.Float()); // Someday, some brave soul will thread through an optional actor // argument in from every call of OnReaction up, all just to pass diff --git a/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs b/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs index 4bbb972572..c9a24ec550 100644 --- a/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs +++ b/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs @@ -60,7 +60,7 @@ namespace Content.Shared.Chemistry.Reaction /// /// Effects to be triggered when the reaction occurs. /// - [DataField("effects")] public List Effects = new(); + [DataField("effects")] public EntityEffect[] Effects = []; /// /// How dangerous is this effect? Stuff like bicaridine should be low, while things like methamphetamine diff --git a/Content.Shared/Chemistry/Reaction/ReactiveComponent.cs b/Content.Shared/Chemistry/Reaction/ReactiveComponent.cs index cabdee93c1..89fcca900e 100644 --- a/Content.Shared/Chemistry/Reaction/ReactiveComponent.cs +++ b/Content.Shared/Chemistry/Reaction/ReactiveComponent.cs @@ -34,7 +34,7 @@ public sealed partial class ReactiveReagentEffectEntry public HashSet? Reagents = null; [DataField("effects", required: true)] - public List Effects = default!; + public EntityEffect[] Effects = default!; [DataField("groups", readOnly: true, serverOnly: true, customTypeSerializer:typeof(PrototypeIdDictionarySerializer, ReactiveGroupPrototype>))] diff --git a/Content.Shared/Chemistry/ReactiveSystem.cs b/Content.Shared/Chemistry/ReactiveSystem.cs index 6306537324..2ffb848f8a 100644 --- a/Content.Shared/Chemistry/ReactiveSystem.cs +++ b/Content.Shared/Chemistry/ReactiveSystem.cs @@ -1,108 +1,35 @@ -using Content.Shared.Administration.Logs; using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; -using Content.Shared.Database; -using Content.Shared.EntityEffects; +using Content.Shared.FixedPoint; using JetBrains.Annotations; using Robust.Shared.Prototypes; -using Robust.Shared.Random; namespace Content.Shared.Chemistry; [UsedImplicitly] public sealed class ReactiveSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _robustRandom = default!; - [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; public void DoEntityReaction(EntityUid uid, Solution solution, ReactionMethod method) { foreach (var reagent in solution.Contents.ToArray()) { - ReactionEntity(uid, method, reagent, solution); + ReactionEntity(uid, method, reagent); } } - public void ReactionEntity(EntityUid uid, ReactionMethod method, ReagentQuantity reagentQuantity, Solution? source) + public void ReactionEntity(EntityUid uid, ReactionMethod method, ReagentQuantity reagentQuantity) { - // We throw if the reagent specified doesn't exist. - var proto = _prototypeManager.Index(reagentQuantity.Reagent.Prototype); - ReactionEntity(uid, method, proto, reagentQuantity, source); - } - - public void ReactionEntity(EntityUid uid, ReactionMethod method, ReagentPrototype proto, - ReagentQuantity reagentQuantity, Solution? source) - { - if (!TryComp(uid, out ReactiveComponent? reactive)) + if (reagentQuantity.Quantity == FixedPoint2.Zero) return; - // custom event for bypassing reactivecomponent stuff - var ev = new ReactionEntityEvent(method, proto, reagentQuantity, source); + // We throw if the reagent specified doesn't exist. + if (!_proto.Resolve(reagentQuantity.Reagent.Prototype, out var proto)) + return; + + var ev = new ReactionEntityEvent(method, reagentQuantity, proto); RaiseLocalEvent(uid, ref ev); - - // If we have a source solution, use the reagent quantity we have left. Otherwise, use the reaction volume specified. - var args = new EntityEffectReagentArgs(uid, EntityManager, null, source, source?.GetReagentQuantity(reagentQuantity.Reagent) ?? reagentQuantity.Quantity, proto, method, 1f); - - // First, check if the reagent wants to apply any effects. - if (proto.ReactiveEffects != null && reactive.ReactiveGroups != null) - { - foreach (var (key, val) in proto.ReactiveEffects) - { - if (!val.Methods.Contains(method)) - continue; - - if (!reactive.ReactiveGroups.ContainsKey(key)) - continue; - - if (!reactive.ReactiveGroups[key].Contains(method)) - continue; - - foreach (var effect in val.Effects) - { - if (!effect.ShouldApply(args, _robustRandom)) - continue; - - if (effect.ShouldLog) - { - var entity = args.TargetEntity; - _adminLogger.Add(LogType.ReagentEffect, effect.LogImpact, - $"Reactive effect {effect.GetType().Name:effect} of reagent {proto.ID:reagent} with method {method} applied on entity {ToPrettyString(entity):entity} at {Transform(entity).Coordinates:coordinates}"); - } - - effect.Effect(args); - } - } - } - - // Then, check if the prototype has any effects it can apply as well. - if (reactive.Reactions != null) - { - foreach (var entry in reactive.Reactions) - { - if (!entry.Methods.Contains(method)) - continue; - - if (entry.Reagents != null && !entry.Reagents.Contains(proto.ID)) - continue; - - foreach (var effect in entry.Effects) - { - if (!effect.ShouldApply(args, _robustRandom)) - continue; - - if (effect.ShouldLog) - { - var entity = args.TargetEntity; - _adminLogger.Add(LogType.ReagentEffect, effect.LogImpact, - $"Reactive effect {effect.GetType().Name:effect} of {ToPrettyString(entity):entity} using reagent {proto.ID:reagent} with method {method} at {Transform(entity).Coordinates:coordinates}"); - } - - effect.Effect(args); - } - } - } } } public enum ReactionMethod @@ -113,9 +40,4 @@ Ingestion, } [ByRefEvent] -public readonly record struct ReactionEntityEvent( - ReactionMethod Method, - ReagentPrototype Reagent, - ReagentQuantity ReagentQuantity, - Solution? Source -); +public readonly record struct ReactionEntityEvent(ReactionMethod Method, ReagentQuantity ReagentQuantity, ReagentPrototype Reagent); diff --git a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs index b999d8df61..3b16b577cb 100644 --- a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs @@ -2,21 +2,17 @@ using System.Collections.Frozen; using System.Linq; using Content.Shared.FixedPoint; using System.Text.Json.Serialization; -using Content.Shared.Administration.Logs; using Content.Shared.Body.Prototypes; -using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Reaction; using Content.Shared.Contraband; using Content.Shared.EntityEffects; -using Content.Shared.Database; +using Content.Shared.Localizations; using Content.Shared.Nutrition; -using Content.Shared.Prototypes; using Content.Shared.Roles; using Content.Shared.Slippery; using Robust.Shared.Audio; using Robust.Shared.Map; using Robust.Shared.Prototypes; -using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; using Robust.Shared.Utility; @@ -190,6 +186,7 @@ namespace Content.Shared.Chemistry.Reagent [DataField] public SoundSpecifier FootstepSound = new SoundCollectionSpecifier("FootstepPuddle"); + // TODO: Reaction tile doesn't work properly and destroys reagents way too quickly public FixedPoint2 ReactionTile(TileRef tile, FixedPoint2 reactVolume, IEntityManager entityManager, List? data) { var removed = FixedPoint2.Zero; @@ -211,33 +208,32 @@ namespace Content.Shared.Chemistry.Reagent return removed; } - public void ReactionPlant(EntityUid? plantHolder, - ReagentQuantity amount, - Solution solution, - EntityManager entityManager, - IRobustRandom random, - ISharedAdminLogManager logger) + public IEnumerable GuidebookReagentEffectsDescription(IPrototypeManager prototype, IEntitySystemManager entSys, IEnumerable effects, FixedPoint2? metabolism = null) { - if (plantHolder == null) - return; + return effects.Select(x => GuidebookReagentEffectDescription(prototype, entSys, x, metabolism)) + .Where(x => x is not null) + .Select(x => x!) + .ToArray(); + } - var args = new EntityEffectReagentArgs(plantHolder.Value, entityManager, null, solution, amount.Quantity, this, null, 1f); - foreach (var plantMetabolizable in PlantMetabolisms) - { - if (!plantMetabolizable.ShouldApply(args, random)) - continue; + public string? GuidebookReagentEffectDescription(IPrototypeManager prototype, IEntitySystemManager entSys, EntityEffect effect, FixedPoint2? metabolism) + { + if (effect.EntityEffectGuidebookText(prototype, entSys) is not { } description) + return null; - if (plantMetabolizable.ShouldLog) - { - var entity = args.TargetEntity; - logger.Add( - LogType.ReagentEffect, - plantMetabolizable.LogImpact, - $"Plant metabolism effect {plantMetabolizable.GetType().Name:effect} of reagent {ID} applied on entity {entity}"); - } + var quantity = metabolism == null ? 0f : (double) (effect.MinScale * metabolism); - plantMetabolizable.Effect(args); - } + return Loc.GetString( + "guidebook-reagent-effect-description", + ("reagent", LocalizedName), + ("quantity", quantity), + ("effect", description), + ("chance", effect.Probability), + ("conditionCount", effect.Conditions?.Length ?? 0), + ("conditions", + ContentLocalizationManager.FormatList( + effect.Conditions?.Select(x => x.EntityConditionGuidebookText(prototype)).ToList() ?? new List() + ))); } } @@ -246,6 +242,7 @@ namespace Content.Shared.Chemistry.Reagent { public string ReagentPrototype; + // TODO: Kill Metabolism groups! public Dictionary, ReagentEffectsGuideEntry>? GuideEntries; public List? PlantMetabolisms = null; @@ -254,15 +251,12 @@ namespace Content.Shared.Chemistry.Reagent { ReagentPrototype = proto.ID; GuideEntries = proto.Metabolisms? - .Select(x => (x.Key, x.Value.MakeGuideEntry(prototype, entSys))) + .Select(x => (x.Key, x.Value.MakeGuideEntry(prototype, entSys, proto))) .ToDictionary(x => x.Key, x => x.Item2); if (proto.PlantMetabolisms.Count > 0) { - PlantMetabolisms = new List(proto.PlantMetabolisms - .Select(x => x.GuidebookEffectDescription(prototype, entSys)) - .Where(x => x is not null) - .Select(x => x!) - .ToArray()); + PlantMetabolisms = + new List(proto.GuidebookReagentEffectsDescription(prototype, entSys, proto.PlantMetabolisms)); } } } @@ -285,14 +279,11 @@ namespace Content.Shared.Chemistry.Reagent [DataField("effects", required: true)] public EntityEffect[] Effects = default!; - public ReagentEffectsGuideEntry MakeGuideEntry(IPrototypeManager prototype, IEntitySystemManager entSys) + public string EntityEffectFormat => "guidebook-reagent-effect-description"; + + public ReagentEffectsGuideEntry MakeGuideEntry(IPrototypeManager prototype, IEntitySystemManager entSys, ReagentPrototype proto) { - return new ReagentEffectsGuideEntry(MetabolismRate, - Effects - .Select(x => x.GuidebookEffectDescription(prototype, entSys)) // hate. - .Where(x => x is not null) - .Select(x => x!) - .ToArray()); + return new ReagentEffectsGuideEntry(MetabolismRate, proto.GuidebookReagentEffectsDescription(prototype, entSys, Effects, MetabolismRate).ToArray()); } } diff --git a/Content.Shared/EntityConditions/Conditions/Body/BreathingEntityCondition.cs b/Content.Shared/EntityConditions/Conditions/Body/BreathingEntityCondition.cs new file mode 100644 index 0000000000..d19d326e26 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Body/BreathingEntityCondition.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Body; + +/// +public sealed partial class BreathingCondition : EntityConditionBase +{ + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-breathing", ("isBreathing", !Inverted)); +} diff --git a/Content.Shared/EntityConditions/Conditions/Body/HungerEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/Body/HungerEntityConditionSystem.cs new file mode 100644 index 0000000000..f9867b28b0 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Body/HungerEntityConditionSystem.cs @@ -0,0 +1,33 @@ +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Body; + +/// +/// Returns true if this entity's hunger is within a specified minimum and maximum. +/// +/// +public sealed partial class TotalHungerEntityConditionSystem : EntityConditionSystem +{ + [Dependency] private readonly HungerSystem _hunger = default!; + + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + var total = _hunger.GetHunger(entity.Comp); + args.Result = total >= args.Condition.Min && total <= args.Condition.Max; + } +} + +/// +public sealed partial class HungerCondition : EntityConditionBase +{ + [DataField] + public float Min; + + [DataField] + public float Max = float.PositiveInfinity; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-total-hunger", ("max", float.IsPositiveInfinity(Max) ? int.MaxValue : Max), ("min", Min)); +} diff --git a/Content.Shared/EntityConditions/Conditions/Body/InternalsEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/Body/InternalsEntityConditionSystem.cs new file mode 100644 index 0000000000..e87c54a761 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Body/InternalsEntityConditionSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.Body.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Body; + +/// +/// Returns true if this entity is using internals. False if they are not or cannot use internals. +/// +/// +public sealed partial class InternalsOnEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + args.Result = entity.Comp.GasTankEntity != null; + } +} + +/// +public sealed partial class InternalsCondition : EntityConditionBase +{ + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-internals", ("usingInternals", !Inverted)); +} diff --git a/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs b/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs new file mode 100644 index 0000000000..2196d271ff --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs @@ -0,0 +1,31 @@ +using Content.Shared.Body.Prototypes; +using Content.Shared.Localizations; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Body; + +/// +public sealed partial class MetabolizerTypeCondition : EntityConditionBase +{ + [DataField(required: true)] + public ProtoId[] Type = default!; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) + { + var typeList = new List(); + + foreach (var type in Type) + { + if (!prototype.Resolve(type, out var proto)) + continue; + + typeList.Add(proto.LocalizedName); + } + + var names = ContentLocalizationManager.FormatListToOr(typeList); + + return Loc.GetString("reagent-effect-condition-guidebook-organ-type", + ("name", names), + ("shouldhave", !Inverted)); + } +} diff --git a/Content.Shared/EntityConditions/Conditions/Body/MobStateEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/Body/MobStateEntityConditionSystem.cs new file mode 100644 index 0000000000..d00481d3e1 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Body/MobStateEntityConditionSystem.cs @@ -0,0 +1,28 @@ +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Body; + +/// +/// Returns true if this entity's current mob state matches the condition's specified mob state. +/// +/// +public sealed partial class MobStateEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + if (entity.Comp.CurrentState == args.Condition.Mobstate) + args.Result = true; + } +} + +/// +public sealed partial class MobStateCondition : EntityConditionBase +{ + [DataField] + public MobState Mobstate = MobState.Alive; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-mob-state-condition", ("state", Mobstate)); +} diff --git a/Content.Shared/EntityConditions/Conditions/JobEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/JobEntityConditionSystem.cs new file mode 100644 index 0000000000..e07989da36 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/JobEntityConditionSystem.cs @@ -0,0 +1,59 @@ +using System.Linq; +using Content.Shared.Localizations; +using Content.Shared.Mind; +using Content.Shared.Mind.Components; +using Content.Shared.Roles; +using Content.Shared.Roles.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions; + +/// +/// Returns true if this entity has any of the specified jobs. False if the entity has no mind, none of the specified jobs, or is jobless. +/// +/// +public sealed partial class HasJobEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + // We need a mind in our mind container... + if (!TryComp(entity.Comp.Mind, out var mind)) + return; + + foreach (var roleId in mind.MindRoleContainer.ContainedEntities) + { + if (!HasComp(roleId)) + continue; + + if (!TryComp(roleId, out var mindRole)) + { + Log.Error($"Encountered job mind role entity {roleId} without a {nameof(MindRoleComponent)}"); + continue; + } + + if (mindRole.JobPrototype == null) + { + Log.Error($"Encountered job mind role entity {roleId} without a {nameof(JobPrototype)}"); + continue; + } + + if (!args.Condition.Jobs.Contains(mindRole.JobPrototype.Value)) + continue; + + args.Result = true; + return; + } + } +} + +/// +public sealed partial class JobCondition : EntityConditionBase +{ + [DataField(required: true)] public List> Jobs = []; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) + { + var localizedNames = Jobs.Select(jobId => prototype.Index(jobId).LocalizedName).ToList(); + return Loc.GetString("reagent-effect-condition-guidebook-job-condition", ("job", ContentLocalizationManager.FormatListToOr(localizedNames))); + } +} diff --git a/Content.Shared/EntityConditions/Conditions/ReagentEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/ReagentEntityConditionSystem.cs new file mode 100644 index 0000000000..c49c9a3d02 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/ReagentEntityConditionSystem.cs @@ -0,0 +1,44 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions; + +/// +/// Returns true if this solution entity has an amount of reagent in it within a specified minimum and maximum. +/// +/// +public sealed partial class ReagentThresholdEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + var quant = entity.Comp.Solution.GetTotalPrototypeQuantity(args.Condition.Reagent); + + args.Result = quant >= args.Condition.Min && quant <= args.Condition.Max; + } +} + +/// +public sealed partial class ReagentCondition : EntityConditionBase +{ + [DataField] + public FixedPoint2 Min = FixedPoint2.Zero; + + [DataField] + public FixedPoint2 Max = FixedPoint2.MaxValue; + + [DataField(required: true)] + public ProtoId Reagent; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) + { + if (!prototype.Resolve(Reagent, out var reagentProto)) + return String.Empty; + + return Loc.GetString("reagent-effect-condition-guidebook-reagent-threshold", + ("reagent", reagentProto.LocalizedName ?? Loc.GetString("reagent-effect-condition-guidebook-this-reagent")), + ("max", Max == FixedPoint2.MaxValue ? int.MaxValue : Max.Float()), + ("min", Min.Float())); + } +} diff --git a/Content.Shared/EntityConditions/Conditions/Tags/HasAllTagsEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/Tags/HasAllTagsEntityConditionSystem.cs new file mode 100644 index 0000000000..99d7206c0a --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Tags/HasAllTagsEntityConditionSystem.cs @@ -0,0 +1,43 @@ +using Content.Shared.Localizations; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Tags; + +/// +/// Returns true if this entity has all the listed tags. +/// +/// +public sealed partial class HasAllTagsEntityConditionSystem : EntityConditionSystem +{ + [Dependency] private readonly TagSystem _tag = default!; + + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + args.Result = _tag.HasAllTags(entity.Comp, args.Condition.Tags); + } +} + +/// +public sealed partial class AllTagsCondition : EntityConditionBase +{ + [DataField(required: true)] + public ProtoId[] Tags = []; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) + { + var tagList = new List(); + + foreach (var type in Tags) + { + if (!prototype.Resolve(type, out var proto)) + continue; + + tagList.Add(proto.ID); + } + + var names = ContentLocalizationManager.FormatList(tagList); + + return Loc.GetString("reagent-effect-condition-guidebook-has-tag", ("tag", names), ("invert", Inverted)); + } +} diff --git a/Content.Shared/EntityConditions/Conditions/Tags/HasAnyTagEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/Tags/HasAnyTagEntityConditionSystem.cs new file mode 100644 index 0000000000..3513353125 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Tags/HasAnyTagEntityConditionSystem.cs @@ -0,0 +1,43 @@ +using Content.Shared.Localizations; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Tags; + +/// +/// Returns true if this entity have any of the listed tags. +/// +/// +public sealed partial class HasAnyTagEntityConditionSystem : EntityConditionSystem +{ + [Dependency] private readonly TagSystem _tag = default!; + + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + args.Result = _tag.HasAnyTag(entity.Comp, args.Condition.Tags); + } +} + +/// +public sealed partial class AnyTagCondition : EntityConditionBase +{ + [DataField(required: true)] + public ProtoId[] Tags = []; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) + { + var tagList = new List(); + + foreach (var type in Tags) + { + if (!prototype.Resolve(type, out var proto)) + continue; + + tagList.Add(proto.ID); + } + + var names = ContentLocalizationManager.FormatListToOr(tagList); + + return Loc.GetString("reagent-effect-condition-guidebook-has-tag", ("tag", names), ("invert", Inverted)); + } +} diff --git a/Content.Shared/EntityConditions/Conditions/Tags/HasTagEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/Tags/HasTagEntityConditionSystem.cs new file mode 100644 index 0000000000..9b67f38282 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/Tags/HasTagEntityConditionSystem.cs @@ -0,0 +1,28 @@ +using Content.Shared.Tag; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions.Tags; + +/// +/// Returns true if this entity has the listed tag. +/// +/// +public sealed partial class HasTagEntityConditionSystem : EntityConditionSystem +{ + [Dependency] private readonly TagSystem _tag = default!; + + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + args.Result = _tag.HasTag(entity.Comp, args.Condition.Tag); + } +} + +/// +public sealed partial class TagCondition : EntityConditionBase +{ + [DataField(required: true)] + public ProtoId Tag; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-has-tag", ("tag", Tag), ("invert", Inverted)); +} diff --git a/Content.Shared/EntityConditions/Conditions/TemperatureEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/TemperatureEntityConditionSystem.cs new file mode 100644 index 0000000000..6585f3bf44 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/TemperatureEntityConditionSystem.cs @@ -0,0 +1,52 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Temperature.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions; + +/// +/// Returns true if this entity has an amount of reagent in it within a specified minimum and maximum. +/// +/// +public sealed partial class TemperatureEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + if (entity.Comp.CurrentTemperature >= args.Condition.Min && entity.Comp.CurrentTemperature <= args.Condition.Max) + args.Result = true; + } +} + +/// +/// Returns true if this solution entity has an amount of reagent in it within a specified minimum and maximum. +/// +/// +public sealed partial class SolutionTemperatureEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + if (entity.Comp.Solution.Temperature >= args.Condition.Min && entity.Comp.Solution.Temperature <= args.Condition.Max) + args.Result = true; + } +} + +/// +public sealed partial class TemperatureCondition : EntityConditionBase +{ + /// + /// Minimum allowed temperature + /// + [DataField] + public float Min = 0; + + /// + /// Maximum allowed temperature + /// + [DataField] + public float Max = float.PositiveInfinity; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-body-temperature", + ("max", float.IsPositiveInfinity(Max) ? (float) int.MaxValue : Max), + ("min", Min)); +} diff --git a/Content.Shared/EntityConditions/Conditions/TemplateEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/TemplateEntityConditionSystem.cs new file mode 100644 index 0000000000..fbb659b54f --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/TemplateEntityConditionSystem.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions; +/// +/// A basic summary of this condition. +/// +/// +public sealed partial class TemplateEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + // Condition goes here. + } +} + +/// +public sealed partial class TemplateCondition : EntityConditionBase +{ + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => String.Empty; +} diff --git a/Content.Shared/EntityConditions/Conditions/TotalDamageEntityConditionSystem.cs b/Content.Shared/EntityConditions/Conditions/TotalDamageEntityConditionSystem.cs new file mode 100644 index 0000000000..e710e07b17 --- /dev/null +++ b/Content.Shared/EntityConditions/Conditions/TotalDamageEntityConditionSystem.cs @@ -0,0 +1,33 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions.Conditions; + +/// +/// Returns true if this entity can take damage and if its total damage is within a specified minimum and maximum. +/// +/// +public sealed partial class TotalDamageEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + var total = entity.Comp.TotalDamage; + args.Result = total >= args.Condition.Min && total <= args.Condition.Max; + } +} + +/// +public sealed partial class TotalDamageCondition : EntityConditionBase +{ + [DataField] + public FixedPoint2 Max = FixedPoint2.MaxValue; + + [DataField] + public FixedPoint2 Min = FixedPoint2.Zero; + + public override string EntityConditionGuidebookText(IPrototypeManager prototype) => + Loc.GetString("reagent-effect-condition-guidebook-total-damage", + ("max", Max == FixedPoint2.MaxValue ? int.MaxValue : Max.Float()), + ("min", Min.Float())); +} diff --git a/Content.Shared/EntityConditions/SharedEntityConditionsSystem.cs b/Content.Shared/EntityConditions/SharedEntityConditionsSystem.cs new file mode 100644 index 0000000000..090a422641 --- /dev/null +++ b/Content.Shared/EntityConditions/SharedEntityConditionsSystem.cs @@ -0,0 +1,152 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityConditions; + +/// +/// This handles entity effects. +/// Specifically it handles the receiving of events for causing entity effects, and provides +/// public API for other systems to take advantage of entity effects. +/// +public sealed partial class SharedEntityConditionsSystem : EntitySystem, IEntityConditionRaiser +{ + /// + /// Checks a list of conditions to verify that they all return true. + /// + /// Target entity we're checking conditions on + /// Conditions we're checking + /// Returns true if all conditions return true, false if any fail + public bool TryConditions(EntityUid target, EntityCondition[]? conditions) + { + // If there's no conditions we can't fail any of them... + if (conditions == null) + return true; + + foreach (var condition in conditions) + { + if (!TryCondition(target, condition)) + return false; + } + + return true; + } + + /// + /// Checks a list of conditions to see if any are true. + /// + /// Target entity we're checking conditions on + /// Conditions we're checking + /// Returns true if any conditions return true + public bool TryAnyCondition(EntityUid target, EntityCondition[]? conditions) + { + // If there's no conditions we can't meet any of them... + if (conditions == null) + return false; + + foreach (var condition in conditions) + { + if (TryCondition(target, condition)) + return true; + } + + return false; + } + + /// + /// Checks a single on an entity. + /// + /// Target entity we're checking conditions on + /// Condition we're checking + /// Returns true if we meet the condition and false otherwise + public bool TryCondition(EntityUid target, EntityCondition condition) + { + return condition.Inverted != condition.RaiseEvent(target, this); + } + + /// + /// Raises a condition to an entity. You should not be calling this unless you know what you're doing. + /// + public bool RaiseConditionEvent(EntityUid target, T effect) where T : EntityConditionBase + { + var effectEv = new EntityConditionEvent(effect); + RaiseLocalEvent(target, ref effectEv); + return effectEv.Result; + } +} + +/// +/// This is a basic abstract entity effect containing all the data an entity effect needs to affect entities with effects... +/// +/// The Component that is required for the effect +/// The Condition we're testing +public abstract partial class EntityConditionSystem : EntitySystem where T : Component where TCon : EntityConditionBase +{ + /// + public override void Initialize() + { + SubscribeLocalEvent>(Condition); + } + protected abstract void Condition(Entity entity, ref EntityConditionEvent args); +} + +/// +/// Used to raise an EntityCondition without losing the type of condition. +/// +public interface IEntityConditionRaiser +{ + bool RaiseConditionEvent(EntityUid target, T effect) where T : EntityConditionBase; +} + +/// +/// Used to store an so it can be raised without losing the type of the condition. +/// +/// The Condition wer are raising. +public abstract partial class EntityConditionBase : EntityCondition where T : EntityConditionBase +{ + public override bool RaiseEvent(EntityUid target, IEntityConditionRaiser raiser) + { + if (this is not T type) + return false; + + // If the result of the event matches the result we're looking for then we pass. + return raiser.RaiseConditionEvent(target, type); + } +} + +/// +/// A basic condition which can be checked for on an entity via events. +/// +[ImplicitDataDefinitionForInheritors] +public abstract partial class EntityCondition +{ + public abstract bool RaiseEvent(EntityUid target, IEntityConditionRaiser raiser); + + /// + /// If true, invert the result. So false returns true and true returns false! + /// + [DataField] + public bool Inverted; + + /// + /// A basic description of this condition, which displays in the guidebook. + /// + public abstract string EntityConditionGuidebookText(IPrototypeManager prototype); +} + +/// +/// An Event carrying an entity effect. +/// +/// The Condition we're checking +[ByRefEvent] +public record struct EntityConditionEvent(T Condition) where T : EntityConditionBase +{ + /// + /// The result of our check, defaults to false if nothing handles it. + /// + [DataField] + public bool Result; + + /// + /// The Condition being raised in this event + /// + public readonly T Condition = Condition; +} diff --git a/Content.Shared/EntityEffects/EffectConditions/BodyTemperature.cs b/Content.Shared/EntityEffects/EffectConditions/BodyTemperature.cs deleted file mode 100644 index 351e4ee12c..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/BodyTemperature.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -/// -/// Requires the target entity to be above or below a certain temperature. -/// Used for things like cryoxadone and pyroxadone. -/// -public sealed partial class Temperature : EventEntityEffectCondition -{ - [DataField] - public float Min = 0; - - [DataField] - public float Max = float.PositiveInfinity; - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-body-temperature", - ("max", float.IsPositiveInfinity(Max) ? (float) int.MaxValue : Max), - ("min", Min)); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/BreathingCondition.cs b/Content.Shared/EntityEffects/EffectConditions/BreathingCondition.cs deleted file mode 100644 index 9de1bfdbf6..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/BreathingCondition.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -/// -/// Condition for if the entity is successfully breathing. -/// -public sealed partial class Breathing : EventEntityEffectCondition -{ - /// - /// If true, the entity must not have trouble breathing to pass. - /// - [DataField] - public bool IsBreathing = true; - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-breathing", - ("isBreathing", IsBreathing)); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/HasTagCondition.cs b/Content.Shared/EntityEffects/EffectConditions/HasTagCondition.cs deleted file mode 100644 index 379a248027..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/HasTagCondition.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Shared.Tag; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.EffectConditions; - -public sealed partial class HasTag : EntityEffectCondition -{ - [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] - public string Tag = default!; - - [DataField] - public bool Invert = false; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (args.EntityManager.TryGetComponent(args.TargetEntity, out var tag)) - return args.EntityManager.System().HasTag(tag, Tag) ^ Invert; - - return false; - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - // this should somehow be made (much) nicer. - return Loc.GetString("reagent-effect-condition-guidebook-has-tag", ("tag", Tag), ("invert", Invert)); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/InternalsCondition.cs b/Content.Shared/EntityEffects/EffectConditions/InternalsCondition.cs deleted file mode 100644 index cb30ef70c7..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/InternalsCondition.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Content.Shared.Body.Components; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -/// -/// Condition for if the entity is or isn't wearing internals. -/// -public sealed partial class Internals : EntityEffectCondition -{ - /// - /// To pass, the entity's internals must have this same state. - /// - [DataField] - public bool UsingInternals = true; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (!args.EntityManager.TryGetComponent(args.TargetEntity, out InternalsComponent? internalsComp)) - return !UsingInternals; // They have no internals to wear. - - var internalsState = internalsComp.GasTankEntity != null; // If gas tank is not null, they are wearing internals - return UsingInternals == internalsState; - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-internals", ("usingInternals", UsingInternals)); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/JobCondition.cs b/Content.Shared/EntityEffects/EffectConditions/JobCondition.cs deleted file mode 100644 index 96f3be64c6..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/JobCondition.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Linq; -using Content.Shared.Localizations; -using Content.Shared.Mind; -using Content.Shared.Mind.Components; -using Content.Shared.Roles; -using Content.Shared.Roles.Components; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -public sealed partial class JobCondition : EntityEffectCondition -{ - [DataField(required: true)] public List> Job; - - public override bool Condition(EntityEffectBaseArgs args) - { - args.EntityManager.TryGetComponent(args.TargetEntity, out var mindContainer); - - if (mindContainer is null - || !args.EntityManager.TryGetComponent(mindContainer.Mind, out var mind)) - return false; - - foreach (var roleId in mind.MindRoleContainer.ContainedEntities) - { - if (!args.EntityManager.HasComponent(roleId)) - continue; - - if (!args.EntityManager.TryGetComponent(roleId, out var mindRole)) - { - Logger.Error($"Encountered job mind role entity {roleId} without a {nameof(MindRoleComponent)}"); - continue; - } - - if (mindRole.JobPrototype == null) - { - Logger.Error($"Encountered job mind role entity {roleId} without a {nameof(JobPrototype)}"); - continue; - } - - if (Job.Contains(mindRole.JobPrototype.Value)) - return true; - } - - return false; - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - var localizedNames = Job.Select(jobId => prototype.Index(jobId).LocalizedName).ToList(); - return Loc.GetString("reagent-effect-condition-guidebook-job-condition", ("job", ContentLocalizationManager.FormatListToOr(localizedNames))); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/MobStateCondition.cs b/Content.Shared/EntityEffects/EffectConditions/MobStateCondition.cs deleted file mode 100644 index efe7246b2a..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/MobStateCondition.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -public sealed partial class MobStateCondition : EntityEffectCondition -{ - [DataField] - public MobState Mobstate = MobState.Alive; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (args.EntityManager.TryGetComponent(args.TargetEntity, out MobStateComponent? mobState)) - { - if (mobState.CurrentState == Mobstate) - return true; - } - - return false; - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-mob-state-condition", ("state", Mobstate)); - } -} - diff --git a/Content.Shared/EntityEffects/EffectConditions/OrganType.cs b/Content.Shared/EntityEffects/EffectConditions/OrganType.cs deleted file mode 100644 index f99eb5cc77..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/OrganType.cs +++ /dev/null @@ -1,28 +0,0 @@ -// using Content.Server.Body.Components; -using Content.Shared.Body.Prototypes; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.EffectConditions; - -/// -/// Requires that the metabolizing organ is or is not tagged with a certain MetabolizerType -/// -public sealed partial class OrganType : EventEntityEffectCondition -{ - [DataField(required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string Type = default!; - - /// - /// Does this condition pass when the organ has the type, or when it doesn't have the type? - /// - [DataField] - public bool ShouldHave = true; - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-organ-type", - ("name", prototype.Index(Type).LocalizedName), - ("shouldhave", ShouldHave)); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/ReagentThreshold.cs b/Content.Shared/EntityEffects/EffectConditions/ReagentThreshold.cs deleted file mode 100644 index af71f20c8e..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/ReagentThreshold.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Content.Shared.FixedPoint; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -/// -/// Used for implementing reagent effects that require a certain amount of reagent before it should be applied. -/// For instance, overdoses. -/// -/// This can also trigger on -other- reagents, not just the one metabolizing. By default, it uses the -/// one being metabolized. -/// -public sealed partial class ReagentThreshold : EntityEffectCondition -{ - [DataField] - public FixedPoint2 Min = FixedPoint2.Zero; - - [DataField] - public FixedPoint2 Max = FixedPoint2.MaxValue; - - // TODO use ReagentId - [DataField] - public string? Reagent; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - var reagent = Reagent ?? reagentArgs.Reagent?.ID; - if (reagent == null) - return true; // No condition to apply. - - var quant = FixedPoint2.Zero; - if (reagentArgs.Source != null) - quant = reagentArgs.Source.GetTotalPrototypeQuantity(reagent); - - return quant >= Min && quant <= Max; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - ReagentPrototype? reagentProto = null; - if (Reagent is not null) - prototype.TryIndex(Reagent, out reagentProto); - - return Loc.GetString("reagent-effect-condition-guidebook-reagent-threshold", - ("reagent", reagentProto?.LocalizedName ?? Loc.GetString("reagent-effect-condition-guidebook-this-reagent")), - ("max", Max == FixedPoint2.MaxValue ? (float) int.MaxValue : Max.Float()), - ("min", Min.Float())); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/SolutionTemperature.cs b/Content.Shared/EntityEffects/EffectConditions/SolutionTemperature.cs deleted file mode 100644 index e2febd8f48..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/SolutionTemperature.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -/// -/// Requires the solution to be above or below a certain temperature. -/// Used for things like explosives. -/// -public sealed partial class SolutionTemperature : EntityEffectCondition -{ - [DataField] - public float Min = 0.0f; - - [DataField] - public float Max = float.PositiveInfinity; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - return reagentArgs?.Source != null && - reagentArgs.Source.Temperature >= Min && - reagentArgs.Source.Temperature <= Max; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-solution-temperature", - ("max", float.IsPositiveInfinity(Max) ? (float) int.MaxValue : Max), - ("min", Min)); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/TotalDamage.cs b/Content.Shared/EntityEffects/EffectConditions/TotalDamage.cs deleted file mode 100644 index a4baeb634a..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/TotalDamage.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Content.Shared.EntityEffects; -using Content.Shared.Damage; -using Content.Shared.FixedPoint; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -public sealed partial class TotalDamage : EntityEffectCondition -{ - [DataField] - public FixedPoint2 Max = FixedPoint2.MaxValue; - - [DataField] - public FixedPoint2 Min = FixedPoint2.Zero; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (args.EntityManager.TryGetComponent(args.TargetEntity, out DamageableComponent? damage)) - { - var total = damage.TotalDamage; - return total >= Min && total <= Max; - } - - return false; - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-total-damage", - ("max", Max == FixedPoint2.MaxValue ? (float) int.MaxValue : Max.Float()), - ("min", Min.Float())); - } -} diff --git a/Content.Shared/EntityEffects/EffectConditions/TotalHunger.cs b/Content.Shared/EntityEffects/EffectConditions/TotalHunger.cs deleted file mode 100644 index cbeb334c47..0000000000 --- a/Content.Shared/EntityEffects/EffectConditions/TotalHunger.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Content.Shared.EntityEffects; -using Content.Shared.Nutrition.Components; -using Content.Shared.Nutrition.EntitySystems; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.EffectConditions; - -public sealed partial class Hunger : EntityEffectCondition -{ - [DataField] - public float Max = float.PositiveInfinity; - - [DataField] - public float Min = 0; - - public override bool Condition(EntityEffectBaseArgs args) - { - if (args.EntityManager.TryGetComponent(args.TargetEntity, out HungerComponent? hunger)) - { - var total = args.EntityManager.System().GetHunger(hunger); - return total >= Min && total <= Max; - } - - return false; - } - - public override string GuidebookExplanation(IPrototypeManager prototype) - { - return Loc.GetString("reagent-effect-condition-guidebook-total-hunger", - ("max", float.IsPositiveInfinity(Max) ? (float) int.MaxValue : Max), - ("min", Min)); - } -} diff --git a/Content.Shared/EntityEffects/Effects/AddToSolutionReaction.cs b/Content.Shared/EntityEffects/Effects/AddToSolutionReaction.cs deleted file mode 100644 index 0f2d35d369..0000000000 --- a/Content.Shared/EntityEffects/Effects/AddToSolutionReaction.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Content.Shared.Chemistry.EntitySystems; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects -{ - public sealed partial class AddToSolutionReaction : EntityEffect - { - [DataField("solution")] - private string _solution = "reagents"; - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) { - if (reagentArgs.Reagent == null) - return; - - // TODO see if this is correct - var solutionContainerSystem = reagentArgs.EntityManager.System(); - if (!solutionContainerSystem.TryGetSolution(reagentArgs.TargetEntity, _solution, out var solutionContainer)) - return; - - if (solutionContainerSystem.TryAddReagent(solutionContainer.Value, reagentArgs.Reagent.ID, reagentArgs.Quantity, out var accepted)) - reagentArgs.Source?.RemoveReagent(reagentArgs.Reagent.ID, accepted); - - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => - Loc.GetString("reagent-effect-guidebook-add-to-solution-reaction", ("chance", Probability)); - } -} diff --git a/Content.Shared/EntityEffects/Effects/AdjustAlert.cs b/Content.Shared/EntityEffects/Effects/AdjustAlert.cs deleted file mode 100644 index 282de0a06c..0000000000 --- a/Content.Shared/EntityEffects/Effects/AdjustAlert.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Content.Shared.Alert; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class AdjustAlert : EntityEffect -{ - /// - /// The specific Alert that will be adjusted - /// - [DataField(required: true)] - public ProtoId AlertType; - - /// - /// If true, the alert is removed after Time seconds. If Time was not specified the alert is removed immediately. - /// - [DataField] - public bool Clear; - - /// - /// Visually display cooldown progress over the alert icon. - /// - [DataField] - public bool ShowCooldown; - - /// - /// The length of the cooldown or delay before removing the alert (in seconds). - /// - [DataField] - public float Time; - - //JUSTIFICATION: This just changes some visuals, doesn't need to be documented. - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => null; - - public override void Effect(EntityEffectBaseArgs args) - { - var alertSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - if (!args.EntityManager.HasComponent(args.TargetEntity)) - return; - - if (Clear && Time <= 0) - { - alertSys.ClearAlert(args.TargetEntity, AlertType); - } - else - { - var timing = IoCManager.Resolve(); - (TimeSpan, TimeSpan)? cooldown = null; - - if ((ShowCooldown || Clear) && Time > 0) - cooldown = (timing.CurTime, timing.CurTime + TimeSpan.FromSeconds(Time)); - - alertSys.ShowAlert(args.TargetEntity, AlertType, cooldown: cooldown, autoRemove: Clear, showCooldown: ShowCooldown); - } - - } -} diff --git a/Content.Shared/EntityEffects/Effects/AdjustAlertEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/AdjustAlertEntityEffectSystem.cs new file mode 100644 index 0000000000..633cde0877 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/AdjustAlertEntityEffectSystem.cs @@ -0,0 +1,65 @@ +using Content.Shared.Alert; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// Adjusts a given alert on this entity. +/// +/// +public sealed partial class AdjustAlertEntityEffectSysten : EntityEffectSystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var time = args.Effect.Time; + var clear = args.Effect.Clear; + var type = args.Effect.AlertType; + + if (clear && time <= TimeSpan.Zero) + { + _alerts.ClearAlert(entity.AsNullable(), type); + } + else + { + (TimeSpan, TimeSpan)? cooldown = null; + + if ((args.Effect.ShowCooldown || clear) && args.Effect.Time >= TimeSpan.Zero) + cooldown = (_timing.CurTime, _timing.CurTime + time); + + _alerts.ShowAlert(entity.AsNullable(), type, cooldown: cooldown, autoRemove: clear, showCooldown: args.Effect.ShowCooldown); + } + + } +} + +/// +public sealed partial class AdjustAlert : EntityEffectBase +{ + /// + /// The specific Alert that will be adjusted + /// + [DataField(required: true)] + public ProtoId AlertType; + + /// + /// If true, the alert is removed after Time seconds. If Time was not specified the alert is removed immediately. + /// + [DataField] + public bool Clear; + + /// + /// Visually display cooldown progress over the alert icon. + /// + [DataField] + public bool ShowCooldown; + + /// + /// The length of the cooldown or delay before removing the alert (in seconds). + /// + [DataField] + public TimeSpan Time; +} diff --git a/Content.Shared/EntityEffects/Effects/AdjustReagent.cs b/Content.Shared/EntityEffects/Effects/AdjustReagent.cs deleted file mode 100644 index bb655b46bc..0000000000 --- a/Content.Shared/EntityEffects/Effects/AdjustReagent.cs +++ /dev/null @@ -1,90 +0,0 @@ -using Content.Shared.Body.Prototypes; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.FixedPoint; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.Effects -{ - public sealed partial class AdjustReagent : EntityEffect - { - /// - /// The reagent ID to remove. Only one of this and should be active. - /// - [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] - public string? Reagent = null; - // TODO use ReagentId - - /// - /// The metabolism group to remove, if the reagent satisfies any. - /// Only one of this and should be active. - /// - [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] - public string? Group = null; - - [DataField(required: true)] - public FixedPoint2 Amount = default!; - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - if (reagentArgs.Source == null) - return; - - var amount = Amount; - amount *= reagentArgs.Scale; - - if (Reagent != null) - { - if (amount < 0 && reagentArgs.Source.ContainsPrototype(Reagent)) - reagentArgs.Source.RemoveReagent(Reagent, -amount); - if (amount > 0) - reagentArgs.Source.AddReagent(Reagent, amount); - } - else if (Group != null) - { - var prototypeMan = IoCManager.Resolve(); - foreach (var quant in reagentArgs.Source.Contents.ToArray()) - { - var proto = prototypeMan.Index(quant.Reagent.Prototype); - if (proto.Metabolisms != null && proto.Metabolisms.ContainsKey(Group)) - { - if (amount < 0) - reagentArgs.Source.RemoveReagent(quant.Reagent, amount); - if (amount > 0) - reagentArgs.Source.AddReagent(quant.Reagent, amount); - } - } - } - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - if (Reagent is not null && prototype.TryIndex(Reagent, out ReagentPrototype? reagentProto)) - { - return Loc.GetString("reagent-effect-guidebook-adjust-reagent-reagent", - ("chance", Probability), - ("deltasign", MathF.Sign(Amount.Float())), - ("reagent", reagentProto.LocalizedName), - ("amount", MathF.Abs(Amount.Float()))); - } - else if (Group is not null && prototype.TryIndex(Group, out MetabolismGroupPrototype? groupProto)) - { - return Loc.GetString("reagent-effect-guidebook-adjust-reagent-group", - ("chance", Probability), - ("deltasign", MathF.Sign(Amount.Float())), - ("group", groupProto.LocalizedName), - ("amount", MathF.Abs(Amount.Float()))); - } - - throw new NotImplementedException(); - } - } -} - diff --git a/Content.Shared/EntityEffects/Effects/AdjustTemperature.cs b/Content.Shared/EntityEffects/Effects/AdjustTemperature.cs deleted file mode 100644 index 03dc226e93..0000000000 --- a/Content.Shared/EntityEffects/Effects/AdjustTemperature.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class AdjustTemperature : EventEntityEffect -{ - [DataField] - public float Amount; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-adjust-temperature", - ("chance", Probability), - ("deltasign", MathF.Sign(Amount)), - ("amount", MathF.Abs(Amount))); -} diff --git a/Content.Shared/EntityEffects/Effects/AdjustTemperatureEntityEffectsSystem.cs b/Content.Shared/EntityEffects/Effects/AdjustTemperatureEntityEffectsSystem.cs new file mode 100644 index 0000000000..adc465f341 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/AdjustTemperatureEntityEffectsSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.Temperature.Components; +using Content.Shared.Temperature.Systems; + +namespace Content.Shared.EntityEffects.Effects; + +// TODO: When we get a proper temperature/energy struct combine this with the solution temperature effect!!! +/// +/// Adjusts the temperature of this entity. +/// +/// +public sealed partial class AdjustTemperatureEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedTemperatureSystem _temperature = default!; + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var amount = args.Effect.Amount * args.Scale; + + _temperature.ChangeHeat(entity, amount, true, entity.Comp); + } +} + +/// +public sealed partial class AdjustTemperature : EntityEffectBase +{ + /// + /// Amount we're adjusting temperature by. + /// + [DataField] + public float Amount; +} diff --git a/Content.Shared/EntityEffects/Effects/AreaReactionEffect.cs b/Content.Shared/EntityEffects/Effects/AreaReactionEffect.cs deleted file mode 100644 index 45ed261a35..0000000000 --- a/Content.Shared/EntityEffects/Effects/AreaReactionEffect.cs +++ /dev/null @@ -1,43 +0,0 @@ -using Content.Shared.Database; -using Content.Shared.FixedPoint; -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Basically smoke and foam reactions. -/// -public sealed partial class AreaReactionEffect : EventEntityEffect -{ - /// - /// How many seconds will the effect stay, counting after fully spreading. - /// - [DataField("duration")] public float Duration = 10; - - /// - /// How many units of reaction for 1 smoke entity. - /// - [DataField] public FixedPoint2 OverflowThreshold = FixedPoint2.New(2.5); - - /// - /// The entity prototype that will be spawned as the effect. - /// - [DataField("prototypeId", required: true, customTypeSerializer:typeof(PrototypeIdSerializer))] - public string PrototypeId = default!; - - /// - /// Sound that will get played when this reaction effect occurs. - /// - [DataField("sound", required: true)] public SoundSpecifier Sound = default!; - - public override bool ShouldLog => true; - - protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-area-reaction", - ("duration", Duration) - ); - - public override LogImpact LogImpact => LogImpact.High; -} diff --git a/Content.Shared/EntityEffects/Effects/ArtifactDurabilityRestore.cs b/Content.Shared/EntityEffects/Effects/ArtifactDurabilityRestore.cs deleted file mode 100644 index 45ca740363..0000000000 --- a/Content.Shared/EntityEffects/Effects/ArtifactDurabilityRestore.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Content.Shared.Xenoarchaeology.Artifact.Components; -using Content.Shared.Xenoarchaeology.Artifact; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Restores durability in active artefact nodes. -/// -public sealed partial class ArtifactDurabilityRestore : EntityEffect -{ - /// - /// Amount of durability that will be restored per effect interaction. - /// - [DataField] - public int RestoredDurability = 1; - - public override void Effect(EntityEffectBaseArgs args) - { - var entMan = args.EntityManager; - var xenoArtifactSys = entMan.System(); - - if (!entMan.TryGetComponent(args.TargetEntity, out var xenoArtifact)) - return; - - foreach (var node in xenoArtifactSys.GetActiveNodes((args.TargetEntity, xenoArtifact))) - { - xenoArtifactSys.AdjustNodeDurability(node.Owner, RestoredDurability); - } - } - - protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return Loc.GetString("reagent-effect-guidebook-artifact-durability-restore", ("restored", RestoredDurability)); - } -} diff --git a/Content.Shared/EntityEffects/Effects/ArtifactEntityEffectsSystem.cs b/Content.Shared/EntityEffects/Effects/ArtifactEntityEffectsSystem.cs new file mode 100644 index 0000000000..563c053b36 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/ArtifactEntityEffectsSystem.cs @@ -0,0 +1,72 @@ +using Content.Shared.Popups; +using Content.Shared.Xenoarchaeology.Artifact; +using Content.Shared.Xenoarchaeology.Artifact.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// Restores durability on this artifact +/// +/// +public sealed partial class ArtifactDurabilityRestoreEntityEffectsSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedXenoArtifactSystem _xenoArtifact = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var durability = args.Effect.RestoredDurability; + + foreach (var node in _xenoArtifact.GetActiveNodes(entity)) + { + _xenoArtifact.AdjustNodeDurability(node.Owner, durability); + } + } +} + +/// +/// Unlocks a node on this artifact. Only works this effect hasn't been applied before. +/// +/// +public sealed partial class ArtifactUnlockEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedXenoArtifactSystem _xenoArtifact = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + if (EnsureComp(entity, out var unlocking)) + { + if (unlocking.ArtifexiumApplied) + return; + + _popup.PopupEntity(Loc.GetString("artifact-activation-artifexium"), entity, PopupType.Medium); + } + else + { + _xenoArtifact.TriggerXenoArtifact(entity, null, force: true); + } + + _xenoArtifact.SetArtifexiumApplied((entity, unlocking), true); + } +} + +/// +public sealed partial class ArtifactDurabilityRestore : EntityEffectBase +{ + /// + /// Amount of durability that will be restored per effect interaction. + /// + [DataField] + public int RestoredDurability = 1; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-artifact-durability-restore", ("restored", RestoredDurability)); +} + +/// +public sealed partial class ArtifactUnlock : EntityEffectBase +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-artifact-unlock", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/ArtifactUnlock.cs b/Content.Shared/EntityEffects/Effects/ArtifactUnlock.cs deleted file mode 100644 index 077e1ebfd2..0000000000 --- a/Content.Shared/EntityEffects/Effects/ArtifactUnlock.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Content.Shared.Xenoarchaeology.Artifact; -using Content.Shared.EntityEffects; -using Content.Shared.Popups; -using Content.Shared.Xenoarchaeology.Artifact.Components; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Sets an artifact into the unlocking state and marks the artifexium effect as true. -/// This is a very specific behavior intended for a specific chem. -/// -public sealed partial class ArtifactUnlock : EntityEffect -{ - public override void Effect(EntityEffectBaseArgs args) - { - var entMan = args.EntityManager; - var xenoArtifactSys = entMan.System(); - var popupSys = entMan.System(); - - if (!entMan.TryGetComponent(args.TargetEntity, out var xenoArtifact)) - return; - - if (!entMan.TryGetComponent(args.TargetEntity, out var unlocking)) - { - xenoArtifactSys.TriggerXenoArtifact((args.TargetEntity, xenoArtifact), null, force: true); - unlocking = entMan.EnsureComponent(args.TargetEntity); - } - else if (!unlocking.ArtifexiumApplied) - { - popupSys.PopupEntity(Loc.GetString("artifact-activation-artifexium"), args.TargetEntity, PopupType.Medium); - } - - if (unlocking.ArtifexiumApplied) - return; - - xenoArtifactSys.SetArtifexiumApplied((args.TargetEntity, unlocking), true); - } - - protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return Loc.GetString("reagent-effect-guidebook-artifact-unlock", ("chance", Probability)); - } -} diff --git a/Content.Shared/EntityEffects/Effects/Atmos/CreateGasEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Atmos/CreateGasEntityEffect.cs new file mode 100644 index 0000000000..aa5132e596 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Atmos/CreateGasEntityEffect.cs @@ -0,0 +1,35 @@ +using Content.Shared.Atmos; +using Content.Shared.Atmos.EntitySystems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Atmos; + +/// +/// See serverside system. +/// +/// +public sealed partial class CreateGas : EntityEffectBase +{ + /// + /// The gas we're creating + /// + [DataField] + public Gas Gas; + + /// + /// Amount of moles we're creating + /// + [DataField] + public float Moles = 3f; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + var atmos = entSys.GetEntitySystem(); + var gasProto = atmos.GetGas(Gas); + + return Loc.GetString("entity-effect-guidebook-create-gas", + ("chance", Probability), + ("moles", Moles), + ("gas", gasProto.Name)); + } +} diff --git a/Content.Shared/EntityEffects/Effects/Atmos/ExtinguishEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Atmos/ExtinguishEntityEffectSystem.cs new file mode 100644 index 0000000000..b4b475ec59 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Atmos/ExtinguishEntityEffectSystem.cs @@ -0,0 +1,36 @@ +using Content.Shared.Atmos; +using Content.Shared.Atmos.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Atmos; + +/// +/// This raises an extinguish event on a given entity, reducing FireStacks. +/// The amount of FireStacks reduced is modified by scale. +/// +/// +public sealed partial class ExtinguishEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var ev = new ExtinguishEvent + { + FireStacksAdjustment = args.Effect.FireStacksAdjustment * args.Scale, + }; + + RaiseLocalEvent(entity, ref ev); + } +} + +/// +public sealed partial class Extinguish : EntityEffectBase +{ + /// + /// Amount of FireStacks reduced. + /// + [DataField] + public float FireStacksAdjustment = -1.5f; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-extinguish-reaction", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Atmos/FlammableEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Atmos/FlammableEntityEffect.cs new file mode 100644 index 0000000000..f08b609407 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Atmos/FlammableEntityEffect.cs @@ -0,0 +1,28 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Atmos; + +/// +/// See serverside system. +/// +/// +public sealed partial class Flammable : EntityEffectBase +{ + /// + /// Fire stack multiplier applied on an entity, + /// unless that entity is already on fire and is not null. + /// + [DataField] + public float Multiplier = 0.05f; + + /// + /// Fire stack multiplier applied if the entity is already on fire. Defaults to if null. + /// + [DataField] + public float? MultiplierOnExisting; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-flammable-reaction", ("chance", Probability)); + + public override bool ShouldLog => true; +} diff --git a/Content.Shared/EntityEffects/Effects/Atmos/IgniteEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Atmos/IgniteEntityEffect.cs new file mode 100644 index 0000000000..e10aaf3cd1 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Atmos/IgniteEntityEffect.cs @@ -0,0 +1,18 @@ +using Content.Shared.Database; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Atmos; + +/// +/// See serverside system +/// +/// +public sealed partial class Ignite : EntityEffectBase +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-ignite", ("chance", Probability)); + + public override bool ShouldLog => true; + + public override LogImpact LogImpact => LogImpact.Medium; +} diff --git a/Content.Shared/EntityEffects/Effects/Body/CleanBloodstreamEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/CleanBloodstreamEntityEffectSystem.cs new file mode 100644 index 0000000000..402a50538a --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/CleanBloodstreamEntityEffectSystem.cs @@ -0,0 +1,43 @@ +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Removes a given amount of chemicals from the bloodstream modified by scale. +/// Optionally ignores a given chemical. +/// +/// +public sealed partial class CleanBloodstreamEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedBloodstreamSystem _bloodstream = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var scale = args.Scale * args.Effect.CleanseRate; + + _bloodstream.FlushChemicals((entity, entity), args.Effect.Excluded, scale); + } +} + +/// +public sealed partial class CleanBloodstream : EntityEffectBase +{ + /// + /// Amount of reagent we're cleaning out of our bloodstream. + /// + [DataField] + public FixedPoint2 CleanseRate = 3.0f; + + /// + /// An optional chemical to ignore when doing removal. + /// + [DataField] + public ProtoId? Excluded; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-clean-bloodstream", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Body/EyeDamageEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/EyeDamageEntityEffectSystem.cs new file mode 100644 index 0000000000..29fd994e8c --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/EyeDamageEntityEffectSystem.cs @@ -0,0 +1,32 @@ +using Content.Shared.Eye.Blinding.Systems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Modifies eye damage by a given amount, modified by scale, floored to an integer. +/// +/// +public sealed partial class EyeDamageEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly BlindableSystem _blindable = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var amount = (int) Math.Floor(args.Effect.Amount * args.Scale); + _blindable.AdjustEyeDamage(entity.Owner, amount); + } +} + +/// +public sealed partial class EyeDamage : EntityEffectBase +{ + /// + /// The amount of eye damage we're adding or removing + /// + [DataField] + public int Amount = -1; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-eye-damage", ("chance", Probability), ("deltasign", MathF.Sign(Amount))); +} diff --git a/Content.Shared/EntityEffects/Effects/Body/ModifyBleedEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/ModifyBleedEntityEffectSystem.cs new file mode 100644 index 0000000000..c684ffcdf2 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/ModifyBleedEntityEffectSystem.cs @@ -0,0 +1,32 @@ +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Modifies bleed by a given amount multiplied by scale. This can increase or decrease bleed. +/// +/// +public sealed partial class ModifyBleedEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedBloodstreamSystem _bloodstream = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _bloodstream.TryModifyBleedAmount(entity.AsNullable(), args.Effect.Amount * args.Scale); + } +} + +/// +public sealed partial class ModifyBleed : EntityEffectBase +{ + /// + /// Amount of bleed we're applying or removing if negative. + /// + [DataField] + public float Amount = -1.0f; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-modify-bleed-amount", ("chance", Probability), ("deltasign", MathF.Sign(Amount))); +} diff --git a/Content.Shared/EntityEffects/Effects/Body/ModifyBloodLevelEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/ModifyBloodLevelEntityEffectSystem.cs new file mode 100644 index 0000000000..43098c9ddd --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/ModifyBloodLevelEntityEffectSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Modifies the amount of blood in this entity's bloodstream by a given amount multiplied by scale. +/// This effect can increase or decrease blood level. +/// +/// +public sealed partial class ModifyBloodLevelEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedBloodstreamSystem _bloodstream = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _bloodstream.TryModifyBloodLevel(entity.AsNullable(), args.Effect.Amount * args.Scale); + } +} + +/// +public sealed partial class ModifyBloodLevel : EntityEffectBase +{ + /// + /// Amount of bleed we're applying or removing if negative. + /// + [DataField] + public FixedPoint2 Amount = 1.0f; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-modify-blood-level", ("chance", Probability), ("deltasign", MathF.Sign(Amount.Float()))); +} diff --git a/Content.Shared/EntityEffects/Effects/Body/ModifyLungGasEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/ModifyLungGasEntityEffectSystem.cs new file mode 100644 index 0000000000..29fa1de98d --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/ModifyLungGasEntityEffectSystem.cs @@ -0,0 +1,33 @@ +using Content.Shared.Atmos; +using Content.Shared.Body.Components; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Adjust the amount of Moles stored in this set of lungs based on a given dictionary of gasses and ratios. +/// The amount of gas adjusted is modified by scale. +/// +/// +public sealed partial class ModifyLungGasEntityEffectSystem : EntityEffectSystem +{ + // TODO: This shouldn't be an entity effect, gasses should just metabolize and make a byproduct by default... + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var amount = args.Scale; + + foreach (var (gas, ratio) in args.Effect.Ratios) + { + var quantity = ratio * amount / Atmospherics.BreathMolesToReagentMultiplier; + if (quantity < 0) + quantity = Math.Max(quantity, -entity.Comp.Air[(int) gas]); + entity.Comp.Air.AdjustMoles(gas, quantity); + } + } +} + +/// +public sealed partial class ModifyLungGas : EntityEffectBase +{ + [DataField(required: true)] + public Dictionary Ratios = default!; +} diff --git a/Content.Shared/EntityEffects/Effects/Body/OxygenateEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Body/OxygenateEntityEffect.cs new file mode 100644 index 0000000000..9790fced4e --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/OxygenateEntityEffect.cs @@ -0,0 +1,14 @@ +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// See serverside system. +/// +/// +public sealed partial class Oxygenate : EntityEffectBase +{ + /// + /// Factor of oxygenation per metabolized quantity. Lungs metabolize at about 50u per tick so we need an equal multiplier to cancel that out! + /// + [DataField] + public float Factor = 1f; +} diff --git a/Content.Shared/EntityEffects/Effects/Body/ReduceRottingEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/ReduceRottingEntityEffectSystem.cs new file mode 100644 index 0000000000..4fb41bd010 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/ReduceRottingEntityEffectSystem.cs @@ -0,0 +1,36 @@ +using Content.Shared.Atmos.Rotting; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Reduces the rotting timer on an entity by a number of seconds, modified by scale. +/// This cannot increase the amount of seconds a body has rotted. +/// +/// +public sealed partial class ReduceRottingEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedRottingSystem _rotting = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var amount = args.Effect.Seconds * args.Scale; + + _rotting.ReduceAccumulator(entity, amount); + } +} + +/// +public sealed partial class ReduceRotting : EntityEffectBase +{ + /// + /// Number of seconds removed from the rotting timer. + /// + [DataField] + public TimeSpan Seconds = TimeSpan.FromSeconds(10); + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-reduce-rotting", + ("chance", Probability), + ("time", Seconds.TotalSeconds)); +} diff --git a/Content.Shared/EntityEffects/Effects/Body/SatiateEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/SatiateEntityEffectSystem.cs new file mode 100644 index 0000000000..796084206d --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/SatiateEntityEffectSystem.cs @@ -0,0 +1,63 @@ +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +// TODO: These systems are in the same file since satiation should be one system instead of two. Combine these when that happens. +// TODO: Arguably oxygen saturation should also be added here... +/// +/// Modifies the thirst level of a given entity, multiplied by scale. +/// +/// +public sealed partial class SatiateThirstEntityEffectsSystem : EntityEffectSystem +{ + [Dependency] private readonly ThirstSystem _thirst = default!; + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _thirst.ModifyThirst(entity, entity.Comp, args.Effect.Factor * args.Scale); + } +} + +/// +/// Modifies the hunger level of a given entity, multiplied by scale. +/// +/// +public sealed partial class SatiateHungerEntityEffectsSystem : EntityEffectSystem +{ + [Dependency] private readonly HungerSystem _hunger = default!; + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _hunger.ModifyHunger(entity, args.Effect.Factor * args.Scale, entity.Comp); + } +} + +/// +/// A type of made for satiation effects. +/// +/// The effect inheriting this BaseEffect +/// +public abstract partial class Satiate : EntityEffectBase where T : EntityEffectBase +{ + public const float AverageSatiation = 3f; // Magic number. Not sure how it was calculated since I didn't make it. + + /// + /// Change in satiation. + /// + [DataField] + public float Factor = -1.5f; +} + +/// +public sealed partial class SatiateThirst : Satiate +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-satiate-thirst", ("chance", Probability), ("relative", Factor / AverageSatiation)); +} + +/// +public sealed partial class SatiateHunger : Satiate +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-satiate-hunger", ("chance", Probability), ("relative", Factor / AverageSatiation)); +} diff --git a/Content.Shared/EntityEffects/Effects/Body/VomitEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Body/VomitEntityEffectSystem.cs new file mode 100644 index 0000000000..02747057c5 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Body/VomitEntityEffectSystem.cs @@ -0,0 +1,37 @@ +using Content.Shared.Medical; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Body; + +/// +/// Makes an entity vomit and reduces hunger and thirst by a given amount, modified by scale. +/// +/// +public sealed partial class VomitEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly VomitSystem _vomit = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _vomit.Vomit(entity.Owner, args.Effect.ThirstAmount * args.Scale, args.Effect.HungerAmount * args.Scale); + } +} + +/// +public sealed partial class Vomit : EntityEffectBase +{ + /// + /// How much we adjust our thirst after vomiting. + /// + [DataField] + public float ThirstAmount = -8f; + + /// + /// How much we adjust our hunger after vomiting. + /// + [DataField] + public float HungerAmount = -8f; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-vomit", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/BasePlantAdjustAttributeEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/BasePlantAdjustAttributeEntityEffect.cs new file mode 100644 index 0000000000..9b235e68d4 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/BasePlantAdjustAttributeEntityEffect.cs @@ -0,0 +1,37 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +/// +/// A type of which modifies the attribute of a Seed in a PlantHolder. +/// These are not modified by scale as botany has no concept of scale. +/// +/// The effect inheriting this BaseEffect +/// +public abstract partial class BasePlantAdjustAttribute : EntityEffectBase where T : BasePlantAdjustAttribute +{ + /// + /// How much we're adjusting the given attribute by. + /// + [DataField] + public float Amount { get; protected set; } = 1; + + /// + /// Localisation key for the name of the adjusted attribute. Used for guidebook descriptions. + /// + [DataField] + public abstract string GuidebookAttributeName { get; set; } + + /// + /// Whether the attribute in question is a good thing. Used for guidebook descriptions to determine the color of the number. + /// + [DataField] + public virtual bool GuidebookIsAttributePositive { get; protected set; } = true; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-attribute", + ("attribute", Loc.GetString(GuidebookAttributeName)), + ("amount", Amount.ToString("0.00")), + ("positive", GuidebookIsAttributePositive), + ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealth.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealth.cs new file mode 100644 index 0000000000..069cb320a9 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustHealth.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustHealth : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-health"; +} + diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevel.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevel.cs new file mode 100644 index 0000000000..32e419e291 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationLevel.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustMutationLevel : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-mutation-level"; +} + diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationMod.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationMod.cs new file mode 100644 index 0000000000..4ea695d135 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustMutationMod.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustMutationMod : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-mutation-mod"; +} + diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutrition.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutrition.cs new file mode 100644 index 0000000000..6f53076fb3 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustNutrition.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustNutrition : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-nutrition"; +} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPests.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPests.cs similarity index 53% rename from Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPests.cs rename to Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPests.cs index 18c00550d5..c1661ec89e 100644 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPests.cs +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPests.cs @@ -1,6 +1,6 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; -public sealed partial class PlantAdjustPests : PlantAdjustAttribute +public sealed partial class PlantAdjustPests : BasePlantAdjustAttribute { public override string GuidebookAttributeName { get; set; } = "plant-attribute-pests"; public override bool GuidebookIsAttributePositive { get; protected set; } = false; diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotency.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotency.cs new file mode 100644 index 0000000000..4f42adf3e6 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustPotency.cs @@ -0,0 +1,9 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +/// +/// Handles increase or decrease of plant potency. +/// +public sealed partial class PlantAdjustPotency : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-potency"; +} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustToxins.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxins.cs similarity index 53% rename from Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustToxins.cs rename to Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxins.cs index 9123b5847d..04eccb03ec 100644 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustToxins.cs +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustToxins.cs @@ -1,8 +1,9 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; -public sealed partial class PlantAdjustToxins : PlantAdjustAttribute +public sealed partial class PlantAdjustToxins : BasePlantAdjustAttribute { public override string GuidebookAttributeName { get; set; } = "plant-attribute-toxins"; + public override bool GuidebookIsAttributePositive { get; protected set; } = false; } diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWater.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWater.cs new file mode 100644 index 0000000000..1d6ef8ea09 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWater.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAdjustWater : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-water"; +} + diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWeeds.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeeds.cs similarity index 53% rename from Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWeeds.cs rename to Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeeds.cs index 70ff0747dd..e6be25d8c9 100644 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWeeds.cs +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAdjustWeeds.cs @@ -1,6 +1,6 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; -public sealed partial class PlantAdjustWeeds : PlantAdjustAttribute +public sealed partial class PlantAdjustWeeds : BasePlantAdjustAttribute { public override string GuidebookAttributeName { get; set; } = "plant-attribute-weeds"; public override bool GuidebookIsAttributePositive { get; protected set; } = false; diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowth.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowth.cs new file mode 100644 index 0000000000..76466f544d --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantAffectGrowth.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantAffectGrowth : BasePlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-growth"; +} + diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStat.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStat.cs new file mode 100644 index 0000000000..dcea56baad --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantChangeStat.cs @@ -0,0 +1,21 @@ +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantChangeStat : EntityEffectBase +{ + /// + /// This is the worst thing in the code base. + /// It's meant to be generic and expandable I guess? But it's looking for a specific datafield and then + /// sending it into an if else if else if statement that filters by object type and randomly flips bits. + /// + [DataField (required: true)] + public string TargetValue = string.Empty; + + [DataField] + public float MinValue; + + [DataField] + public float MaxValue; + + [DataField] + public int Steps; +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadone.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadone.cs new file mode 100644 index 0000000000..7dcea240a6 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantCryoxadone.cs @@ -0,0 +1,9 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantCryoxadone : EntityEffectBase +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-cryoxadone", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeeds.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeeds.cs new file mode 100644 index 0000000000..d45c0369f7 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDestroySeeds.cs @@ -0,0 +1,12 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +/// +/// Handles removal of seeds on a plant. +/// +public sealed partial class PlantDestroySeeds : EntityEffectBase +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-seeds-remove", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamine.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamine.cs new file mode 100644 index 0000000000..4355a44593 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantDiethylamine.cs @@ -0,0 +1,11 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantDiethylamine : EntityEffectBase +{ + /// + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-diethylamine", ("chance", Probability)); +} + diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximine.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximine.cs new file mode 100644 index 0000000000..b56b99038b --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantPhalanximine.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class PlantPhalanximine : EntityEffectBase +{ + /// + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-phalanximine", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeeds.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeeds.cs new file mode 100644 index 0000000000..63b06b0ad1 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/PlantRestoreSeeds.cs @@ -0,0 +1,12 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +/// +/// Handles restoral of seeds on a plant. +/// +public sealed partial class PlantRestoreSeeds : EntityEffectBase +{ + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-seeds-add", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvest.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvest.cs new file mode 100644 index 0000000000..77bde39b12 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantAttributes/RobustHarvest.cs @@ -0,0 +1,22 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; + +public sealed partial class RobustHarvest : EntityEffectBase +{ + [DataField] + public int PotencyLimit = 50; + + [DataField] + public int PotencyIncrease = 3; + + [DataField] + public int PotencySeedlessThreshold = 30; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-plant-robust-harvest", + ("seedlesstreshold", PotencySeedlessThreshold), + ("limit", PotencyLimit), + ("increase", PotencyIncrease), + ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffect.cs new file mode 100644 index 0000000000..6a3d13e0c6 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateChemicalsEntityEffect.cs @@ -0,0 +1,16 @@ +using Content.Shared.Random; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Botany; + +/// +/// See serverside system. +/// +public sealed partial class PlantMutateChemicals : EntityEffectBase +{ + /// + /// The Reagent list this mutation draws from. + /// + [DataField] + public ProtoId RandomPickBotanyReagent = "RandomPickBotanyReagent"; +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffect.cs new file mode 100644 index 0000000000..c617c05b33 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateGasesEntityEffect.cs @@ -0,0 +1,22 @@ +namespace Content.Shared.EntityEffects.Effects.Botany; + +/// +/// See serverside system. +/// +public sealed partial class PlantMutateConsumeGases : EntityEffectBase +{ + [DataField] + public float MinValue = 0.01f; + + [DataField] + public float MaxValue = 0.5f; +} + +public sealed partial class PlantMutateExudeGases : EntityEffectBase +{ + [DataField] + public float MinValue = 0.01f; + + [DataField] + public float MaxValue = 0.5f; +} diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffect.cs new file mode 100644 index 0000000000..3602453b16 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateHarvestEntityEffect.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.EntityEffects.Effects.Botany; + +/// +/// See serverside system. +/// +public sealed partial class PlantMutateHarvest : EntityEffectBase; diff --git a/Content.Shared/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffect.cs new file mode 100644 index 0000000000..91e8947044 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Botany/PlantMutateSpeciesChangeEntityEffect.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.EntityEffects.Effects.Botany; + +/// +/// See serverside system. +/// +public sealed partial class PlantMutateSpeciesChange : EntityEffectBase; diff --git a/Content.Shared/EntityEffects/Effects/CauseZombieInfection.cs b/Content.Shared/EntityEffects/Effects/CauseZombieInfection.cs deleted file mode 100644 index 3f8c58b74c..0000000000 --- a/Content.Shared/EntityEffects/Effects/CauseZombieInfection.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class CauseZombieInfection : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-cause-zombie-infection", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/ChemCleanBloodstream.cs b/Content.Shared/EntityEffects/Effects/ChemCleanBloodstream.cs deleted file mode 100644 index 98181b8667..0000000000 --- a/Content.Shared/EntityEffects/Effects/ChemCleanBloodstream.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Basically smoke and foam reactions. -/// -public sealed partial class ChemCleanBloodstream : EventEntityEffect -{ - [DataField] - public float CleanseRate = 3.0f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-chem-clean-bloodstream", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/ChemHealEyeDamage.cs b/Content.Shared/EntityEffects/Effects/ChemHealEyeDamage.cs deleted file mode 100644 index 83b2aa96e5..0000000000 --- a/Content.Shared/EntityEffects/Effects/ChemHealEyeDamage.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Content.Shared.Eye.Blinding.Systems; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Heal or apply eye damage -/// -public sealed partial class ChemHealEyeDamage : EntityEffect -{ - /// - /// How much eye damage to add. - /// - [DataField] - public int Amount = -1; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-cure-eye-damage", ("chance", Probability), ("deltasign", MathF.Sign(Amount))); - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - if (reagentArgs.Scale != 1f) // huh? - return; - - args.EntityManager.EntitySysManager.GetEntitySystem().AdjustEyeDamage(args.TargetEntity, Amount); - } -} diff --git a/Content.Shared/EntityEffects/Effects/ChemVomit.cs b/Content.Shared/EntityEffects/Effects/ChemVomit.cs deleted file mode 100644 index 1cd6b2552c..0000000000 --- a/Content.Shared/EntityEffects/Effects/ChemVomit.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Forces you to vomit. -/// -public sealed partial class ChemVomit : EventEntityEffect -{ - /// How many units of thirst to add each time we vomit - [DataField] - public float ThirstAmount = -8f; - /// How many units of hunger to add each time we vomit - [DataField] - public float HungerAmount = -8f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-chem-vomit", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/CreateEntityReactionEffect.cs b/Content.Shared/EntityEffects/Effects/CreateEntityReactionEffect.cs deleted file mode 100644 index 33173b1737..0000000000 --- a/Content.Shared/EntityEffects/Effects/CreateEntityReactionEffect.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.Effects; - -[DataDefinition] -public sealed partial class CreateEntityReactionEffect : EventEntityEffect -{ - /// - /// What entity to create. - /// - [DataField(required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string Entity = default!; - - /// - /// How many entities to create per unit reaction. - /// - [DataField] - public uint Number = 1; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-create-entity-reaction-effect", - ("chance", Probability), - ("entname", IoCManager.Resolve().Index(Entity).Name), - ("amount", Number)); -} diff --git a/Content.Shared/EntityEffects/Effects/CreateGas.cs b/Content.Shared/EntityEffects/Effects/CreateGas.cs deleted file mode 100644 index 75d554cdb3..0000000000 --- a/Content.Shared/EntityEffects/Effects/CreateGas.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Content.Shared.Atmos; -using Content.Shared.Atmos.EntitySystems; -using Content.Shared.Database; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class CreateGas : EventEntityEffect -{ - [DataField(required: true)] - public Gas Gas = default!; - - /// - /// For each unit consumed, how many moles of gas should be created? - /// - [DataField] - public float Multiplier = 3f; - - public override bool ShouldLog => true; - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - var atmos = entSys.GetEntitySystem(); - var gasProto = atmos.GetGas(Gas); - - return Loc.GetString("reagent-effect-guidebook-create-gas", - ("chance", Probability), - ("moles", Multiplier), - ("gas", gasProto.Name)); - } - - public override LogImpact LogImpact => LogImpact.High; -} diff --git a/Content.Shared/EntityEffects/Effects/CureZombieInfection.cs b/Content.Shared/EntityEffects/Effects/CureZombieInfection.cs deleted file mode 100644 index dd2d21854c..0000000000 --- a/Content.Shared/EntityEffects/Effects/CureZombieInfection.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class CureZombieInfection : EventEntityEffect -{ - [DataField] - public bool Innoculate; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - if(Innoculate) - return Loc.GetString("reagent-effect-guidebook-innoculate-zombie-infection", ("chance", Probability)); - - return Loc.GetString("reagent-effect-guidebook-cure-zombie-infection", ("chance", Probability)); - } -} - diff --git a/Content.Shared/EntityEffects/Effects/Drunk.cs b/Content.Shared/EntityEffects/Effects/Drunk.cs deleted file mode 100644 index aa15df8f3d..0000000000 --- a/Content.Shared/EntityEffects/Effects/Drunk.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Content.Shared.Drunk; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class Drunk : EntityEffect -{ - /// - /// BoozePower is how long each metabolism cycle will make the drunk effect last for. - /// - [DataField] - public TimeSpan BoozePower = TimeSpan.FromSeconds(3f); - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-drunk", ("chance", Probability)); - - public override void Effect(EntityEffectBaseArgs args) - { - var boozePower = BoozePower; - - if (args is EntityEffectReagentArgs reagentArgs) - boozePower *= reagentArgs.Scale.Float(); - - var drunkSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - drunkSys.TryApplyDrunkenness(args.TargetEntity, boozePower); - } -} diff --git a/Content.Shared/EntityEffects/Effects/Electrocute.cs b/Content.Shared/EntityEffects/Effects/Electrocute.cs deleted file mode 100644 index 32e0ff1172..0000000000 --- a/Content.Shared/EntityEffects/Effects/Electrocute.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Shared.Electrocution; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class Electrocute : EntityEffect -{ - [DataField] public int ElectrocuteTime = 2; - - [DataField] public int ElectrocuteDamageScale = 5; - - /// - /// true - refresh electrocute time, false - accumulate electrocute time - /// - [DataField] public bool Refresh = true; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-electrocute", ("chance", Probability), ("time", ElectrocuteTime)); - - public override bool ShouldLog => true; - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - reagentArgs.EntityManager.System().TryDoElectrocution(reagentArgs.TargetEntity, null, - Math.Max((reagentArgs.Quantity * ElectrocuteDamageScale).Int(), 1), TimeSpan.FromSeconds(ElectrocuteTime), Refresh, ignoreInsulation: true); - - if (reagentArgs.Reagent != null) - reagentArgs.Source?.RemoveReagent(reagentArgs.Reagent.ID, reagentArgs.Quantity); - } else - { - args.EntityManager.System().TryDoElectrocution(args.TargetEntity, null, - Math.Max(ElectrocuteDamageScale, 1), TimeSpan.FromSeconds(ElectrocuteTime), Refresh, ignoreInsulation: true); - } - } -} diff --git a/Content.Shared/EntityEffects/Effects/Emote.cs b/Content.Shared/EntityEffects/Effects/Emote.cs deleted file mode 100644 index 494dc502f5..0000000000 --- a/Content.Shared/EntityEffects/Effects/Emote.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Content.Shared.Chat.Prototypes; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Tries to force someone to emote (scream, laugh, etc). Still respects whitelists/blacklists and other limits unless specially forced. -/// -public sealed partial class Emote : EventEntityEffect -{ - /// - /// The emote the entity will preform. - /// - [DataField("emote", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string EmoteId; - - /// - /// If the emote should be recorded in chat. - /// - [DataField] - public bool ShowInChat; - - /// - /// If the forced emote will be listed in the guidebook. - /// - [DataField] - public bool ShowInGuidebook; - - /// - /// If true, the entity will preform the emote even if they normally can't. - /// - [DataField] - public bool Force = false; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - if (!ShowInGuidebook) - return null; // JUSTIFICATION: Emoting is mostly flavor, so same reason popup messages are not in here. - - var emotePrototype = prototype.Index(EmoteId); - return Loc.GetString("reagent-effect-guidebook-emote", ("chance", Probability), ("emote", Loc.GetString(emotePrototype.Name))); - } -} diff --git a/Content.Shared/EntityEffects/Effects/EmoteEntityEffect.cs b/Content.Shared/EntityEffects/Effects/EmoteEntityEffect.cs new file mode 100644 index 0000000000..1fcfc703ce --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EmoteEntityEffect.cs @@ -0,0 +1,40 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +public sealed partial class Emote : EntityEffectBase +{ + /// + /// The emote the entity will preform. + /// + [DataField("emote", required: true)] + public ProtoId EmoteId; + + /// + /// If the emote should be recorded in chat. + /// + [DataField] + public bool ShowInChat; + + /// + /// If the forced emote will be listed in the guidebook. + /// + [DataField] + public bool ShowInGuidebook; + + /// + /// If true, the entity will preform the emote even if they normally can't. + /// + [DataField] + public bool Force; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + if (!ShowInGuidebook || !prototype.Resolve(EmoteId, out var emote)) + return null; // JUSTIFICATION: Emoting is mostly flavor, so same reason popup messages are not in here. + + return Loc.GetString("entity-effect-guidebook-emote", ("chance", Probability), ("emote", Loc.GetString(emote.Name))); + } +} diff --git a/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs b/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs deleted file mode 100644 index 0f9eacc58d..0000000000 --- a/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -[DataDefinition] -public sealed partial class EmpReactionEffect : EventEntityEffect -{ - /// - /// Impulse range per unit of quantity - /// - [DataField("rangePerUnit")] - public float EmpRangePerUnit = 0.5f; - - /// - /// Maximum impulse range - /// - [DataField("maxRange")] - public float EmpMaxRange = 10; - - /// - /// How much energy will be drain from sources - /// - [DataField] - public float EnergyConsumption = 12500; - - /// - /// Amount of time entities will be disabled - /// - [DataField("duration")] - public TimeSpan DisableDuration = TimeSpan.FromSeconds(15); - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-emp-reaction-effect", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/EntitySpawning/BaseSpawnEntityEntityEffect.cs b/Content.Shared/EntityEffects/Effects/EntitySpawning/BaseSpawnEntityEntityEffect.cs new file mode 100644 index 0000000000..3f5d5b3b57 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EntitySpawning/BaseSpawnEntityEntityEffect.cs @@ -0,0 +1,36 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.EntitySpawning; + +/// +/// A type of for effects that spawn entities by prototype. +/// +/// The entity effect inheriting this BaseEffect +/// +public abstract partial class BaseSpawnEntityEntityEffect : EntityEffectBase where T : BaseSpawnEntityEntityEffect +{ + /// + /// Amount of entities we're spawning + /// + [DataField] + public int Number = 1; + + /// + /// Prototype of the entity we're spawning + /// + [DataField (required: true)] + public EntProtoId Entity; + + /// + /// Whether this spawning is predicted. Set false to not predict the spawn. + /// Entities with animations or that have random elements when spawned should set this to false. + /// + [DataField] + public bool Predicted = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-spawn-entity", + ("chance", Probability), + ("entname", IoCManager.Resolve().Index(Entity).Name), + ("amount", Number)); +} diff --git a/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityEntityEffectSystem.cs new file mode 100644 index 0000000000..9887ecdc60 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityEntityEffectSystem.cs @@ -0,0 +1,37 @@ +using Robust.Shared.Network; + +namespace Content.Shared.EntityEffects.Effects.EntitySpawning; + +/// +/// Spawns a number of entities of a given prototype at the coordinates of this entity. +/// Amount is modified by scale. +/// +/// +public sealed partial class SpawnEntityEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly INetManager _net = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var quantity = args.Effect.Number * (int)Math.Floor(args.Scale); + var proto = args.Effect.Entity; + + if (args.Effect.Predicted) + { + for (var i = 0; i < quantity; i++) + { + PredictedSpawnNextToOrDrop(proto, entity, entity.Comp); + } + } + else if (_net.IsServer) + { + for (var i = 0; i < quantity; i++) + { + SpawnNextToOrDrop(proto, entity, entity.Comp); + } + } + } +} + +/// +public sealed partial class SpawnEntity : BaseSpawnEntityEntityEffect; diff --git a/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerEntityEffectSystem.cs new file mode 100644 index 0000000000..6909d503df --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerEntityEffectSystem.cs @@ -0,0 +1,51 @@ +using Robust.Shared.Containers; +using Robust.Shared.Network; + +namespace Content.Shared.EntityEffects.Effects.EntitySpawning; + +/// +/// Spawns a given number of entities of a given prototype in a specified container owned by this entity. +/// Returns if the prototype cannot spawn in the specified container. +/// Amount is modified by scale. +/// +/// +public sealed partial class SpawnEntityInContainerEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly INetManager _net = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var quantity = args.Effect.Number * (int)Math.Floor(args.Scale); + var proto = args.Effect.Entity; + var container = args.Effect.ContainerName; + + if (args.Effect.Predicted) + { + for (var i = 0; i < quantity; i++) + { + // Stop trying to spawn if it fails + if (!PredictedTrySpawnInContainer(proto, entity, container, out _, entity.Comp)) + return; + } + } + else if (_net.IsServer) + { + for (var i = 0; i < quantity; i++) + { + // Stop trying to spawn if it fails + if (!TrySpawnInContainer(proto, entity, container, out _, entity.Comp)) + return; + } + } + } +} + +/// +public sealed partial class SpawnEntityInContainer : BaseSpawnEntityEntityEffect +{ + /// + /// Name of the container we're trying to spawn into. + /// + [DataField(required: true)] + public string ContainerName; +} diff --git a/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerOrDropEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerOrDropEntityEffectSystem.cs new file mode 100644 index 0000000000..e5b1e119c1 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInContainerOrDropEntityEffectSystem.cs @@ -0,0 +1,49 @@ +using Robust.Shared.Containers; +using Robust.Shared.Network; + +namespace Content.Shared.EntityEffects.Effects.EntitySpawning; + +/// +/// Spawns a given number of entities of a given prototype in a specified container owned by this entity. +/// Acts like if it cannot spawn the prototype in the specified container. +/// Amount is modified by scale. +/// +/// +public sealed partial class SpawnEntityInContainerOrDropEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly INetManager _net = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var quantity = args.Effect.Number * (int)Math.Floor(args.Scale); + var proto = args.Effect.Entity; + var container = args.Effect.ContainerName; + + var xform = Transform(entity); + + if (args.Effect.Predicted) + { + for (var i = 0; i < quantity; i++) + { + PredictedSpawnInContainerOrDrop(proto, entity, container, xform, entity.Comp); + } + } + else if (_net.IsServer) + { + for (var i = 0; i < quantity; i++) + { + SpawnInContainerOrDrop(proto, entity, container, xform, entity.Comp); + } + } + } +} + +/// +public sealed partial class SpawnEntityInContainerOrDrop : BaseSpawnEntityEntityEffect +{ + /// + /// Name of the container we're trying to spawn into. + /// + [DataField(required: true)] + public string ContainerName; +} diff --git a/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInInventoryEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInInventoryEntityEffectSystem.cs new file mode 100644 index 0000000000..7514dae4e9 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EntitySpawning/SpawnEntityInInventoryEntityEffectSystem.cs @@ -0,0 +1,35 @@ +using Content.Shared.Inventory; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.EntitySpawning; + +/// +/// Spawns an entity of a given prototype in a specified inventory slot owned by this entity. +/// Fails if it cannot spawn the entity in the given slot. +/// +/// +public sealed partial class SpawnEntityInInventoryEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly InventorySystem _inventory = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _inventory.SpawnItemInSlot(entity, args.Effect.Slot, args.Effect.Entity); + } +} + +/// +public sealed partial class SpawnEntityInInventory : EntityEffectBase +{ + /// + /// Name of the slot we're spawning the item into. + /// + [DataField(required: true)] + public string Slot = string.Empty; // Rider is drunk and keeps yelling at me to fill this out or make required: true but, it is required true so it's just being an asshole. + + /// + /// Prototype ID of item to spawn. + /// + [DataField(required: true)] + public EntProtoId Entity; +} diff --git a/Content.Shared/EntityEffects/Effects/EvenHealthChange.cs b/Content.Shared/EntityEffects/Effects/EvenHealthChange.cs deleted file mode 100644 index 968d559939..0000000000 --- a/Content.Shared/EntityEffects/Effects/EvenHealthChange.cs +++ /dev/null @@ -1,139 +0,0 @@ -using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; -using Content.Shared.EntityEffects; -using Content.Shared.FixedPoint; -using Content.Shared.Localizations; -using Robust.Shared.Prototypes; -using Robust.Shared.Utility; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Version of that distributes the healing to groups -/// -public sealed partial class EvenHealthChange : EntityEffect -{ - /// - /// Damage to heal, collected into entire damage groups. - /// - [DataField(required: true)] - public Dictionary, FixedPoint2> Damage = new(); - - /// - /// Should this effect scale the damage by the amount of chemical in the solution? - /// Useful for touch reactions, like styptic powder or acid. - /// Only usable if the EntityEffectBaseArgs is an EntityEffectReagentArgs. - /// - [DataField] - public bool ScaleByQuantity; - - /// - /// Should this effect ignore damage modifiers? - /// - [DataField] - public bool IgnoreResistances = true; - - protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - var damages = new List(); - var heals = false; - var deals = false; - - var damagableSystem = entSys.GetEntitySystem(); - var universalReagentDamageModifier = damagableSystem.UniversalReagentDamageModifier; - var universalReagentHealModifier = damagableSystem.UniversalReagentHealModifier; - - foreach (var (group, amount) in Damage) - { - var groupProto = prototype.Index(group); - - var sign = FixedPoint2.Sign(amount); - var mod = 1f; - - if (sign < 0) - { - heals = true; - mod = universalReagentHealModifier; - } - else if (sign > 0) - { - deals = true; - mod = universalReagentDamageModifier; - } - - damages.Add( - Loc.GetString("health-change-display", - ("kind", groupProto.LocalizedName), - ("amount", MathF.Abs(amount.Float() * mod)), - ("deltasign", sign) - )); - } - - var healsordeals = heals ? (deals ? "both" : "heals") : (deals ? "deals" : "none"); - return Loc.GetString("reagent-effect-guidebook-even-health-change", - ("chance", Probability), - ("changes", ContentLocalizationManager.FormatList(damages)), - ("healsordeals", healsordeals)); - } - - public override void Effect(EntityEffectBaseArgs args) - { - if (!args.EntityManager.TryGetComponent(args.TargetEntity, out var damageable)) - return; - - var protoMan = IoCManager.Resolve(); - - var scale = FixedPoint2.New(1); - - if (args is EntityEffectReagentArgs reagentArgs) - { - scale = ScaleByQuantity ? reagentArgs.Quantity * reagentArgs.Scale : reagentArgs.Scale; - } - - var damagableSystem = args.EntityManager.System(); - var universalReagentDamageModifier = damagableSystem.UniversalReagentDamageModifier; - var universalReagentHealModifier = damagableSystem.UniversalReagentHealModifier; - - var dspec = new DamageSpecifier(); - - foreach (var (group, amount) in Damage) - { - var groupProto = protoMan.Index(group); - var groupDamage = new Dictionary(); - foreach (var damageId in groupProto.DamageTypes) - { - var damageAmount = damageable.Damage.DamageDict.GetValueOrDefault(damageId); - if (damageAmount != FixedPoint2.Zero) - groupDamage.Add(damageId, damageAmount); - } - - var sum = groupDamage.Values.Sum(); - foreach (var (damageId, damageAmount) in groupDamage) - { - var existing = dspec.DamageDict.GetOrNew(damageId); - dspec.DamageDict[damageId] = existing + damageAmount / sum * amount; - } - } - - if (universalReagentDamageModifier != 1 || universalReagentHealModifier != 1) - { - foreach (var (type, val) in dspec.DamageDict) - { - if (val < 0f) - { - dspec.DamageDict[type] = val * universalReagentHealModifier; - } - if (val > 0f) - { - dspec.DamageDict[type] = val * universalReagentDamageModifier; - } - } - } - - damagableSystem.TryChangeDamage( - args.TargetEntity, - dspec * scale, - IgnoreResistances, - interruptsDoAfters: false); - } -} diff --git a/Content.Shared/EntityEffects/Effects/EvenHealthChangeEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/EvenHealthChangeEntityEffectSystem.cs new file mode 100644 index 0000000000..33b2041b37 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/EvenHealthChangeEntityEffectSystem.cs @@ -0,0 +1,114 @@ +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.FixedPoint; +using Content.Shared.Localizations; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// Evenly adjust the damage types in a damage group by up to a specified total on this entity. +/// Total adjustment is modified by scale. +/// +/// +public sealed partial class EvenHealthChangeEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var damageSpec = new DamageSpecifier(); + + foreach (var (group, amount) in args.Effect.Damage) + { + var groupProto = _proto.Index(group); + var groupDamage = new Dictionary(); + foreach (var damageId in groupProto.DamageTypes) + { + var damageAmount = entity.Comp.Damage.DamageDict.GetValueOrDefault(damageId); + if (damageAmount != FixedPoint2.Zero) + groupDamage.Add(damageId, damageAmount); + } + + var sum = groupDamage.Values.Sum(); + foreach (var (damageId, damageAmount) in groupDamage) + { + var existing = damageSpec.DamageDict.GetOrNew(damageId); + damageSpec.DamageDict[damageId] = existing + damageAmount / sum * amount; + } + } + + damageSpec *= args.Scale; + + _damageable.TryChangeDamage( + entity, + damageSpec, + args.Effect.IgnoreResistances, + interruptsDoAfters: false, + damageable: entity.Comp); + } +} + +/// +public sealed partial class EvenHealthChange : EntityEffectBase +{ + /// + /// Damage to heal, collected into entire damage groups. + /// + [DataField(required: true)] + public Dictionary, FixedPoint2> Damage = new(); + + /// + /// Should this effect ignore damage modifiers? + /// + [DataField] + public bool IgnoreResistances = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + var damages = new List(); + var heals = false; + var deals = false; + + var damagableSystem = entSys.GetEntitySystem(); + var universalReagentDamageModifier = damagableSystem.UniversalReagentDamageModifier; + var universalReagentHealModifier = damagableSystem.UniversalReagentHealModifier; + + foreach (var (group, amount) in Damage) + { + var groupProto = prototype.Index(group); + + var sign = FixedPoint2.Sign(amount); + float mod; + + switch (sign) + { + case < 0: + heals = true; + mod = universalReagentHealModifier; + break; + case > 0: + deals = true; + mod = universalReagentDamageModifier; + break; + default: + continue; // Don't need to show damage types of 0... + } + + damages.Add( + Loc.GetString("health-change-display", + ("kind", groupProto.LocalizedName), + ("amount", MathF.Abs(amount.Float() * mod)), + ("deltasign", sign) + )); + } + + var healsordeals = heals ? deals ? "both" : "heals" : deals ? "deals" : "none"; + return Loc.GetString("entity-effect-guidebook-even-health-change", + ("chance", Probability), + ("changes", ContentLocalizationManager.FormatList(damages)), + ("healsordeals", healsordeals)); + } +} diff --git a/Content.Shared/EntityEffects/Effects/ExtinguishReaction.cs b/Content.Shared/EntityEffects/Effects/ExtinguishReaction.cs deleted file mode 100644 index 11e776ac90..0000000000 --- a/Content.Shared/EntityEffects/Effects/ExtinguishReaction.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Content.Shared.Atmos; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects -{ - public sealed partial class ExtinguishReaction : EntityEffect - { - /// - /// Amount of firestacks reduced. - /// - [DataField] - public float FireStacksAdjustment = -1.5f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-extinguish-reaction", ("chance", Probability)); - - public override void Effect(EntityEffectBaseArgs args) - { - var ev = new ExtinguishEvent - { - FireStacksAdjustment = FireStacksAdjustment, - }; - - if (args is EntityEffectReagentArgs reagentArgs) - { - ev.FireStacksAdjustment *= (float)reagentArgs.Quantity; - } - - args.EntityManager.EventBus.RaiseLocalEvent(args.TargetEntity, ref ev); - } - } -} diff --git a/Content.Shared/EntityEffects/Effects/FlammableReaction.cs b/Content.Shared/EntityEffects/Effects/FlammableReaction.cs deleted file mode 100644 index 9f7d504f4e..0000000000 --- a/Content.Shared/EntityEffects/Effects/FlammableReaction.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Content.Shared.Database; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class FlammableReaction : EventEntityEffect -{ - [DataField] - public float Multiplier = 0.05f; - - // The fire stack multiplier if fire stacks already exist on target, only works if 0 or greater - [DataField] - public float MultiplierOnExisting = -1f; - - public override bool ShouldLog => true; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-flammable-reaction", ("chance", Probability)); - - public override LogImpact LogImpact => LogImpact.Medium; -} diff --git a/Content.Shared/EntityEffects/Effects/FlashReactionEffect.cs b/Content.Shared/EntityEffects/Effects/FlashReactionEffect.cs deleted file mode 100644 index c238e94010..0000000000 --- a/Content.Shared/EntityEffects/Effects/FlashReactionEffect.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -[DataDefinition] -public sealed partial class FlashReactionEffect : EventEntityEffect -{ - /// - /// Flash range per unit of reagent. - /// - [DataField] - public float RangePerUnit = 0.2f; - - /// - /// Maximum flash range. - /// - [DataField] - public float MaxRange = 10f; - - /// - /// How much to entities are slowed down. - /// - [DataField] - public float SlowTo = 0.5f; - - /// - /// The time entities will be flashed. - /// The default is chosen to be better than the hand flash so it is worth using it for grenades etc. - /// - [DataField] - public TimeSpan Duration = TimeSpan.FromSeconds(4); - - /// - /// The prototype ID used for the visual effect. - /// - [DataField] - public EntProtoId? FlashEffectPrototype = "ReactionFlash"; - - /// - /// The sound the flash creates. - /// - [DataField] - public SoundSpecifier? Sound = new SoundPathSpecifier("/Audio/Weapons/flash.ogg"); - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-flash-reaction-effect", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/Glow.cs b/Content.Shared/EntityEffects/Effects/Glow.cs deleted file mode 100644 index 394d406700..0000000000 --- a/Content.Shared/EntityEffects/Effects/Glow.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Content.Shared.EntityEffects; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Makes a mob glow. -/// -public sealed partial class Glow : EntityEffect -{ - [DataField] - public float Radius = 2f; - - [DataField] - public Color Color = Color.Black; - - private static readonly List Colors = new() - { - Color.White, - Color.Red, - Color.Yellow, - Color.Green, - Color.Blue, - Color.Purple, - Color.Pink - }; - - public override void Effect(EntityEffectBaseArgs args) - { - if (Color == Color.Black) - { - var random = IoCManager.Resolve(); - Color = random.Pick(Colors); - } - - var lightSystem = args.EntityManager.System(); - var light = lightSystem.EnsureLight(args.TargetEntity); - lightSystem.SetRadius(args.TargetEntity, Radius, light); - lightSystem.SetColor(args.TargetEntity, Color, light); - lightSystem.SetCastShadows(args.TargetEntity, false, light); // this is expensive, and botanists make lots of plants - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return "TODO"; - } -} diff --git a/Content.Shared/EntityEffects/Effects/GlowEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/GlowEntityEffectSystem.cs new file mode 100644 index 0000000000..05e4fe29ca --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/GlowEntityEffectSystem.cs @@ -0,0 +1,55 @@ +using Robust.Shared.Network; +using Robust.Shared.Random; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// Causes this entity to glow. +/// +/// +public sealed partial class GlowEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedPointLightSystem _lightSystem = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var color = args.Effect.Color; + + if (color == Color.Black) + { + // TODO: When we get proper predicted RNG remove this check... + if (_net.IsClient) + return; + + color = _random.Pick(Colors); + } + + var light = _lightSystem.EnsureLight(entity); + _lightSystem.SetRadius(entity, args.Effect.Radius, light); + _lightSystem.SetColor(entity, color, light); + _lightSystem.SetCastShadows(entity, false, light); // this is expensive, and botanists make lots of plants + } + + public static readonly List Colors = new() + { + Color.White, + Color.Red, + Color.Yellow, + Color.Green, + Color.Blue, + Color.Purple, + Color.Pink + }; +} + +/// +public sealed partial class Glow : EntityEffectBase +{ + [DataField] + public float Radius = 2f; + + [DataField] + public Color Color = Color.Black; +} diff --git a/Content.Shared/EntityEffects/Effects/HealthChange.cs b/Content.Shared/EntityEffects/Effects/HealthChange.cs deleted file mode 100644 index 17c24f6b5a..0000000000 --- a/Content.Shared/EntityEffects/Effects/HealthChange.cs +++ /dev/null @@ -1,126 +0,0 @@ -using Content.Shared.Damage; -using Content.Shared.Damage.Prototypes; -using Content.Shared.EntityEffects; -using Content.Shared.FixedPoint; -using Content.Shared.Localizations; -using Robust.Shared.Prototypes; -using System.Linq; -using System.Text.Json.Serialization; - -namespace Content.Shared.EntityEffects.Effects -{ - /// - /// Default metabolism used for medicine reagents. - /// - public sealed partial class HealthChange : EntityEffect - { - /// - /// Damage to apply every cycle. Damage Ignores resistances. - /// - [DataField(required: true)] - [JsonPropertyName("damage")] - public DamageSpecifier Damage = default!; - - /// - /// Should this effect scale the damage by the amount of chemical in the solution? - /// Useful for touch reactions, like styptic powder or acid. - /// Only usable if the EntityEffectBaseArgs is an EntityEffectReagentArgs. - /// - [DataField] - [JsonPropertyName("scaleByQuantity")] - public bool ScaleByQuantity; - - [DataField] - [JsonPropertyName("ignoreResistances")] - public bool IgnoreResistances = true; - - protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - var damages = new List(); - var heals = false; - var deals = false; - - var damageSpec = new DamageSpecifier(Damage); - - var universalReagentDamageModifier = entSys.GetEntitySystem().UniversalReagentDamageModifier; - var universalReagentHealModifier = entSys.GetEntitySystem().UniversalReagentHealModifier; - - if (universalReagentDamageModifier != 1 || universalReagentHealModifier != 1) - { - foreach (var (type, val) in damageSpec.DamageDict) - { - if (val < 0f) - { - damageSpec.DamageDict[type] = val * universalReagentHealModifier; - } - if (val > 0f) - { - damageSpec.DamageDict[type] = val * universalReagentDamageModifier; - } - } - } - - damageSpec = entSys.GetEntitySystem().ApplyUniversalAllModifiers(damageSpec); - - foreach (var (kind, amount) in damageSpec.DamageDict) - { - var sign = FixedPoint2.Sign(amount); - - if (sign < 0) - heals = true; - if (sign > 0) - deals = true; - - damages.Add( - Loc.GetString("health-change-display", - ("kind", prototype.Index(kind).LocalizedName), - ("amount", MathF.Abs(amount.Float())), - ("deltasign", sign) - )); - } - - var healsordeals = heals ? (deals ? "both" : "heals") : (deals ? "deals" : "none"); - - return Loc.GetString("reagent-effect-guidebook-health-change", - ("chance", Probability), - ("changes", ContentLocalizationManager.FormatList(damages)), - ("healsordeals", healsordeals)); - } - - public override void Effect(EntityEffectBaseArgs args) - { - var scale = FixedPoint2.New(1); - var damageSpec = new DamageSpecifier(Damage); - - if (args is EntityEffectReagentArgs reagentArgs) - { - scale = ScaleByQuantity ? reagentArgs.Quantity * reagentArgs.Scale : reagentArgs.Scale; - } - - var universalReagentDamageModifier = args.EntityManager.System().UniversalReagentDamageModifier; - var universalReagentHealModifier = args.EntityManager.System().UniversalReagentHealModifier; - - if (universalReagentDamageModifier != 1 || universalReagentHealModifier != 1) - { - foreach (var (type, val) in damageSpec.DamageDict) - { - if (val < 0f) - { - damageSpec.DamageDict[type] = val * universalReagentHealModifier; - } - if (val > 0f) - { - damageSpec.DamageDict[type] = val * universalReagentDamageModifier; - } - } - } - - args.EntityManager.System() - .TryChangeDamage( - args.TargetEntity, - damageSpec * scale, - IgnoreResistances, - interruptsDoAfters: false); - } - } -} diff --git a/Content.Shared/EntityEffects/Effects/HealthChangeEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/HealthChangeEntityEffectSystem.cs new file mode 100644 index 0000000000..89948cd2e4 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/HealthChangeEntityEffectSystem.cs @@ -0,0 +1,91 @@ +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.FixedPoint; +using Content.Shared.Localizations; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// Adjust the damages on this entity by specified amounts. +/// Amounts are modified by scale. +/// +/// +public sealed partial class HealthChangeEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var damageSpec = new DamageSpecifier(args.Effect.Damage); + + damageSpec *= args.Scale; + + _damageable.TryChangeDamage( + entity, + damageSpec, + args.Effect.IgnoreResistances, + interruptsDoAfters: false); + } +} + +/// +public sealed partial class HealthChange : EntityEffectBase +{ + /// + /// Damage to apply every cycle. Damage Ignores resistances. + /// + [DataField(required: true)] + public DamageSpecifier Damage = default!; + + [DataField] + public bool IgnoreResistances = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + var damages = new List(); + var heals = false; + var deals = false; + + var damageSpec = new DamageSpecifier(Damage); + + var universalReagentDamageModifier = entSys.GetEntitySystem().UniversalReagentDamageModifier; + var universalReagentHealModifier = entSys.GetEntitySystem().UniversalReagentHealModifier; + + damageSpec = entSys.GetEntitySystem().ApplyUniversalAllModifiers(damageSpec); + + foreach (var (kind, amount) in damageSpec.DamageDict) + { + var sign = FixedPoint2.Sign(amount); + float mod; + + switch (sign) + { + case < 0: + heals = true; + mod = universalReagentHealModifier; + break; + case > 0: + deals = true; + mod = universalReagentDamageModifier; + break; + default: + continue; // Don't need to show damage types of 0... + } + + damages.Add( + Loc.GetString("health-change-display", + ("kind", prototype.Index(kind).LocalizedName), + ("amount", MathF.Abs(amount.Float() * mod)), + ("deltasign", sign) + )); + } + + var healsordeals = heals ? (deals ? "both" : "heals") : (deals ? "deals" : "none"); + + return Loc.GetString("entity-effect-guidebook-health-change", + ("chance", Probability), + ("changes", ContentLocalizationManager.FormatList(damages)), + ("healsordeals", healsordeals)); + } +} diff --git a/Content.Shared/EntityEffects/Effects/Ignite.cs b/Content.Shared/EntityEffects/Effects/Ignite.cs deleted file mode 100644 index 707ecc3208..0000000000 --- a/Content.Shared/EntityEffects/Effects/Ignite.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Content.Shared.Database; -using Content.Shared.EntityEffects; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Ignites a mob. -/// -public sealed partial class Ignite : EventEntityEffect -{ - public override bool ShouldLog => true; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-ignite", ("chance", Probability)); - - public override LogImpact LogImpact => LogImpact.Medium; -} diff --git a/Content.Shared/EntityEffects/Effects/MakeSentient.cs b/Content.Shared/EntityEffects/Effects/MakeSentient.cs deleted file mode 100644 index 9c70eb452b..0000000000 --- a/Content.Shared/EntityEffects/Effects/MakeSentient.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Content.Shared.Mind.Components; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class MakeSentient : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-make-sentient", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/MakeSentientEntityEffect.cs b/Content.Shared/EntityEffects/Effects/MakeSentientEntityEffect.cs new file mode 100644 index 0000000000..4beb21454c --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/MakeSentientEntityEffect.cs @@ -0,0 +1,22 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +public sealed partial class MakeSentient : EntityEffectBase +{ + /// + /// Description for the ghost role created by this effect. + /// + [DataField] + public LocId RoleDescription = "ghost-role-information-cognizine-description"; + + /// + /// Whether we give the target the ability to speak coherently. + /// + [DataField] + public bool AllowSpeech = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-make-sentient", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/ModifyBleedAmount.cs b/Content.Shared/EntityEffects/Effects/ModifyBleedAmount.cs deleted file mode 100644 index 9f15652095..0000000000 --- a/Content.Shared/EntityEffects/Effects/ModifyBleedAmount.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class ModifyBleedAmount : EventEntityEffect -{ - [DataField] - public bool Scaled = false; - - [DataField] - public float Amount = -1.0f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-modify-bleed-amount", ("chance", Probability), - ("deltasign", MathF.Sign(Amount))); -} diff --git a/Content.Shared/EntityEffects/Effects/ModifyBloodLevel.cs b/Content.Shared/EntityEffects/Effects/ModifyBloodLevel.cs deleted file mode 100644 index 06c026f128..0000000000 --- a/Content.Shared/EntityEffects/Effects/ModifyBloodLevel.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Content.Shared.FixedPoint; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class ModifyBloodLevel : EventEntityEffect -{ - [DataField] - public bool Scaled = false; - - [DataField] - public FixedPoint2 Amount = 1.0f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-modify-blood-level", ("chance", Probability), - ("deltasign", MathF.Sign(Amount.Float()))); -} diff --git a/Content.Shared/EntityEffects/Effects/ModifyLungGas.cs b/Content.Shared/EntityEffects/Effects/ModifyLungGas.cs deleted file mode 100644 index 45dc8c84c6..0000000000 --- a/Content.Shared/EntityEffects/Effects/ModifyLungGas.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Content.Shared.Atmos; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class ModifyLungGas : EventEntityEffect -{ - [DataField("ratios", required: true)] - public Dictionary Ratios = default!; - - // JUSTIFICATION: This is internal magic that players never directly interact with. - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => null; -} diff --git a/Content.Shared/EntityEffects/Effects/MovespeedModifier.cs b/Content.Shared/EntityEffects/Effects/MovespeedModifier.cs deleted file mode 100644 index 5e72746e32..0000000000 --- a/Content.Shared/EntityEffects/Effects/MovespeedModifier.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Content.Shared.Chemistry.Components; -using Content.Shared.Movement.Systems; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Default metabolism for stimulants and tranqs. Attempts to find a MovementSpeedModifier on the target, -/// adding one if not there and to change the movespeed -/// -public sealed partial class MovespeedModifier : EntityEffect -{ - /// - /// How much the entities' walk speed is multiplied by. - /// - [DataField] - public float WalkSpeedModifier { get; set; } = 1; - - /// - /// How much the entities' run speed is multiplied by. - /// - [DataField] - public float SprintSpeedModifier { get; set; } = 1; - - /// - /// How long the modifier applies (in seconds). - /// Is scaled by reagent amount if used with an EntityEffectReagentArgs. - /// - [DataField] - public float StatusLifetime = 2f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return Loc.GetString("reagent-effect-guidebook-movespeed-modifier", - ("chance", Probability), - ("walkspeed", WalkSpeedModifier), - ("time", StatusLifetime)); - } - - /// - /// Remove reagent at set rate, changes the movespeed modifiers and adds a MovespeedModifierMetabolismComponent if not already there. - /// - public override void Effect(EntityEffectBaseArgs args) - { - var status = args.EntityManager.EnsureComponent(args.TargetEntity); - - // Only refresh movement if we need to. - var modified = !status.WalkSpeedModifier.Equals(WalkSpeedModifier) || - !status.SprintSpeedModifier.Equals(SprintSpeedModifier); - - status.WalkSpeedModifier = WalkSpeedModifier; - status.SprintSpeedModifier = SprintSpeedModifier; - - // only going to scale application time - var statusLifetime = StatusLifetime; - - if (args is EntityEffectReagentArgs reagentArgs) - { - statusLifetime *= reagentArgs.Scale.Float(); - } - - IncreaseTimer(status, statusLifetime, args.EntityManager, args.TargetEntity); - - if (modified) - args.EntityManager.System().RefreshMovementSpeedModifiers(args.TargetEntity); - } - private void IncreaseTimer(MovespeedModifierMetabolismComponent status, float time, IEntityManager entityManager, EntityUid uid) - { - var gameTiming = IoCManager.Resolve(); - - var offsetTime = Math.Max(status.ModifierTimer.TotalSeconds, gameTiming.CurTime.TotalSeconds); - - status.ModifierTimer = TimeSpan.FromSeconds(offsetTime + time); - - entityManager.Dirty(uid, status); - } -} diff --git a/Content.Shared/EntityEffects/Effects/Oxygenate.cs b/Content.Shared/EntityEffects/Effects/Oxygenate.cs deleted file mode 100644 index e990a3fec6..0000000000 --- a/Content.Shared/EntityEffects/Effects/Oxygenate.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class Oxygenate : EventEntityEffect -{ - [DataField] - public float Factor = 1f; - - // JUSTIFICATION: This is internal magic that players never directly interact with. - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => null; -} diff --git a/Content.Shared/EntityEffects/Effects/Paralyze.cs b/Content.Shared/EntityEffects/Effects/Paralyze.cs deleted file mode 100644 index 2a2270016b..0000000000 --- a/Content.Shared/EntityEffects/Effects/Paralyze.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Shared.Stunnable; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class Paralyze : EntityEffect -{ - [DataField] public double ParalyzeTime = 2; - - /// - /// true - refresh paralyze time, false - accumulate paralyze time - /// - [DataField] public bool Refresh = true; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString( - "reagent-effect-guidebook-paralyze", - ("chance", Probability), - ("time", ParalyzeTime) - ); - - public override void Effect(EntityEffectBaseArgs args) - { - var paralyzeTime = ParalyzeTime; - - if (args is EntityEffectReagentArgs reagentArgs) - { - paralyzeTime *= (double)reagentArgs.Scale; - } - - var stunSystem = args.EntityManager.System(); - _ = Refresh - ? stunSystem.TryUpdateParalyzeDuration(args.TargetEntity, TimeSpan.FromSeconds(paralyzeTime)) - : stunSystem.TryAddParalyzeDuration(args.TargetEntity, TimeSpan.FromSeconds(paralyzeTime)); - } -} - diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustAttribute.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustAttribute.cs deleted file mode 100644 index 2c8046452b..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustAttribute.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Shared.EntityEffects; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using System.Diagnostics.CodeAnalysis; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -[ImplicitDataDefinitionForInheritors] -public abstract partial class PlantAdjustAttribute : EventEntityEffect where T : PlantAdjustAttribute -{ - [DataField] - public float Amount { get; protected set; } = 1; - - /// - /// Localisation key for the name of the adjusted attribute. Used for guidebook descriptions. - /// - [DataField] - public abstract string GuidebookAttributeName { get; set; } - - /// - /// Whether the attribute in question is a good thing. Used for guidebook descriptions to determine the color of the number. - /// - [DataField] - public virtual bool GuidebookIsAttributePositive { get; protected set; } = true; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - string color; - if (GuidebookIsAttributePositive ^ Amount < 0.0) - { - color = "green"; - } - else - { - color = "red"; - } - return Loc.GetString("reagent-effect-guidebook-plant-attribute", ("attribute", Loc.GetString(GuidebookAttributeName)), ("amount", Amount.ToString("0.00")), ("colorName", color), ("chance", Probability)); - } -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustHealth.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustHealth.cs deleted file mode 100644 index c1e71894e5..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustHealth.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantAdjustHealth : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-health"; -} - diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationLevel.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationLevel.cs deleted file mode 100644 index 6610adf708..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationLevel.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantAdjustMutationLevel : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-mutation-level"; -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationMod.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationMod.cs deleted file mode 100644 index 91be222807..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustMutationMod.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantAdjustMutationMod : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-mutation-mod"; -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustNutrition.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustNutrition.cs deleted file mode 100644 index db01d5d060..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustNutrition.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantAdjustNutrition : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-nutrition"; -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs deleted file mode 100644 index 971f05f32d..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs +++ /dev/null @@ -1,12 +0,0 @@ -// using Content.Server.Botany.Systems; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -/// -/// Handles increase or decrease of plant potency. -/// - -public sealed partial class PlantAdjustPotency : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-potency"; -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWater.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWater.cs deleted file mode 100644 index 610d02231b..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAdjustWater.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantAdjustWater : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-water"; -} - diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAffectGrowth.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAffectGrowth.cs deleted file mode 100644 index 36b8f57d08..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantAffectGrowth.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantAffectGrowth : PlantAdjustAttribute -{ - public override string GuidebookAttributeName { get; set; } = "plant-attribute-growth"; -} - diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantChangeStat.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantChangeStat.cs deleted file mode 100644 index 66cfb66d4b..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantChangeStat.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantChangeStat : EventEntityEffect -{ - [DataField] - public string TargetValue; - - [DataField] - public float MinValue; - - [DataField] - public float MaxValue; - - [DataField] - public int Steps; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - throw new NotImplementedException(); - } -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantCryoxadone.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantCryoxadone.cs deleted file mode 100644 index 0dabf1f22b..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantCryoxadone.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantCryoxadone : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-cryoxadone", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs deleted file mode 100644 index 9f16c35402..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -/// -/// Handles removal of seeds on a plant. -/// - -public sealed partial class PlantDestroySeeds : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => - Loc.GetString("reagent-effect-guidebook-plant-seeds-remove", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDiethylamine.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDiethylamine.cs deleted file mode 100644 index 9feccbf224..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantDiethylamine.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantDiethylamine : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-diethylamine", ("chance", Probability)); -} - diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantPhalanximine.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantPhalanximine.cs deleted file mode 100644 index 9dc5140063..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantPhalanximine.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class PlantPhalanximine : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-phalanximine", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs deleted file mode 100644 index 51ce353dbb..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -/// -/// Handles restoral of seeds on a plant. -/// -public sealed partial class PlantRestoreSeeds : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => - Loc.GetString("reagent-effect-guidebook-plant-seeds-add", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMetabolism/RobustHarvest.cs b/Content.Shared/EntityEffects/Effects/PlantMetabolism/RobustHarvest.cs deleted file mode 100644 index 6ba37c9be0..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMetabolism/RobustHarvest.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -namespace Content.Shared.EntityEffects.Effects.PlantMetabolism; - -public sealed partial class RobustHarvest : EventEntityEffect -{ - [DataField] - public int PotencyLimit = 50; - - [DataField] - public int PotencyIncrease = 3; - - [DataField] - public int PotencySeedlessThreshold = 30; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-robust-harvest", ("seedlesstreshold", PotencySeedlessThreshold), ("limit", PotencyLimit), ("increase", PotencyIncrease), ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMutateChemicals.cs b/Content.Shared/EntityEffects/Effects/PlantMutateChemicals.cs deleted file mode 100644 index 9a3408bb8e..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMutateChemicals.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Content.Shared.Random; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// changes the chemicals available in a plant's produce -/// -public sealed partial class PlantMutateChemicals : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return "TODO"; - } -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMutateGases.cs b/Content.Shared/EntityEffects/Effects/PlantMutateGases.cs deleted file mode 100644 index 5eb5b1d07c..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMutateGases.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using System.Linq; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// changes the gases that a plant or produce create. -/// -public sealed partial class PlantMutateExudeGasses : EventEntityEffect -{ - [DataField] - public float MinValue = 0.01f; - - [DataField] - public float MaxValue = 0.5f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return "TODO"; - } -} - -/// -/// changes the gases that a plant or produce consumes. -/// -public sealed partial class PlantMutateConsumeGasses : EventEntityEffect -{ - [DataField] - public float MinValue = 0.01f; - - [DataField] - public float MaxValue = 0.5f; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return "TODO"; - } -} diff --git a/Content.Shared/EntityEffects/Effects/PlantMutateHarvest.cs b/Content.Shared/EntityEffects/Effects/PlantMutateHarvest.cs deleted file mode 100644 index 84d6293185..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantMutateHarvest.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Upgrades a plant's harvest type. -/// -public sealed partial class PlantMutateHarvest : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return "TODO"; - } -} diff --git a/Content.Shared/EntityEffects/Effects/PlantSpeciesChange.cs b/Content.Shared/EntityEffects/Effects/PlantSpeciesChange.cs deleted file mode 100644 index e2acc4cb7c..0000000000 --- a/Content.Shared/EntityEffects/Effects/PlantSpeciesChange.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Changes a plant into one of the species its able to mutate into. -/// -public sealed partial class PlantSpeciesChange : EventEntityEffect -{ - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - return "TODO"; - } -} diff --git a/Content.Shared/EntityEffects/Effects/Polymorph.cs b/Content.Shared/EntityEffects/Effects/Polymorph.cs deleted file mode 100644 index 65711ff99a..0000000000 --- a/Content.Shared/EntityEffects/Effects/Polymorph.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Shared.Polymorph; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.EntityEffects.Effects; - -public sealed partial class Polymorph : EventEntityEffect -{ - /// - /// What polymorph prototype is used on effect - /// - [DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer))] - public string PolymorphPrototype { get; set; } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-make-polymorph", - ("chance", Probability), ("entityname", - prototype.Index(prototype.Index(PolymorphPrototype).Configuration.Entity).Name)); -} diff --git a/Content.Shared/EntityEffects/Effects/PolymorphEntityEffect.cs b/Content.Shared/EntityEffects/Effects/PolymorphEntityEffect.cs new file mode 100644 index 0000000000..c0d80dffaa --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/PolymorphEntityEffect.cs @@ -0,0 +1,19 @@ +using Content.Shared.Polymorph; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +public sealed partial class Polymorph : EntityEffectBase +{ + /// + /// What polymorph prototype is used on effect + /// + [DataField(required: true)] + public ProtoId Prototype; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-make-polymorph", + ("chance", Probability), + ("entityname", prototype.Index(prototype.Index(Prototype).Configuration.Entity).Name)); +} diff --git a/Content.Shared/EntityEffects/Effects/PopupMessage.cs b/Content.Shared/EntityEffects/Effects/PopupMessage.cs deleted file mode 100644 index a837f816e4..0000000000 --- a/Content.Shared/EntityEffects/Effects/PopupMessage.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Content.Shared.Popups; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; - -namespace Content.Shared.EntityEffects.Effects -{ - public sealed partial class PopupMessage : EntityEffect - { - [DataField(required: true)] - public string[] Messages = default!; - - [DataField] - public PopupRecipients Type = PopupRecipients.Local; - - [DataField] - public PopupType VisualType = PopupType.Small; - - // JUSTIFICATION: This is purely cosmetic. - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => null; - - public override void Effect(EntityEffectBaseArgs args) - { - var popupSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - var random = IoCManager.Resolve(); - - var msg = random.Pick(Messages); - var msgArgs = new (string, object)[] - { - ("entity", args.TargetEntity), - }; - - if (args is EntityEffectReagentArgs reagentArgs) - { - msgArgs = new (string, object)[] - { - ("entity", reagentArgs.TargetEntity), - ("organ", reagentArgs.OrganEntity.GetValueOrDefault()), - }; - } - - if (Type == PopupRecipients.Local) - popupSys.PopupEntity(Loc.GetString(msg, msgArgs), args.TargetEntity, args.TargetEntity, VisualType); - else if (Type == PopupRecipients.Pvs) - popupSys.PopupEntity(Loc.GetString(msg, msgArgs), args.TargetEntity, VisualType); - } - } - - public enum PopupRecipients - { - Pvs, - Local - } -} diff --git a/Content.Shared/EntityEffects/Effects/ReduceRotting.cs b/Content.Shared/EntityEffects/Effects/ReduceRotting.cs deleted file mode 100644 index b5f2a7ae7e..0000000000 --- a/Content.Shared/EntityEffects/Effects/ReduceRotting.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Robust.Shared.Prototypes; -using Content.Shared.Atmos.Rotting; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Reduces the rotting accumulator on the patient, making them revivable. -/// -public sealed partial class ReduceRotting : EntityEffect -{ - [DataField("seconds")] - public double RottingAmount = 10; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-reduce-rotting", - ("chance", Probability), - ("time", RottingAmount)); - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - if (reagentArgs.Scale != 1f) - return; - } - - var rottingSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - - rottingSys.ReduceAccumulator(args.TargetEntity, TimeSpan.FromSeconds(RottingAmount)); - } -} diff --git a/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs b/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs deleted file mode 100644 index 009cf914d5..0000000000 --- a/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Reset narcolepsy timer -/// -public sealed partial class ResetNarcolepsy : EventEntityEffect -{ - /// - /// The # of seconds the effect resets the narcolepsy timer to - /// - [DataField("TimerReset")] - public TimeSpan TimerReset = TimeSpan.FromSeconds(600); - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-reset-narcolepsy", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/ResetNarcolepsyEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/ResetNarcolepsyEntityEffectSystem.cs new file mode 100644 index 0000000000..973b139fa4 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/ResetNarcolepsyEntityEffectSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Traits.Assorted; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// Resets the narcolepsy timer on a given entity. +/// The new duration of the timer is modified by scale. +/// +/// +public sealed partial class ResetNarcolepsyEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly NarcolepsySystem _narcolepsy = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var timer = args.Effect.TimerReset * args.Scale; + + _narcolepsy.AdjustNarcolepsyTimer(entity.AsNullable(), timer); + } +} + +/// +public sealed partial class ResetNarcolepsy : EntityEffectBase +{ + /// + /// The time we set our narcolepsy timer to. + /// + [DataField("TimerReset")] + public TimeSpan TimerReset = TimeSpan.FromSeconds(600); + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-reset-narcolepsy", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/SatiateHunger.cs b/Content.Shared/EntityEffects/Effects/SatiateHunger.cs deleted file mode 100644 index 3e7af8833c..0000000000 --- a/Content.Shared/EntityEffects/Effects/SatiateHunger.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Content.Shared.Nutrition.Components; -using Content.Shared.Nutrition.EntitySystems; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Attempts to find a HungerComponent on the target, -/// and to update it's hunger values. -/// -public sealed partial class SatiateHunger : EntityEffect -{ - private const float DefaultNutritionFactor = 3.0f; - - /// - /// How much hunger is satiated. - /// Is multiplied by quantity if used with EntityEffectReagentArgs. - /// - [DataField("factor")] public float NutritionFactor { get; set; } = DefaultNutritionFactor; - - //Remove reagent at set rate, satiate hunger if a HungerComponent can be found - public override void Effect(EntityEffectBaseArgs args) - { - var entman = args.EntityManager; - if (!entman.TryGetComponent(args.TargetEntity, out HungerComponent? hunger)) - return; - if (args is EntityEffectReagentArgs reagentArgs) - { - entman.System().ModifyHunger(reagentArgs.TargetEntity, NutritionFactor * (float) reagentArgs.Quantity, hunger); - } - else - { - entman.System().ModifyHunger(args.TargetEntity, NutritionFactor, hunger); - } - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-satiate-hunger", ("chance", Probability), ("relative", NutritionFactor / DefaultNutritionFactor)); -} diff --git a/Content.Shared/EntityEffects/Effects/SatiateThirst.cs b/Content.Shared/EntityEffects/Effects/SatiateThirst.cs deleted file mode 100644 index 21a055b528..0000000000 --- a/Content.Shared/EntityEffects/Effects/SatiateThirst.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Content.Shared.Nutrition.Components; -using Content.Shared.Nutrition.EntitySystems; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Default metabolism for drink reagents. Attempts to find a ThirstComponent on the target, -/// and to update it's thirst values. -/// -public sealed partial class SatiateThirst : EntityEffect -{ - private const float DefaultHydrationFactor = 3.0f; - - /// How much thirst is satiated each tick. Not currently tied to - /// rate or anything. - [DataField("factor")] - public float HydrationFactor { get; set; } = DefaultHydrationFactor; - - /// Satiate thirst if a ThirstComponent can be found - public override void Effect(EntityEffectBaseArgs args) - { - var uid = args.TargetEntity; - if (args.EntityManager.TryGetComponent(uid, out ThirstComponent? thirst)) - args.EntityManager.System().ModifyThirst(uid, thirst, HydrationFactor); - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-satiate-thirst", ("chance", Probability), ("relative", HydrationFactor / DefaultHydrationFactor)); -} diff --git a/Content.Shared/EntityEffects/Effects/Slipify.cs b/Content.Shared/EntityEffects/Effects/Slipify.cs deleted file mode 100644 index c152b8b010..0000000000 --- a/Content.Shared/EntityEffects/Effects/Slipify.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Shared.Physics; -using Content.Shared.Slippery; -using Content.Shared.StepTrigger.Components; -using Robust.Shared.Physics; -using Robust.Shared.Physics.Components; -using Robust.Shared.Physics.Systems; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Makes a mob slippery. -/// -public sealed partial class Slipify : EntityEffect -{ - public override void Effect(EntityEffectBaseArgs args) - { - var fixtureSystem = args.EntityManager.System(); - var colWakeSystem = args.EntityManager.System(); - var slippery = args.EntityManager.EnsureComponent(args.TargetEntity); - args.EntityManager.Dirty(args.TargetEntity, slippery); - args.EntityManager.EnsureComponent(args.TargetEntity); - // Need a fixture with a slip layer in order to actually do the slipping - var fixtures = args.EntityManager.EnsureComponent(args.TargetEntity); - var body = args.EntityManager.EnsureComponent(args.TargetEntity); - var shape = fixtures.Fixtures["fix1"].Shape; - fixtureSystem.TryCreateFixture(args.TargetEntity, shape, "slips", 1, false, (int)CollisionGroup.SlipLayer, manager: fixtures, body: body); - // Need to disable collision wake so that mobs can collide with and slip on it - var collisionWake = args.EntityManager.EnsureComponent(args.TargetEntity); - colWakeSystem.SetEnabled(args.TargetEntity, false, collisionWake); - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - { - throw new NotImplementedException(); - } -} diff --git a/Content.Shared/EntityEffects/Effects/SlipifyEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/SlipifyEntityEffectSystem.cs new file mode 100644 index 0000000000..602e5e923a --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/SlipifyEntityEffectSystem.cs @@ -0,0 +1,44 @@ +using System.Linq; +using Content.Shared.Physics; +using Content.Shared.Slippery; +using Content.Shared.StepTrigger.Components; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// This effect permanently creates a slippery fixture for this entity and then makes this entity slippery like soap. +/// +/// +public sealed partial class SlipifyEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly CollisionWakeSystem _collisionWake = default!; + [Dependency] private readonly FixtureSystem _fixture = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + EnsureComp(entity, out var slippery); + slippery.SlipData = args.Effect.Slippery; + + Dirty(entity, slippery); + + EnsureComp(entity); + + if (entity.Comp.Fixtures.FirstOrDefault(x => x.Value.Hard).Value.Shape is not { } shape) + return; + + _fixture.TryCreateFixture(entity, shape, "slips", 1, false, (int)CollisionGroup.SlipLayer, manager: entity.Comp); + + // Need to disable collision wake so that mobs can collide with and slip on it + EnsureComp(entity, out var collisionWake); + _collisionWake.SetEnabled(entity, false, collisionWake); + } +} + +/// +public sealed partial class Slipify : EntityEffectBase +{ + [DataField] + public SlipperyEffectEntry Slippery = new(); +} diff --git a/Content.Shared/EntityEffects/Effects/Solution/AddReagentToSolutionEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Solution/AddReagentToSolutionEntityEffectSystem.cs new file mode 100644 index 0000000000..ef96723cff --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Solution/AddReagentToSolutionEntityEffectSystem.cs @@ -0,0 +1,59 @@ +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Solution; + +// TODO: This should be removed and changed to an "AbsorbentSolutionComponent" +/// +/// Creates a reagent in a specified solution owned by this entity. +/// Quantity is modified by scale. +/// +/// +public sealed class AddReagentToSolutionEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var solution = args.Effect.Solution; + var reagent = args.Effect.Reagent; + + if (!_solutionContainer.TryGetSolution((entity, entity), solution, out var solutionContainer)) + return; + + _solutionContainer.TryAddReagent(solutionContainer.Value, reagent, args.Scale * args.Effect.StrengthModifier); + } +} + +/// +public sealed partial class AddReagentToSolution : EntityEffectBase +{ + /// + /// Prototype of the reagent we're adding. + /// + [DataField(required: true)] + public ProtoId Reagent; + + /// + /// Solution we're looking for + /// + [DataField(required: true)] + public string? Solution = "reagents"; + + /// + /// A modifier for how much reagent we're creating. + /// + [DataField] + public float StrengthModifier = 1.0f; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + return prototype.Resolve(Reagent, out ReagentPrototype? proto) + ? Loc.GetString("entity-effect-guidebook-add-to-solution-reaction", + ("chance", Probability), + ("reagent", proto.LocalizedName)) + : null; + } +} diff --git a/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentEntityEffectSystem.cs new file mode 100644 index 0000000000..334a63a95a --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentEntityEffectSystem.cs @@ -0,0 +1,52 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Solution; + +/// +/// Adjust a reagent in this solution by an amount modified by scale. +/// Quantity is modified by scale. +/// +/// +public sealed partial class AdjustReagentEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var quantity = args.Effect.Amount * args.Scale; + var reagent = args.Effect.Reagent; + + if (quantity > 0) + _solutionContainer.TryAddReagent(entity, reagent, quantity); + else + _solutionContainer.RemoveReagent(entity, reagent, -quantity); + } +} + +/// +public sealed partial class AdjustReagent : EntityEffectBase +{ + /// + /// The reagent ID to add or remove. + /// + [DataField(required: true)] + public ProtoId Reagent; + + [DataField(required: true)] + public FixedPoint2 Amount; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + { + return prototype.Resolve(Reagent, out ReagentPrototype? proto) + ? Loc.GetString("entity-effect-guidebook-adjust-reagent-reagent", + ("chance", Probability), + ("deltasign", MathF.Sign(Amount.Float())), + ("reagent", proto.LocalizedName), + ("amount", MathF.Abs(Amount.Float()))) + : null; + } +} diff --git a/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs new file mode 100644 index 0000000000..51259956d8 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs @@ -0,0 +1,52 @@ +using Content.Shared.Body.Prototypes; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Solution; + +/// +/// Adjust all reagents in this solution which are metabolized by a given metabolism group. +/// Quantity is modified by scale, quantity is per reagent and not a total. +/// +/// +public sealed partial class AdjustReagentsByGroupEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var quantity = args.Effect.Amount * args.Scale; + var group = args.Effect.Group; + var solution = entity.Comp.Solution; + + foreach (var quant in solution.Contents.ToArray()) + { + var proto = _proto.Index(quant.Reagent.Prototype); + if (proto.Metabolisms == null || !proto.Metabolisms.ContainsKey(group)) + continue; + + if (quantity > 0) + _solutionContainer.TryAddReagent(entity, proto.ID, quantity); + else + _solutionContainer.RemoveReagent(entity, proto.ID, -quantity); + } + } +} + +/// +public sealed partial class AdjustReagentsByGroup : EntityEffectBase +{ + + /// + /// The metabolism group being adjusted. All reagents in an affected solution with this group will be adjusted. + /// + [DataField(required: true)] + public ProtoId Group; + + [DataField(required: true)] + public FixedPoint2 Amount; +} diff --git a/Content.Shared/EntityEffects/Effects/Solution/AreaReactionEntityEffect.cs b/Content.Shared/EntityEffects/Effects/Solution/AreaReactionEntityEffect.cs new file mode 100644 index 0000000000..5fbe948360 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Solution/AreaReactionEntityEffect.cs @@ -0,0 +1,39 @@ +using Content.Shared.Database; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Solution; + +/// +public sealed partial class AreaReactionEffect : EntityEffectBase +{ + /// + /// How many seconds will the effect stay, counting after fully spreading. + /// + [DataField("duration")] public float Duration = 10; + + /// + /// How big of a reaction scale we need for 1 smoke entity. + /// + [DataField] public float OverflowThreshold = 2.5f; + + /// + /// The entity prototype that is being spread over an area. + /// + [DataField(required: true)] + public EntProtoId PrototypeId; + + /// + /// Sound that will get played when this reaction effect occurs. + /// + [DataField(required: true)] public SoundSpecifier Sound = default!; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-area-reaction", + ("duration", Duration) + ); + + public override bool ShouldLog => true; + + public override LogImpact LogImpact => LogImpact.High; +} diff --git a/Content.Shared/EntityEffects/Effects/Solution/SolutionTemperatureEntityEffectsSystem.cs b/Content.Shared/EntityEffects/Effects/Solution/SolutionTemperatureEntityEffectsSystem.cs new file mode 100644 index 0000000000..c0188fdfb4 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/Solution/SolutionTemperatureEntityEffectsSystem.cs @@ -0,0 +1,145 @@ +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.Solution; + +// TODO: Energy conservation!!! Once HeatContainers are merged nuke this and everything in SolutionContainerSystem to respect energy conservation! +/// +/// Sets the temperature of this solution to a fixed value. +/// +/// +public sealed class SetSolutionTemperatureEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + _solutionContainer.SetTemperature(entity, args.Effect.Temperature); + } +} + +/// +public sealed partial class SetSolutionTemperature : EntityEffectBase +{ + /// + /// The temperature to set the solution to. + /// + [DataField(required: true)] + public float Temperature; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-set-solution-temperature-effect", + ("chance", Probability), + ("temperature", Temperature)); +} + +/// +/// Adjusts the temperature of this solution by a given amount. +/// The temperature adjustment is modified by scale. +/// +/// +public sealed class AdjustSolutionTemperatureEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var solution = entity.Comp.Solution; + var temperature = Math.Clamp(solution.Temperature + args.Scale * args.Effect.Delta, args.Effect.MinTemp, args.Effect.MaxTemp); + + _solutionContainer.SetTemperature(entity, temperature); + } +} + +/// +public sealed partial class AdjustSolutionTemperature : EntityEffectBase +{ + /// + /// The change in temperature. + /// + [DataField(required: true)] + public float Delta; + + /// + /// The minimum temperature this effect can reach. + /// + [DataField] + public float MinTemp; + + /// + /// The maximum temperature this effect can reach. + /// + [DataField] + public float MaxTemp = float.PositiveInfinity; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-adjust-solution-temperature-effect", + ("chance", Probability), + ("deltasign", MathF.Sign(Delta)), + ("mintemp", MinTemp), + ("maxtemp", MaxTemp)); +} + +/// +/// Adjusts the thermal energy of this solution by a given amount. +/// The energy adjustment is modified by scale. +/// +/// +public sealed class AdjustSolutionThermalEnergyEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var solution = entity.Comp.Solution; + + var delta = args.Scale * args.Effect.Delta; + + // Don't adjust thermal energy if we're already at or above max temperature. + switch (delta) + { + case > 0: + if (solution.Temperature >= args.Effect.MaxTemp) + return; + break; + case < 0: + if (solution.Temperature <= args.Effect.MinTemp) + return; + break; + default: + return; + } + + _solutionContainer.AddThermalEnergyClamped(entity, delta, args.Effect.MinTemp, args.Effect.MaxTemp); + } +} + +/// +public sealed partial class AdjustSolutionThermalEnergy : EntityEffectBase +{ + /// + /// The change in thermal energy. + /// + [DataField(required: true)] + public float Delta; + + /// + /// The minimum temperature this effect can reach. + /// + [DataField] + public float MinTemp; + + /// + /// The maximum temperature this effect can reach. + /// + [DataField] + public float MaxTemp = float.PositiveInfinity; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-adjust-solution-temperature-effect", + ("chance", Probability), + ("deltasign", MathF.Sign(Delta)), + ("mintemp", MinTemp), + ("maxtemp", MaxTemp)); +} diff --git a/Content.Shared/EntityEffects/Effects/SolutionTemperatureEffects.cs b/Content.Shared/EntityEffects/Effects/SolutionTemperatureEffects.cs deleted file mode 100644 index 30ac6c3d77..0000000000 --- a/Content.Shared/EntityEffects/Effects/SolutionTemperatureEffects.cs +++ /dev/null @@ -1,143 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects; - -/// -/// Sets the temperature of the solution involved with the reaction to a new value. -/// -[DataDefinition] -public sealed partial class SetSolutionTemperatureEffect : EntityEffect -{ - /// - /// The temperature to set the solution to. - /// - [DataField("temperature", required: true)] private float _temperature; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-set-solution-temperature-effect", - ("chance", Probability), ("temperature", _temperature)); - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - var solution = reagentArgs.Source; - if (solution == null) - return; - - solution.Temperature = _temperature; - - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } -} - -/// -/// Adjusts the temperature of the solution involved in the reaction. -/// -[DataDefinition] -public sealed partial class AdjustSolutionTemperatureEffect : EntityEffect -{ - /// - /// The change in temperature. - /// - [DataField("delta", required: true)] private float _delta; - - /// - /// The minimum temperature this effect can reach. - /// - [DataField("minTemp")] private float _minTemp = 0.0f; - - /// - /// The maximum temperature this effect can reach. - /// - [DataField("maxTemp")] private float _maxTemp = float.PositiveInfinity; - - /// - /// If true, then scale ranges by intensity. If not, the ranges are the same regardless of reactant amount. - /// - [DataField("scaled")] private bool _scaled; - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-adjust-solution-temperature-effect", - ("chance", Probability), ("deltasign", MathF.Sign(_delta)), ("mintemp", _minTemp), ("maxtemp", _maxTemp)); - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - var solution = reagentArgs.Source; - if (solution == null || solution.Volume == 0) - return; - - var deltaT = _scaled ? _delta * (float) reagentArgs.Quantity : _delta; - solution.Temperature = Math.Clamp(solution.Temperature + deltaT, _minTemp, _maxTemp); - - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } -} - -/// -/// Adjusts the thermal energy of the solution involved in the reaction. -/// -public sealed partial class AdjustSolutionThermalEnergyEffect : EntityEffect -{ - /// - /// The change in energy. - /// - [DataField("delta", required: true)] private float _delta; - - /// - /// The minimum temperature this effect can reach. - /// - [DataField("minTemp")] private float _minTemp = 0.0f; - - /// - /// The maximum temperature this effect can reach. - /// - [DataField("maxTemp")] private float _maxTemp = float.PositiveInfinity; - - /// - /// If true, then scale ranges by intensity. If not, the ranges are the same regardless of reactant amount. - /// - [DataField("scaled")] private bool _scaled; - - public override void Effect(EntityEffectBaseArgs args) - { - if (args is EntityEffectReagentArgs reagentArgs) - { - var solution = reagentArgs.Source; - if (solution == null || solution.Volume == 0) - return; - - if (_delta > 0 && solution.Temperature >= _maxTemp) - return; - if (_delta < 0 && solution.Temperature <= _minTemp) - return; - - var heatCap = solution.GetHeatCapacity(null); - var deltaT = _scaled - ? _delta / heatCap * (float) reagentArgs.Quantity - : _delta / heatCap; - - solution.Temperature = Math.Clamp(solution.Temperature + deltaT, _minTemp, _maxTemp); - - return; - } - - // TODO: Someone needs to figure out how to do this for non-reagent effects. - throw new NotImplementedException(); - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString("reagent-effect-guidebook-adjust-solution-temperature-effect", - ("chance", Probability), ("deltasign", MathF.Sign(_delta)), ("mintemp", _minTemp), ("maxtemp", _maxTemp)); -} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/BaseStatusEffectEntityEffect.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/BaseStatusEffectEntityEffect.cs new file mode 100644 index 0000000000..b028da1595 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/BaseStatusEffectEntityEffect.cs @@ -0,0 +1,35 @@ +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Entity effect that specifically deals with new status effects. +/// +/// The entity effect type, typically for status effects which need systems to pass arguments +public abstract partial class BaseStatusEntityEffect : EntityEffectBase where T : BaseStatusEntityEffect +{ + /// + /// How long the modifier applies (in seconds). + /// Is scaled by reagent amount if used with an EntityEffectReagentArgs. + /// + [DataField] + public TimeSpan? Time = TimeSpan.FromSeconds(2); + + /// + /// Should this effect add the status effect, remove time from it, or set its cooldown? + /// + [DataField] + public StatusEffectMetabolismType Type = StatusEffectMetabolismType.Update; + + /// + /// Delay before the effect starts. If another effect is added with a shorter delay, it takes precedence. + /// + [DataField] + public TimeSpan Delay; +} + +public enum StatusEffectMetabolismType +{ + Update, + Add, + Remove, + Set, +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/DrunkEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/DrunkEntityEffectSystem.cs new file mode 100644 index 0000000000..553300be72 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/DrunkEntityEffectSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Drunk; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Applies the drunk status effect to this entity. +/// The duration of the effect is equal to modified by scale. +/// +/// +public sealed partial class DrunkEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedDrunkSystem _drunk = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var boozePower = args.Effect.BoozePower * args.Scale; + + _drunk.TryApplyDrunkenness(entity, boozePower); + } +} + +/// +public sealed partial class Drunk : EntityEffectBase +{ + /// + /// BoozePower is how long each metabolism cycle will make the drunk effect last for. + /// + [DataField] + public TimeSpan BoozePower = TimeSpan.FromSeconds(3f); + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-drunk", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/ElectrocuteEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/ElectrocuteEntityEffectSystem.cs new file mode 100644 index 0000000000..b5a208f2c7 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/ElectrocuteEntityEffectSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared.Electrocution; +using Content.Shared.StatusEffect; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +// TODO: When Electrocution is moved to new Status, make this use StatusEffectsContainerComponent. +/// +/// Electrocutes this entity for a given amount of damage and time. +/// The shock damage applied by this effect is modified by scale. +/// +/// +public sealed partial class ElectrocuteEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedElectrocutionSystem _electrocution = default!; + + // TODO: When electrocution is new status, change this to new status + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var effect = args.Effect; + + _electrocution.TryDoElectrocution(entity, null, (int)(args.Scale * effect.ShockDamage), effect.ElectrocuteTime, effect.Refresh, ignoreInsulation: effect.BypassInsulation); + } +} + +/// +public sealed partial class Electrocute : EntityEffectBase +{ + /// + /// Time we electrocute this entity + /// + [DataField] public TimeSpan ElectrocuteTime = TimeSpan.FromSeconds(2); + + /// + /// Shock damage we apply to the entity. + /// + [DataField] public int ShockDamage = 5; + + /// + /// Do we refresh the duration? Or add more duration if it already exists. + /// + [DataField] public bool Refresh = true; + + /// + /// Should we by bypassing insulation? + /// + [DataField] public bool BypassInsulation = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("entity-effect-guidebook-electrocute", ("chance", Probability), ("time", ElectrocuteTime.TotalSeconds)); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffect.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffect.cs deleted file mode 100644 index 652c1b90a1..0000000000 --- a/Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffect.cs +++ /dev/null @@ -1,76 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Content.Shared.StatusEffect; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.StatusEffects; - -/// -/// Adds a generic status effect to the entity, -/// not worrying about things like how to affect the time it lasts for -/// or component fields or anything. Just adds a component to an entity -/// for a given time. Easy. -/// -/// -/// Can be used for things like adding accents or something. I don't know. Go wild. -/// -[Obsolete("Use ModifyStatusEffect with StatusEffectNewSystem instead")] -public sealed partial class GenericStatusEffect : EntityEffect -{ - [DataField(required: true)] - public string Key = default!; - - [DataField] - public string Component = String.Empty; - - [DataField] - public float Time = 2.0f; - - /// - /// true - refresh status effect time, false - accumulate status effect time - /// - [DataField] - public bool Refresh = true; - - /// - /// Should this effect add the status effect, remove time from it, or set its cooldown? - /// - [DataField] - public StatusEffectMetabolismType Type = StatusEffectMetabolismType.Add; - - public override void Effect(EntityEffectBaseArgs args) - { - var statusSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - - var time = Time; - if (args is EntityEffectReagentArgs reagentArgs) - time *= reagentArgs.Scale.Float(); - - if (Type == StatusEffectMetabolismType.Add && Component != String.Empty) - { - statusSys.TryAddStatusEffect(args.TargetEntity, Key, TimeSpan.FromSeconds(time), Refresh, Component); - } - else if (Type == StatusEffectMetabolismType.Remove) - { - statusSys.TryRemoveTime(args.TargetEntity, Key, TimeSpan.FromSeconds(time)); - } - else if (Type == StatusEffectMetabolismType.Set) - { - statusSys.TrySetTime(args.TargetEntity, Key, TimeSpan.FromSeconds(time)); - } - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString( - "reagent-effect-guidebook-status-effect", - ("chance", Probability), - ("type", Type), - ("time", Time), - ("key", $"reagent-effect-status-effect-{Key}")); -} - -public enum StatusEffectMetabolismType -{ - Update, - Add, - Remove, - Set -} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffectEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffectEntityEffectSystem.cs new file mode 100644 index 0000000000..2d870a433c --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/GenericStatusEffectEntityEffectSystem.cs @@ -0,0 +1,64 @@ +using Content.Shared.StatusEffect; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Applies a Generic Status Effect to this entity, which is a timed Component. +/// The amount of time the Component is applied is modified by scale. +/// +/// +[Obsolete("Use ModifyStatusEffect instead")] +public sealed partial class GenericStatusEffectEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly StatusEffectsSystem _status = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var time = args.Effect.Time * args.Scale; + + switch (args.Effect.Type) + { + case StatusEffectMetabolismType.Update: + if (args.Effect.Component != String.Empty) + _status.TryAddStatusEffect(entity, args.Effect.Key, time, true, args.Effect.Component); + break; + case StatusEffectMetabolismType.Add: + if (args.Effect.Component != String.Empty) + _status.TryAddStatusEffect(entity, args.Effect.Key, time, false, args.Effect.Component); + break; + case StatusEffectMetabolismType.Remove: + _status.TryRemoveTime(entity, args.Effect.Key, time); + break; + case StatusEffectMetabolismType.Set: + _status.TrySetTime(entity, args.Effect.Key, time); + break; + } + } +} + +/// +public sealed partial class GenericStatusEffect : EntityEffectBase +{ + [DataField(required: true)] + public string Key = default!; + + [DataField] + public string Component = String.Empty; + + [DataField] + public TimeSpan Time = TimeSpan.FromSeconds(2f); + + /// + /// Should this effect add the status effect, remove time from it, or set its cooldown? + /// + [DataField] + public StatusEffectMetabolismType Type = StatusEffectMetabolismType.Update; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString( + "entity-effect-guidebook-status-effect-old", + ("chance", Probability), + ("type", Type), + ("time", Time.TotalSeconds), + ("key", $"entity-effect-status-effect-{Key}")); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/Jitter.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/Jitter.cs deleted file mode 100644 index 891c791b07..0000000000 --- a/Content.Shared/EntityEffects/Effects/StatusEffects/Jitter.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Content.Shared.Chemistry.Reagent; -using Content.Shared.Jittering; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.StatusEffects; - -/// -/// Adds the jitter status effect to a mob. -/// This doesn't use generic status effects because it needs to -/// take in some parameters that JitterSystem needs. -/// -public sealed partial class Jitter : EntityEffect -{ - [DataField] - public float Amplitude = 10.0f; - - [DataField] - public float Frequency = 4.0f; - - [DataField] - public float Time = 2.0f; - - /// - /// true - refresh jitter time, false - accumulate jitter time - /// - [DataField] - public bool Refresh = true; - - public override void Effect(EntityEffectBaseArgs args) - { - var time = Time; - if (args is EntityEffectReagentArgs reagentArgs) - time *= reagentArgs.Scale.Float(); - - args.EntityManager.EntitySysManager.GetEntitySystem() - .DoJitter(args.TargetEntity, TimeSpan.FromSeconds(time), Refresh, Amplitude, Frequency); - } - - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => - Loc.GetString("reagent-effect-guidebook-jittering", ("chance", Probability)); -} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/JitterEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/JitterEntityEffectSystem.cs new file mode 100644 index 0000000000..3b445da747 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/JitterEntityEffectSystem.cs @@ -0,0 +1,45 @@ +using Content.Shared.Jittering; +using Content.Shared.StatusEffect; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +// TODO: When Jittering is moved to new Status, make this use StatusEffectsContainerComponent. +/// +/// Applies the Jittering Status Effect to this entity. +/// The amount of time the Jittering is applied is modified by scale. +/// +/// +public sealed partial class JitterEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedJitteringSystem _jittering = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var time = args.Effect.Time * args.Scale; + + _jittering.DoJitter(entity, TimeSpan.FromSeconds(time), args.Effect.Refresh, args.Effect.Amplitude, args.Effect.Frequency); + } +} + +/// +public sealed partial class Jitter : EntityEffectBase +{ + [DataField] + public float Amplitude = 10.0f; + + [DataField] + public float Frequency = 4.0f; + + [DataField] + public float Time = 2.0f; + + /// + /// true - refresh jitter time, false - accumulate jitter time + /// + [DataField] + public bool Refresh = true; + + public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("entity-effect-guidebook-jittering", ("chance", Probability)); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdown.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdown.cs deleted file mode 100644 index 59ca5da0f7..0000000000 --- a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdown.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Content.Shared.Stunnable; -using JetBrains.Annotations; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.StatusEffects; - -/// -/// Changes the knockdown timer on an entity or causes knockdown. -/// -[UsedImplicitly] -public sealed partial class ModifyKnockdown : EntityEffect -{ - /// - /// Should we only affect those with crawler component? Note if this is false, it will paralyze non-crawler's instead. - /// - [DataField] - public bool Crawling; - - /// - /// Should we drop items when we fall? - /// - [DataField] - public bool Drop; - - /// - /// Time for which knockdown should be applied. Behaviour changes according to . - /// - [DataField] - public TimeSpan Time = TimeSpan.FromSeconds(0.5); - - /// - /// Should this effect add the status effect, remove time from it, or set its cooldown? - /// - [DataField] - public StatusEffectMetabolismType Type = StatusEffectMetabolismType.Add; - - /// - /// Should this effect add knockdown?, remove time from it?, or set its cooldown? - /// - [DataField] - public bool Refresh = true; - - /// - public override void Effect(EntityEffectBaseArgs args) - { - var stunSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - - var time = Time; - if (args is EntityEffectReagentArgs reagentArgs) - time *= reagentArgs.Scale.Float(); - - switch (Type) - { - case StatusEffectMetabolismType.Update: - if (Crawling) - { - stunSys.TryCrawling(args.TargetEntity, time, drop: Drop); - } - else - { - stunSys.TryKnockdown(args.TargetEntity, time, drop: Drop); - } - break; - case StatusEffectMetabolismType.Add: - if (Crawling) - { - stunSys.TryCrawling(args.TargetEntity, time, false, drop: Drop); - } - else - { - stunSys.TryKnockdown(args.TargetEntity, time, false, drop: Drop); - } - break; - case StatusEffectMetabolismType.Remove: - stunSys.AddKnockdownTime(args.TargetEntity, -time); - break; - case StatusEffectMetabolismType.Set: - if (Crawling) - { - stunSys.TryCrawling(args.TargetEntity, time, drop: Drop); - } - else - { - stunSys.TryKnockdown(args.TargetEntity, time, drop: Drop); - } - stunSys.SetKnockdownTime(args.TargetEntity, time); - break; - } - } - - /// - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) - => Loc.GetString( - "reagent-effect-guidebook-knockdown", - ("chance", Probability), - ("type", Type), - ("time", Time.TotalSeconds) - ); -} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdownEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdownEntityEffectSystem.cs new file mode 100644 index 0000000000..5e01774ce4 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyKnockdownEntityEffectSystem.cs @@ -0,0 +1,72 @@ +using Content.Shared.Standing; +using Content.Shared.Stunnable; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Applies knockdown to this entity. +/// Duration is modified by scale. +/// +/// +public sealed partial class ModifyKnockdownEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly SharedStunSystem _stun = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var time = args.Effect.Time * args.Scale; + + switch (args.Effect.Type) + { + case StatusEffectMetabolismType.Update: + if (args.Effect.Crawling) + _stun.TryCrawling(entity.Owner, time, drop: args.Effect.Drop); + else + _stun.TryKnockdown(entity.Owner, time, drop: args.Effect.Drop); + break; + case StatusEffectMetabolismType.Add: + if (args.Effect.Crawling) + _stun.TryCrawling(entity.Owner, time, false, drop: args.Effect.Drop); + else + _stun.TryKnockdown(entity.Owner, time, false, drop: args.Effect.Drop); + break; + case StatusEffectMetabolismType.Remove: + _stun.AddKnockdownTime(entity.Owner, - time ?? TimeSpan.Zero); + break; + case StatusEffectMetabolismType.Set: + if (args.Effect.Crawling) + _stun.TryCrawling(entity.Owner, drop: args.Effect.Drop); + else + _stun.TryKnockdown(entity.Owner, time, drop: args.Effect.Drop); + _stun.SetKnockdownTime(entity.Owner, time ?? TimeSpan.Zero); + break; + } + } +} + +/// +public sealed partial class ModifyKnockdown : BaseStatusEntityEffect +{ + /// + /// Should we only affect those with crawler component? Note if this is false, it will paralyze non-crawler's instead. + /// + [DataField] + public bool Crawling; + + /// + /// Should we drop items when we fall? + /// + [DataField] + public bool Drop; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Time == null + ? null + : Loc.GetString( + "entity-effect-guidebook-knockdown", + ("chance", Probability), + ("type", Type), + ("time", Time.Value.TotalSeconds) + ); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyParalysisEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyParalysisEntityEffectSystem.cs new file mode 100644 index 0000000000..318c8ad30b --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyParalysisEntityEffectSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared.StatusEffectNew; +using Content.Shared.StatusEffectNew.Components; +using Content.Shared.Stunnable; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Applies the paralysis status effect to this entity. +/// Duration is modified by scale. +/// +/// +public sealed partial class ModifyParalysisEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly StatusEffectsSystem _status = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var time = args.Effect.Time * args.Scale; + + switch (args.Effect.Type) + { + case StatusEffectMetabolismType.Update: + _stun.TryUpdateParalyzeDuration(entity, time); + break; + case StatusEffectMetabolismType.Add: + _stun.TryAddParalyzeDuration(entity, time); + break; + case StatusEffectMetabolismType.Remove: + _status.TryRemoveTime(entity, SharedStunSystem.StunId, time); + break; + case StatusEffectMetabolismType.Set: + _status.TrySetStatusEffectDuration(entity, SharedStunSystem.StunId, time); + break; + } + } +} + +/// +public sealed partial class ModifyParalysis : BaseStatusEntityEffect +{ + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Time == null + ? null // Not gonna make a whole new looc for something that shouldn't ever exist. + : Loc.GetString( + "entity-effect-guidebook-paralyze", + ("chance", Probability), + ("time", Time.Value.TotalSeconds) + ); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffect.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffect.cs deleted file mode 100644 index d7bf6482bd..0000000000 --- a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffect.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Content.Shared.StatusEffectNew; -using JetBrains.Annotations; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.StatusEffects; - -/// -/// Changes status effects on entities: Adds, removes or sets time. -/// -[UsedImplicitly] -public sealed partial class ModifyStatusEffect : EntityEffect -{ - [DataField(required: true)] - public EntProtoId EffectProto; - - /// - /// Time for which status effect should be applied. Behaviour changes according to . - /// - [DataField] - public float Time = 2.0f; - - /// - /// Delay before the effect starts. If another effect is added with a shorter delay, it takes precedence. - /// - [DataField] - public float Delay = 0f; - - /// - /// Should this effect add the status effect, remove time from it, or set its cooldown? - /// - [DataField] - public StatusEffectMetabolismType Type = StatusEffectMetabolismType.Add; - - /// - public override void Effect(EntityEffectBaseArgs args) - { - var statusSys = args.EntityManager.EntitySysManager.GetEntitySystem(); - - var time = Time; - if (args is EntityEffectReagentArgs reagentArgs) - time *= reagentArgs.Scale.Float(); - - var duration = TimeSpan.FromSeconds(time); - switch (Type) - { - case StatusEffectMetabolismType.Update: - statusSys.TryUpdateStatusEffectDuration(args.TargetEntity, EffectProto, duration, Delay > 0 ? TimeSpan.FromSeconds(Delay) : null); - break; - case StatusEffectMetabolismType.Add: - statusSys.TryAddStatusEffectDuration(args.TargetEntity, EffectProto, duration, Delay > 0 ? TimeSpan.FromSeconds(Delay) : null); - break; - case StatusEffectMetabolismType.Remove: - statusSys.TryAddTime(args.TargetEntity, EffectProto, -duration); - break; - case StatusEffectMetabolismType.Set: - statusSys.TrySetStatusEffectDuration(args.TargetEntity, EffectProto, duration, TimeSpan.FromSeconds(Delay)); - break; - } - } - - /// - protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => - Delay > 0 - ? Loc.GetString( - "reagent-effect-guidebook-status-effect-delay", - ("chance", Probability), - ("type", Type), - ("time", Time), - ("key", prototype.Index(EffectProto).Name), - ("delay", Delay)) - : Loc.GetString( - "reagent-effect-guidebook-status-effect", - ("chance", Probability), - ("type", Type), - ("time", Time), - ("key", prototype.Index(EffectProto).Name) - ); -} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffectEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffectEntityEffectSystem.cs new file mode 100644 index 0000000000..d7e4b634f3 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/ModifyStatusEffectEntityEffectSystem.cs @@ -0,0 +1,66 @@ +using Content.Shared.StatusEffectNew; +using Content.Shared.StatusEffectNew.Components; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Applies a given status effect to this entity. +/// Duration is modified by scale. +/// +/// +public sealed partial class ModifyStatusEffectEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly StatusEffectsSystem _status = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var time = args.Effect.Time * args.Scale; + var delay = args.Effect.Delay; + + switch (args.Effect.Type) + { + case StatusEffectMetabolismType.Update: + _status.TryUpdateStatusEffectDuration(entity, args.Effect.EffectProto, time, delay); + break; + case StatusEffectMetabolismType.Add: + if (time != null) + _status.TryAddStatusEffectDuration(entity, args.Effect.EffectProto, time.Value, delay); + else + _status.TryUpdateStatusEffectDuration(entity, args.Effect.EffectProto, time, delay); + break; + case StatusEffectMetabolismType.Remove: + _status.TryRemoveTime(entity, args.Effect.EffectProto, time); + break; + case StatusEffectMetabolismType.Set: + _status.TrySetStatusEffectDuration(entity, args.Effect.EffectProto, time, delay); + break; + } + } +} + +/// +public sealed partial class ModifyStatusEffect : BaseStatusEntityEffect +{ + /// + /// Prototype of the status effect we're modifying. + /// + [DataField(required: true)] + public EntProtoId EffectProto; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Time == null + ? Loc.GetString( + "entity-effect-guidebook-status-effect-indef", + ("chance", Probability), + ("type", Type), + ("key", prototype.Index(EffectProto).Name), + ("delay", Delay.TotalSeconds)) + : Loc.GetString( + "entity-effect-guidebook-status-effect", + ("chance", Probability), + ("type", Type), + ("time", Time.Value.TotalSeconds), + ("key", prototype.Index(EffectProto).Name), + ("delay", Delay.TotalSeconds)); +} diff --git a/Content.Shared/EntityEffects/Effects/StatusEffects/MovementSpeedModifierEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/StatusEffects/MovementSpeedModifierEntityEffectSystem.cs new file mode 100644 index 0000000000..ed9923f856 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/StatusEffects/MovementSpeedModifierEntityEffectSystem.cs @@ -0,0 +1,92 @@ +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Content.Shared.StatusEffectNew; +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects.StatusEffects; + +/// +/// Applies a given movement speed modifier status effect to this entity. +/// Duration is modified by scale. +/// +/// +public sealed partial class MovementSpeedModifierEntityEffectSystem : EntityEffectSystem +{ + [Dependency] private readonly StatusEffectsSystem _status = default!; + [Dependency] private readonly MovementModStatusSystem _movementModStatus = default!; + + protected override void Effect(Entity entity, ref EntityEffectEvent args) + { + var proto = args.Effect.EffectProto; + var sprintMod = args.Effect.SprintSpeedModifier; + var walkMod = args.Effect.WalkSpeedModifier; + + switch (args.Effect.Type) + { + case StatusEffectMetabolismType.Update: + _movementModStatus.TryUpdateMovementSpeedModDuration( + entity, + proto, + args.Effect.Time * args.Scale, + sprintMod, + walkMod); + break; + case StatusEffectMetabolismType.Add: + if (args.Effect.Time != null) + { + _movementModStatus.TryAddMovementSpeedModDuration( + entity, + proto, + args.Effect.Time.Value * args.Scale, + sprintMod, + walkMod); + } + else + { + _movementModStatus.TryUpdateMovementSpeedModDuration( + entity, + proto, + args.Effect.Time * args.Scale, + sprintMod, + walkMod); + } + break; + case StatusEffectMetabolismType.Remove: + _status.TryRemoveTime(entity, args.Effect.EffectProto, args.Effect.Time * args.Scale); + break; + case StatusEffectMetabolismType.Set: + _status.TrySetStatusEffectDuration(entity, proto, args.Effect.Time * args.Scale); + break; + } + } +} + +/// +public sealed partial class MovementSpeedModifier : BaseStatusEntityEffect +{ + /// + /// How much the entities' walk speed is multiplied by. + /// + [DataField] + public float WalkSpeedModifier = 1f; + + /// + /// How much the entities' run speed is multiplied by. + /// + [DataField] + public float SprintSpeedModifier = 1f; + + /// + /// Movement speed modifier prototype we're adding. Adding in case we ever want more than one prototype that boosts speed. + /// + [DataField] + public EntProtoId EffectProto = MovementModStatusSystem.ReagentSpeed; + + public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Time == null + ? null // Not gonna make a whole new looc for something that shouldn't ever exist. + : Loc.GetString("entity-effect-guidebook-movespeed-modifier", + ("chance", Probability), + ("sprintspeed", SprintSpeedModifier), + ("time", Time.Value.TotalSeconds)); +} diff --git a/Content.Shared/EntityEffects/Effects/TemplateEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/TemplateEntityEffectSystem.cs new file mode 100644 index 0000000000..ea7c2dc8d4 --- /dev/null +++ b/Content.Shared/EntityEffects/Effects/TemplateEntityEffectSystem.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.EntityEffects.Effects; + +/// +/// A brief summary of the effect. +/// +/// +public sealed partial class TemplateEntityEffectSystem : EntityEffectSystem +{ + protected override void Effect(Entity entity, ref EntityEffectEvent