Переглянути джерело

Gulag map/gamemode (#251)

* Dirt tile renames

* Brick Walls

* Metal Bars

* Cell Doors

* metal doors

* Mop sprite and description

* Road tiles

* Grimey wood tiles

* Fixed layering on bars

* 3 Floor tiles

* Grimy table

* Railing barricades and rusty railings

* Gulag commissary

needs more items in the list

* Fixes teleporters not canceling dragging

* Adds the map and some loadouts/jobs/metadata/gamemodes

the map has existed before now but was not committed yet

* Fixes the map config

* Spawning works now

* Makes material doors no longer airtight

* Cleans up the new jobs and makes them use locale files

* Fixes weather on some tiles and doors

* Some mapping

* Expanded outside the prison area a bit

---------

Co-authored-by: Taislin <taislin@civ13.com>
dallaszzz 3 місяців тому
батько
коміт
459f0b9e4f
58 змінених файлів з 1255 додано та 19 видалено
  1. 9 9
      Content.Server/_Stalker/Teleports/LocalTeleport/LocalTeleportSystem.cs
  2. 4 0
      Resources/Locale/en-US/Civ14/jobs-descriptions.ftl
  3. 8 0
      Resources/Locale/en-US/Civ14/jobs.ftl
  4. 4 1
      Resources/Locale/en-US/job/department-desc.ftl
  5. 3 0
      Resources/Locale/en-US/job/department.ftl
  6. 74 0
      Resources/Maps/civ/tdm/gulag14.yml
  7. 68 0
      Resources/Prototypes/Civ14/Entities/Markers/jobs.yml
  8. 90 0
      Resources/Prototypes/Civ14/Entities/Structures/Craft/gulag_commissary.yml
  9. 11 0
      Resources/Prototypes/Civ14/Entities/Structures/Furniture/tables.yml
  10. 102 0
      Resources/Prototypes/Civ14/Entities/Structures/Walls/barricades.yml
  11. 77 0
      Resources/Prototypes/Civ14/Entities/Structures/Walls/doors.yml
  12. 3 3
      Resources/Prototypes/Civ14/Entities/Structures/Walls/walls.yml
  13. 61 0
      Resources/Prototypes/Civ14/Roles/Jobs/RPTDM/gulag_prisoner.yml
  14. 136 0
      Resources/Prototypes/Civ14/Roles/Jobs/RPTDM/gulag_soviet.yml
  15. 22 0
      Resources/Prototypes/Civ14/Roles/Jobs/departments.yml
  16. 2 5
      Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml
  17. 14 0
      Resources/Prototypes/Entities/Stations/nanotrasen.yml
  18. 2 1
      Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml
  19. 41 0
      Resources/Prototypes/Entities/Structures/Walls/railing.yml
  20. 1 0
      Resources/Prototypes/Maps/Pools/default.yml
  21. 25 0
      Resources/Prototypes/Maps/civ/gulag14.yml
  22. 74 0
      Resources/Prototypes/Tiles/civ_tiles.yml
  23. 59 0
      Resources/Prototypes/ai_factions.yml
  24. 11 0
      Resources/Prototypes/game_presets.yml
  25. 2 0
      Resources/Prototypes/tags.yml
  26. BIN
      Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/closed.png
  27. BIN
      Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/closing.png
  28. 138 0
      Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/meta.json
  29. BIN
      Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/open.png
  30. BIN
      Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/opening.png
  31. BIN
      Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/closed.png
  32. BIN
      Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/closing.png
  33. 138 0
      Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/meta.json
  34. BIN
      Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/open.png
  35. BIN
      Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/opening.png
  36. 3 0
      Resources/Textures/Civ14/Structures/Floors/roads.rsi/meta.json
  37. BIN
      Resources/Textures/Civ14/Structures/Floors/roads.rsi/streetfull_light.png
  38. BIN
      Resources/Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy1.png
  39. BIN
      Resources/Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy2.png
  40. BIN
      Resources/Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy3.png
  41. BIN
      Resources/Textures/Civ14/Structures/Floors/wood.rsi/woodgrime_horizontal.png
  42. BIN
      Resources/Textures/Civ14/Structures/Floors/wood.rsi/woodgrime_vertical.png
  43. BIN
      Resources/Textures/Civ14/Structures/Walls/old_brick.rsi/new_brick7.png
  44. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/full.png
  45. 46 0
      Resources/Textures/Civ14/Structures/grime_table.rsi/meta.json
  46. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_0.png
  47. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_1.png
  48. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_2.png
  49. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_3.png
  50. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_4.png
  51. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_5.png
  52. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_6.png
  53. BIN
      Resources/Textures/Civ14/Structures/grime_table.rsi/state_7.png
  54. BIN
      Resources/Textures/Civ14/Structures/rusty_railings.rsi/corner.png
  55. BIN
      Resources/Textures/Civ14/Structures/rusty_railings.rsi/corner_small.png
  56. 27 0
      Resources/Textures/Civ14/Structures/rusty_railings.rsi/meta.json
  57. BIN
      Resources/Textures/Civ14/Structures/rusty_railings.rsi/round.png
  58. BIN
      Resources/Textures/Civ14/Structures/rusty_railings.rsi/side.png

+ 9 - 9
Content.Server/_Stalker/Teleports/LocalTeleport/LocalTeleportSystem.cs

@@ -1,4 +1,4 @@
-using System.Linq;
+using System.Linq;
 using Content.Shared._Stalker.Teleport;
 using Content.Shared.Access.Systems;
 using Content.Shared.Movement.Pulling.Systems;
@@ -6,6 +6,7 @@
 using Content.Shared.Teleportation.Systems;
 using Robust.Shared.Physics.Events;
 using Robust.Shared.Random;
+using Content.Shared.Movement.Pulling.Components;
 
 namespace Content.Server._Stalker.Teleports.LocalTeleport;
 /// <summary>
@@ -19,7 +20,6 @@ public sealed class LocalTeleportSystem : SharedTeleportSystem
     [Dependency] private readonly LinkedEntitySystem _linkedEntitySystem = default!;
     [Dependency] private readonly IEntityManager _entMan = default!;
     [Dependency] private readonly AccessReaderSystem _accessReaderSystem = default!;
-
     public override void Initialize()
     {
         SubscribeLocalEvent<LocalTeleportComponent, StartCollideEvent>(OnStartCollide);
@@ -37,13 +37,13 @@ private void OnStartCollide(EntityUid uid, LocalTeleportComponent component, ref
                 return;
         }
 
-        // Asked to remove, testing now
-        // if (TryComp<SharedPullableComponent>(subject, out var pullable) && pullable.BeingPulled)
-        //     _pulling.TryStopPull(pullable);
-        //
-        // if (TryComp<SharedPullerComponent>(subject, out var pulling)
-        //     && pulling.Pulling != null && TryComp<SharedPullableComponent>(pulling.Pulling.Value, out var subjectPulling))
-        //     _pulling.TryStopPull(subjectPulling);
+        // Asked to remove, testing now - Reenabled for civ14 because dragging items through is buggy
+        if (TryComp<PullableComponent>(subject, out var pullable) && pullable.BeingPulled)
+            _pulling.TryStopPull(subject, pullable);
+
+        if (TryComp<PullerComponent>(subject, out var pulling)
+            && pulling.Pulling != null && TryComp<PullableComponent>(pulling.Pulling.Value, out var subjectPulling))
+            _pulling.TryStopPull(subject, subjectPulling);
 
         // Remove Timeout from other portal
         if (HasComp<PortalTimeoutComponent>(subject))

+ 4 - 0
Resources/Locale/en-US/Civ14/jobs-descriptions.ftl

@@ -54,3 +54,7 @@ job-description-civ-blugoslavia-medic = As a field surgeon, keep your troops ali
 
 job-description-civ-unitednations-rifleman = You are a rifleman serving the UN in this area. Keep the peace and civilians safe!
 job-description-civ-unitednations-medic = As a field medic for the UN, keep civilians alive!
+
+job-description-civ-gulag-soviet-cpt = You are a captain assigned to watch over the gulag. Manage your prison and keep it from decending into chaos!
+job-description-civ-gulag-soviet-sgt = You are a sergeant assigned to watch over the gulag. Keep the guards and prisoners in check!
+job-description-civ-gulag-soviet-guard = You are a guard assigned to watch over the gulag. Follow orders from your superiors and keep the prisoners in check!

+ 8 - 0
Resources/Locale/en-US/Civ14/jobs.ftl

@@ -80,3 +80,11 @@ job-name-civ-blugoslavia-medic = Medic
 
 job-name-civ-unitednations-rifleman = Infantry
 job-name-civ-unitednations-medic = Medic
+
+job-name-civ-gulag-soviet-cpt = Captain
+job-name-civ-gulag-soviet-sgt = Sergeant
+job-name-civ-gulag-soviet-guard = Guard
+
+job-name-civ-gulag-prisoner-german = German Prisoner
+job-name-civ-gulag-prisoner-ukrainian = Ukrainian Prisoner
+job-name-civ-gulag-prisoner-polish = Polish Prisoner

+ 4 - 1
Resources/Locale/en-US/job/department-desc.ftl

@@ -1,4 +1,4 @@
-department-Cargo-description = Complete bounties, earn Spessos, and order useful supplies for the crew.
+department-Cargo-description = Complete bounties, earn Spessos, and order useful supplies for the crew.
 department-Civilian-description = Perform small helpful tasks to keep the station sane and well catered.
 department-Command-description = Manage the crew and keep them working efficiently.
 department-CentralCommand-description = Manage the crew and keep them working efficiently.
@@ -19,3 +19,6 @@ department-SovietCW-description = The Soviet Union are one of the factions prese
 department-Insurgents-description = The Insurgents are one of the factions present in this map.
 department-Blugoslavia-description = Blugoslavia are one of the factions present in this map.
 department-UnitedNations-description = United Nations is one of the factions present in this map.
+
+department-Gulag-Soviets-Description = Soviet gulag guards are one of the factions present in this map.
+department-Gulag-Prisoners-Description = Prisoners are one of the factions present in this map.

+ 3 - 0
Resources/Locale/en-US/job/department.ftl

@@ -19,3 +19,6 @@ department-SovietCW = Soviet Union
 department-Insurgents = Insurgents
 department-Blugoslavia = Blugoslavia
 department-UnitedNations = United Nations
+
+department-Gulag-Soviets = Soviets
+department-Gulag-Prisoners = Prisoners

Різницю між файлами не показано, бо вона завелика
+ 74 - 0
Resources/Maps/civ/tdm/gulag14.yml


+ 68 - 0
Resources/Prototypes/Civ14/Entities/Markers/jobs.yml

@@ -12,6 +12,8 @@
         - state: green
         - state: passenger
 
+# TDM
+
 - type: entity
   id: SpawnPointEnglish
   parent: SpawnPointJobBase
@@ -155,3 +157,69 @@
         - state: blue # duh
         - sprite: Civ14/Objects/decals.rsi
           state: flag_un
+
+# Gulag
+
+- type: entity
+  id: SpawnPointGulagSoviet
+  parent: SpawnPointJobBase
+  name: gulag soviet spawner
+  suffix: faction spawn
+  components:
+    - type: SpawnPoint
+      faction: GulagSoviet
+      spawn_type: Faction
+    - type: Sprite
+      sprite: Markers/cross.rsi
+      layers:
+        - state: pink
+        - sprite: Civ14/Objects/decals.rsi
+          state: flag_sov
+
+- type: entity
+  id: SpawnPointGulagPrisonerGerman
+  parent: SpawnPointJobBase
+  name: gulag german prisoner spawner
+  suffix: faction spawn
+  components:
+    - type: SpawnPoint
+      faction: GulagPrisonerGerman
+      spawn_type: Faction
+    - type: Sprite
+      sprite: Markers/cross.rsi
+      layers:
+        - state: pink
+        - sprite: Civ14/Objects/decals.rsi
+          state: flag_germany_republic
+
+- type: entity
+  id: SpawnPointGulagPrisonerUkrainian
+  parent: SpawnPointJobBase
+  name: gulag ukrainian prisoner spawner
+  suffix: faction spawn
+  components:
+    - type: SpawnPoint
+      faction: GulagPrisonerUkrainian
+      spawn_type: Faction
+    - type: Sprite
+      sprite: Markers/cross.rsi
+      layers:
+        - state: pink
+        - sprite: Civ14/Objects/decals.rsi
+          state: flag_ukraine
+
+- type: entity
+  id: SpawnPointGulagPrisonerPoland
+  parent: SpawnPointJobBase
+  name: gulag polish prisoner spawner
+  suffix: faction spawn
+  components:
+    - type: SpawnPoint
+      faction: GulagPrisonerPoland
+      spawn_type: Faction
+    - type: Sprite
+      sprite: Markers/cross.rsi
+      layers:
+        - state: pink
+        - sprite: Civ14/Objects/decals.rsi
+          state: flag_poland

+ 90 - 0
Resources/Prototypes/Civ14/Entities/Structures/Craft/gulag_commissary.yml

@@ -0,0 +1,90 @@
+- type: entity
+  parent: BaseItem
+  id: Roubles
+  name: roubles
+  description: Currency of the USSR.
+  components:
+    - type: Sprite
+      sprite: Civ14/Objects/trash.rsi
+      state: money
+    - type: Item
+      sprite: Civ14/Objects/trash.rsi
+      state: money
+      size: Small
+    - type: Tag
+      tags:
+        - CivMoney
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 100
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: Stack
+      stackType: Roubles
+    - type: Material
+    - type: PhysicalComposition
+      materialComposition:
+        Roubles: 1
+
+- type: stack
+  id: Roubles
+  name: roubles
+  spawn: Roubles
+  maxCount: 100
+
+- type: material
+  id: Roubles
+  stackEntity: Roubles
+  name: Roubles
+  unit: Rbl
+  icon: { sprite: /Textures/Civ14/Objects/trash.rsi, state: money }
+  color: "#d6ad77"
+  price: 1
+
+- type: entity
+  parent: BaseLathe
+  id: GulagCommissary
+  name: gulag commissary
+  description: A station for buying food and items.
+  components:
+    - type: Transform
+      noRot: false
+    - type: Sprite
+      sprite: Civ14/Objects/vending.rsi
+      snapCardinals: true
+      state: market_stall
+    - type: ApcPowerReceiver
+      needsPower: false
+      powerLoad: 0
+    - type: Anchorable
+      delay: 2
+    - type: Lathe
+      producingSound: /Audio/Machines/button.ogg
+      staticPacks:
+        - GulagCommissary
+    - type: MaterialStorage
+      whitelist:
+        tags:
+          - CivMoney
+
+- type: latheCategory
+  id: GulagCommissary
+  name: Gulag Commissary
+
+- type: latheRecipePack
+  id: GulagCommissary
+  recipes:
+    - GulagCommissaryInventoryNutribrick
+
+- type: latheRecipe
+  id: GulagCommissaryInventoryNutribrick
+  categories:
+    - GulagCommissary
+  completetime: 0.5
+  materials:
+    Roubles: 15
+  result: FoodSnackNutribrick

+ 11 - 0
Resources/Prototypes/Civ14/Entities/Structures/Furniture/tables.yml

@@ -130,3 +130,14 @@
     - type: Sprite
       sprite: Civ14/Structures/closet.rsi
       state: endtable-alt
+
+- type: entity
+  id: TableWoodGrime
+  parent: TableWoodClassic
+  name: wood table
+  description: A grimy wood table.
+  components:
+    - type: Sprite
+      sprite: Civ14/Structures/grime_table.rsi
+    - type: Icon
+      sprite: Civ14/Structures/grime_table.rsi

+ 102 - 0
Resources/Prototypes/Civ14/Entities/Structures/Walls/barricades.yml

@@ -604,3 +604,105 @@
     - type: Barricade
       bidirectional: true
       blocking: 50
+
+# Metal Bars
+- type: entity
+  id: BarricadeMetalBars
+  description: A set of solid metal bars.
+  parent: BaseStructure
+  name: metal bars
+  components:
+    - type: Sprite
+      sprite: Civ14/Structures/walls.rsi
+      state: steeljail
+      drawdepth: FloorObjects
+      noRot: true
+    - type: Physics
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape:
+            !type:PhysShapeAabb {}
+          mask:
+          - FullTileMask
+          layer:
+          - WallLayer
+    - type: AtmosExposed
+    - type: Barricade
+      bidirectional: true
+      blocking: 0
+
+# Barricade Railing
+- type: entity
+  id: BarricadeRailingBase
+  description: A sandbag wall.
+  parent: BaseBarricade
+  abstract: true
+  name: barricade railing base
+  placement:
+    mode: SnapgridCenter
+  components:
+    - type: InteractionOutline
+    - type: Sprite
+      sprite: Civ14/Objects/Railing.rsi
+      state: stone
+      drawdepth: FloorObjects
+      noRot: true
+    - type: Climbable
+    - type: Physics
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.49,-0.45,0.49,-0.25"
+          mask:
+            - FullTileMask
+          layer:
+            - WallLayer
+    - type: Damageable
+      damageModifierSet: Inert
+      damageContainer: StructuralInorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 180
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: Barricade
+      bidirectional: true
+      blocking: 25
+    - type: AtmosExposed
+    - type: Construction
+      graph: BarricadeSandbags
+      node: end
+
+- type: entity
+  id: BarricadeRailingStone
+  description: A stone railing.
+  parent: BarricadeRailingBase
+  name: stone railing
+  components:
+     - type: Sprite
+       sprite: Civ14/Objects/Railing.rsi
+       state: stone
+
+- type: entity
+  id: BarricadeRailingSandstone
+  description: A sandstone railing.
+  parent: BarricadeRailingBase
+  name: sandstone railing
+  components:
+     - type: Sprite
+       sprite: Civ14/Objects/Railing.rsi
+       state: sandstone
+
+- type: entity
+  id: BarricadeRailingBrick
+  description: A brick railing.
+  parent: BarricadeRailingBase
+  name: brick railing
+  components:
+     - type: Sprite
+       sprite: Civ14/Objects/Railing.rsi
+       state: sandstone

+ 77 - 0
Resources/Prototypes/Civ14/Entities/Structures/Walls/doors.yml

@@ -39,3 +39,80 @@
       agemax: 8
       graph: WoodDoorClassic
       node: end
+
+# Cell Door
+- type: entity
+  id: CellDoor
+  name: cell door
+  parent: BaseMaterialDoor
+  description: A door of metal bars.
+  components:
+    - type: InteractionOutline
+    - type: Sprite
+      sprite: Civ14/Structures/Doors/cell_doors.rsi
+      layers:
+        - state: closed
+          map: ["enum.DoorVisualLayers.Base"]
+    - type: AnimationPlayer
+    - type: Physics
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.49,-0.49,0.49,0.49"
+          density: 100
+          layer:
+            - AirlockLayer
+    - type: Door
+      occludes: false
+      bumpOpen: false
+      clickOpen: true
+      canCrush: false
+      closeTimeOne: 0.2
+      closeTimeTwo: 0.6
+      openTimeOne: 0.6
+      openTimeTwo: 0.2
+      openingAnimationTime: 1.2
+      closingAnimationTime: 1.2
+      openSound:
+        path: /Audio/Effects/metal_scrape2.ogg
+      closeSound:
+        path: /Audio/Effects/metal_scrape3.ogg
+    - type: Appearance
+    - type: Damageable
+      damageContainer: StructuralInorganic
+      damageModifierSet: Metallic
+    - type: IconSmooth
+      key: walls
+      mode: NoSprite
+    - type: Barricade
+      bidirectional: true
+      blocking: 0
+    - type: Occluder
+      enabled: false
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 400
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+
+# Metal Door
+- type: entity
+  id: MetalHeavyDoor
+  name: metal heavy door
+  parent: BaseMaterialDoor
+  components:
+    - type: Sprite
+      sprite: Civ14/Structures/Doors/metal_doors.rsi
+      layers:
+        - state: closed
+          map: ["enum.DoorVisualLayers.Base"]
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 600
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]

+ 3 - 3
Resources/Prototypes/Civ14/Entities/Structures/Walls/walls.yml

@@ -865,12 +865,12 @@
       tags:
         - Wall
     - type: Sprite
-      sprite: Structures/Walls/cobblebrick_sand.rsi
+      sprite: Civ14/Structures/Walls/old_brick.rsi
     - type: Icon
-      sprite: Structures/Walls/cobblebrick_sand.rsi
+      sprite: Civ14/Structures/Walls/old_brick.rsi
     - type: IconSmooth
       key: walls
-      base: cobblebrick
+      base: new_brick
 
 - type: entity
   parent: OldBrickWallIndestructible

+ 61 - 0
Resources/Prototypes/Civ14/Roles/Jobs/RPTDM/gulag_prisoner.yml

@@ -0,0 +1,61 @@
+# German
+- type: job
+  id: GulagPrisonerGerman
+  name: job-name-civ-gulag-prisoner-german
+  faction: GulagPrisonerGerman
+  originalName: Nemetskiy plennik
+  description: temp description
+  startingGear: GulagPrisonerGear
+  playTimeTracker: JobGulagPrisonerGerman
+  special:
+    - !type:AddComponentSpecial
+      components:
+        - type: NpcFactionMember
+          factions:
+            - GulagPrisonerGerman
+        - type: ShowFactionIcons
+          factionIcon: Ger3Faction
+
+# Ukrainian
+- type: job
+  id: GulagPrisonerUkrainian
+  name: job-name-civ-gulag-prisoner-ukrainian
+  faction: GulagPrisonerUkrainian
+  originalName: Ukrainskiy plennik
+  description: temp description
+  startingGear: GulagPrisonerGear
+  playTimeTracker: JobGulagPrisonerUkrainian
+  special:
+    - !type:AddComponentSpecial
+      components:
+        - type: NpcFactionMember
+          factions:
+            - GulagPrisonerUkrainian
+        - type: ShowFactionIcons
+          factionIcon: UkrFaction
+
+# Polish
+- type: job
+  id: GulagPrisonerPolish
+  name: job-name-civ-gulag-prisoner-polish
+  faction: GulagPrisonerPolish
+  originalName: Polskiy plennik
+  description: temp description
+  startingGear: GulagPrisonerGear
+  playTimeTracker: JobGulagPrisonerPolish
+  special:
+    - !type:AddComponentSpecial
+      components:
+        - type: NpcFactionMember
+          factions:
+            - GulagPrisonerPolish
+        - type: ShowFactionIcons
+          factionIcon: PolFaction
+
+# Starting gear
+- type: startingGear
+  id: GulagPrisonerGear
+  equipment:
+    shoes: ClothingShoesColorBlack # this should be changed since they look silly
+    jumpsuit: civ13_uniform_GULAG_prisoner_clothing
+    pocket2: Roubles

+ 136 - 0
Resources/Prototypes/Civ14/Roles/Jobs/RPTDM/gulag_soviet.yml

@@ -0,0 +1,136 @@
+- type: job
+  id: GulagSovietCaptain
+  name: job-name-civ-gulag-soviet-cpt
+  faction: GulagSoviet
+  originalName: Kapitan
+  description: job-description-civ-gulag-soviet-cpt
+  playTimeTracker: JobGulagSovietCaptain
+  requirements:
+    - !type:TotalJobsTimeRequirement
+      group: CivJobsSquadLeader
+      time: 7200 # 2 hours
+  startingGear: GulagSovietCaptainGear
+  icon: "JobIconICpt"
+  supervisors: job-supervisors-nobody
+  ranks:
+    RankMajor:
+      - !type:RoleTimeRequirement
+        role: JobSovietCaptain
+        time: 18000 # 5 hours
+    RankCaptain: []
+  special:
+    - !type:AddComponentSpecial
+      components:
+        - type: RussianAccent
+        - type: NpcFactionMember
+          factions:
+            - GulagSoviet
+        - type: ShowFactionIcons
+          factionIcon: SovietFaction
+          jobIcon: JobIconICpt
+          assignSquad: false
+
+- type: startingGear
+  id: GulagSovietCaptainGear
+  equipment:
+    shoes: civ13_shoes_Soviet_sapogi_boots
+    jumpsuit: civ13_uniform_Soviet_officer_uniform
+    outerClothing: civ13_suit_Soviet_officer_coat
+    belt: civ13_pistol_TT_33
+    head: civ13_head_soviet_officer_cap
+    pocket1: Compass
+
+# Sergeant
+- type: job
+  id: GulagSovietSergeant
+  originalName: Serzhant
+  name: job-name-civ-gulag-soviet-sgt
+  faction: GulagSoviet
+  description: job-description-civ-gulag-soviet-sgt
+  playTimeTracker: JobGulagSovietSergeant
+  requirements:
+    - !type:TotalJobsTimeRequirement
+      group: CivJobsEnlisted
+      time: 7200 # 2 hours
+  startingGear: SovietSergeantGear
+  icon: "JobIconISgt"
+  supervisors: job-supervisors-cpt
+  ranks:
+    RankSergeantMajor:
+      - !type:RoleTimeRequirement
+        role: JobSovietSergeant
+        time: 36000 # 10 hours
+    RankStaffSergeant:
+      - !type:RoleTimeRequirement
+        role: JobSovietSergeant
+        time: 10800 # 3 hours
+    RankSergeant: []
+  special:
+    - !type:AddComponentSpecial
+      components:
+        - type: RussianAccent
+        - type: NpcFactionMember
+          factions:
+            - GulagSoviet
+        - type: ShowFactionIcons
+          factionIcon: SovietFaction
+          jobIcon: JobIconISgt
+          assignSquad: true
+
+- type: startingGear
+  id: GulagSovietSergeantGear
+  equipment:
+    shoes: civ13_shoes_leather_shoes_1
+    jumpsuit: civ13_uniform_Soviet_uniform
+    #outerClothing: civ13_suit_Soviet_coat
+    head: civ13_head_soviet_pilotka
+    belt: civ13_pistol_TT_33
+    pocket1: civ13_magazine_TT_33_magazine_(7.62x25mm)
+    pocket2: Compass
+  inhand:
+    - civ13_boltaction_Mosin_30
+
+# Guard
+- type: job
+  id: GulagSovietGuard
+  name: job-name-civ-gulag-soviet-guard
+  faction: GulagSoviet
+  originalName: Karaul
+  description: job-description-civ-gulag-soviet-guard
+  playTimeTracker: JobGulagSovietGuard
+  startingGear: GulagSovietGuardGear
+  icon: "JobIconSoldier"
+  supervisors: job-supervisors-cpt
+  ranks:
+    RankLanceCorporal:
+      - !type:RoleTimeRequirement
+        role: JobSovietRifleman
+        time: 36000 # 10 hours
+    RankPrivateFirstClass:
+      - !type:RoleTimeRequirement
+        role: JobSovietRifleman
+        time: 10800 # 3 hours
+    RankPrivate: []
+  special:
+    - !type:AddComponentSpecial
+      components:
+        - type: RussianAccent
+        - type: NpcFactionMember
+          factions:
+            - GulagSoviet
+        - type: ShowFactionIcons
+          factionIcon: SovietFaction
+          jobIcon: JobIconRifleman
+          assignSquad: true
+
+- type: startingGear
+  id: GulagSovietGuardGear
+  equipment:
+    shoes: civ13_shoes_Soviet_sapogi_boots
+    jumpsuit: civ13_uniform_Soviet_uniform
+    head: civ13_head_soviet_helmet
+    belt: ClothingWebbingRussianRifleman
+    pocket1: FlashlightLanternMilitary
+    pocket2: Gauze
+  inhand:
+    - civ13_boltaction_Mosin_30

+ 22 - 0
Resources/Prototypes/Civ14/Roles/Jobs/departments.yml

@@ -6,6 +6,7 @@
   roles:
     - Nomad
 
+# TDM
 - type: department
   id: DepFrench
   name: department-French
@@ -112,3 +113,24 @@
   roles:
     - UnitedNationsRifleman
     - UnitedNationsMedic
+
+# Gulag
+- type: department
+  id: DepGulagSoviets
+  name: department-Gulag-Soviets
+  description: department-Gulag-Soviets-Description
+  color: "#f80505"
+  roles:
+    - GulagSovietCaptain
+    - GulagSovietSergeant
+    - GulagSovietGuard
+
+- type: department
+  id: DepGulagPrisoners
+  name: department-Gulag-Prisoners
+  description: department-Gulag-Prisoners-Description
+  color: "#a36156"
+  roles:
+    - GulagPrisonerGerman
+    - GulagPrisonerUkrainian
+    - GulagPrisonerPolish

+ 2 - 5
Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml

@@ -2,15 +2,12 @@
   parent: BaseItem
   name: mop
   id: MopItem
-  description: A mop that can't be stopped, viscera cleanup detail awaits.
+  description: A mop that can't be stopped.
   components:
     - type: Sprite
-      sprite: Objects/Specific/Janitorial/mop.rsi
+      sprite: Civ14/Objects/janitor.rsi
       layers:
         - state: mop
-        - map: ["enum.SolutionContainerLayers.Fill"]
-          state: fill-3
-          visible: false
     - type: Appearance
     - type: SolutionContainerVisuals
       maxFillLevels: 3

+ 14 - 0
Resources/Prototypes/Entities/Stations/nanotrasen.yml

@@ -33,3 +33,17 @@
         - Soviet
         - Germany
         - US
+
+- type: entity
+  id: StandardStationGulag
+  parent:
+    - BaseStation
+    - BaseStationJobsSpawning
+    - BaseStationRecords
+  components:
+    - type: NpcFactionMember
+      factions:
+        - GulagSoviet
+        - GulagPrisonerGerman
+        - GulagPrisonerUkrainian
+        - GulagPrisonerPolish

+ 2 - 1
Resources/Prototypes/Entities/Structures/Doors/MaterialDoors/material_doors.yml

@@ -24,6 +24,7 @@
           layer:
             - AirlockLayer
     - type: Door
+      changeAirtight: false
       bumpOpen: false
       clickOpen: true
       canCrush: false
@@ -39,6 +40,7 @@
         path: /Audio/Effects/stonedoor_openclose.ogg
     - type: Appearance
     - type: Airtight
+      airBlocked: false
     - type: Damageable
       damageContainer: StructuralInorganic
       damageModifierSet: Metallic
@@ -57,7 +59,6 @@
       key: walls
       mode: NoSprite
     - type: Occluder
-    - type: BlockWeather
 
 - type: entity
   parent: BaseMaterialDoor

+ 41 - 0
Resources/Prototypes/Entities/Structures/Walls/railing.yml

@@ -235,3 +235,44 @@
         acts: [ "Destruction" ]
   - type: Construction
     node: railingRound
+
+# Rusty Railings
+- type: entity
+  parent: Railing
+  id: RailingRusty
+  components:
+  - type: Sprite
+    drawdepth: SmallObjects
+    sprite: Civ14/Structures/rusty_railings.rsi
+  - type: Icon
+    sprite: Civ14/Structures/rusty_railings.rsi
+
+- type: entity
+  parent: RailingCorner
+  id: RailingCornerRusty
+  components:
+  - type: Sprite
+    drawdepth: SmallObjects
+    sprite: Civ14/Structures/rusty_railings.rsi
+  - type: Icon
+    sprite: Civ14/Structures/rusty_railings.rsi
+
+- type: entity
+  parent: RailingCornerSmall
+  id: RailingCornerSmallRusty
+  components:
+  - type: Sprite
+    drawdepth: SmallObjects
+    sprite: Civ14/Structures/rusty_railings.rsi
+  - type: Icon
+    sprite: Civ14/Structures/rusty_railings.rsi
+
+- type: entity
+  parent: RailingRound
+  id: RailingRoundRusty
+  components:
+  - type: Sprite
+    drawdepth: SmallObjects
+    sprite: Civ14/Structures/rusty_railings.rsi
+  - type: Icon
+    sprite: Civ14/Structures/rusty_railings.rsi

+ 1 - 0
Resources/Prototypes/Maps/Pools/default.yml

@@ -7,3 +7,4 @@
     - Opushka
     - Hotel
     - Valley
+    - Gulag14

+ 25 - 0
Resources/Prototypes/Maps/civ/gulag14.yml

@@ -0,0 +1,25 @@
+- type: gameMap
+  id: Gulag14
+  mapName: "Gulag14"
+  mapPath: /Maps/civ/tdm/gulag14.yml
+  minPlayers: 10
+  maxPlayers: 200
+  maxRandomOffset: 0
+  randomRotation: false
+  fixedPreset: Gulag14
+  stations:
+    Gulag14:
+      stationProto: StandardStationGulag
+      components:
+        - type: StationNameSetup
+          mapNameTemplate: "Gulag14"
+        - type: StationJobs
+          availableJobs:
+            # Soviets
+            GulagSovietCaptain: [1, 1]
+            GulagSovietSergeant: [3, 3]
+            GulagSovietGuard: [20, 20]
+            # Prisoners
+            GulagPrisonerGerman: [30, 30]
+            GulagPrisonerUkrainian: [30, 30]
+            GulagPrisonerPolish: [30, 30]

+ 74 - 0
Resources/Prototypes/Tiles/civ_tiles.yml

@@ -0,0 +1,74 @@
+# Streets/Roads
+- type: tile
+  id: FloorCivTarmac
+  name: tarmac road
+  sprite: /Textures/Civ14/Structures/Floors/roads.rsi/tarmacfull.png
+  variants: 1
+  baseTurf: FloorDirt
+  isSubfloor: false
+  footstepSounds:
+    collection: FootstepTile
+  heatCapacity: 10000
+  weather: true
+
+- type: tile
+  id: FloorCivStreetLight
+  name: light street
+  sprite: /Textures/Civ14/Structures/Floors/roads.rsi/streetfull_light.png
+  variants: 1
+  baseTurf: FloorDirt
+  isSubfloor: false
+  footstepSounds:
+    collection: FootstepTile
+  heatCapacity: 10000
+  weather: true
+
+# Grimey Wood
+- type: tile
+  id: FloorCivWoodGrimeHorizontal
+  name: grimey wood
+  sprite: /Textures/Civ14/Structures/Floors/wood.rsi/woodgrime_horizontal.png
+  variants: 1
+  baseTurf: FloorDirt
+  isSubfloor: false
+  footstepSounds:
+    collection: FootstepTile
+  heatCapacity: 10000
+  weather: false
+
+- type: tile
+  id: FloorCivWoodGrimeVertical
+  name: grimey wood
+  sprite: /Textures/Civ14/Structures/Floors/wood.rsi/woodgrime_vertical.png
+  variants: 1
+  baseTurf: FloorDirt
+  isSubfloor: false
+  footstepSounds:
+    collection: FootstepTile
+  heatCapacity: 10000
+  weather: false
+
+# Messy Tiles
+- type: tile
+  id: FloorCivTileMessy1
+  name: tiled floor
+  sprite: /Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy1.png
+  variants: 1
+  baseTurf: FloorDirt
+  isSubfloor: false
+  footstepSounds:
+    collection: FootstepTile
+  heatCapacity: 10000
+  weather: false
+
+- type: tile
+  id: FloorCivTileMessy2
+  parent: FloorCivTileMessy1
+  name: tiled floor
+  sprite: /Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy2.png
+
+- type: tile
+  id: FloorCivTileMessy3
+  parent: FloorCivTileMessy1
+  name: tiled floor
+  sprite: /Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy3.png

+ 59 - 0
Resources/Prototypes/ai_factions.yml

@@ -336,3 +336,62 @@
     - AllHostile
     - Wizard
     - Predator
+
+# Gulag
+- type: npcFaction
+  id: GulagSoviet
+  hostile:
+    - SimpleHostile
+    - Syndicate
+    - Xeno
+    - Zombie
+    - Revolutionary
+    - Dragon
+    - AllHostile
+    - Wizard
+    - Predator
+    - Germany
+    - US
+    - GulagPrisoner
+
+- type: npcFaction
+  id: GulagPrisonerGerman
+  hostile:
+    - SimpleHostile
+    - Syndicate
+    - Xeno
+    - Zombie
+    - Revolutionary
+    - Dragon
+    - AllHostile
+    - Wizard
+    - Predator
+    - GulagSoviet
+
+- type: npcFaction
+  id: GulagPrisonerUkrainian
+  hostile:
+    - SimpleHostile
+    - Syndicate
+    - Xeno
+    - Zombie
+    - Revolutionary
+    - Dragon
+    - AllHostile
+    - Wizard
+    - Predator
+    - GulagSoviet
+
+- type: npcFaction
+  id: GulagPrisonerPolish
+  hostile:
+    - SimpleHostile
+    - Syndicate
+    - Xeno
+    - Zombie
+    - Revolutionary
+    - Dragon
+    - AllHostile
+    - Wizard
+    - Predator
+    - GulagSoviet

+ 11 - 0
Resources/Prototypes/game_presets.yml

@@ -52,3 +52,14 @@
     - TeamDeathMatchRule
     - RandomWeatherRule
     - CaptureAreaRulePoints
+
+- type: gamePreset
+  id: Gulag14
+  alias:
+    - gulag14
+  name: gulag14
+  showInVote: true
+  description: description for gulag temp
+  rules:
+    - RespawnDeadRuleTDMFixed
+    - RandomWeatherRuleNightSnow

+ 2 - 0
Resources/Prototypes/tags.yml

@@ -1431,3 +1431,5 @@
   id: Bridging
 - type: Tag
   id: Compostable
+- type: Tag
+  id: CivMoney

BIN
Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/closed.png


BIN
Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/closing.png


+ 138 - 0
Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/meta.json

@@ -0,0 +1,138 @@
+{
+    "version": 1,
+    "license": "CC-BY-SA-3.0",
+    "size": {
+        "x": 32,
+        "y": 32
+    },
+    "states": [
+        {
+            "name": "closed",
+            "directions": 4,
+            "delays": [
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ]
+            ]
+        },
+        {
+            "name": "closing",
+            "directions": 4,
+            "delays": [
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ]
+            ]
+        },
+        {
+            "name": "open",
+            "directions": 4,
+            "delays": [
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ]
+            ]
+        },
+        {
+            "name": "opening",
+            "directions": 4,
+            "delays": [
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ]
+            ]
+        }
+    ]
+}

BIN
Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/open.png


BIN
Resources/Textures/Civ14/Structures/Doors/cell_doors.rsi/opening.png


BIN
Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/closed.png


BIN
Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/closing.png


+ 138 - 0
Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/meta.json

@@ -0,0 +1,138 @@
+{
+    "version": 1,
+    "license": "CC-BY-SA-3.0",
+    "size": {
+        "x": 32,
+        "y": 32
+    },
+    "states": [
+        {
+            "name": "closed",
+            "directions": 4,
+            "delays": [
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ]
+            ]
+        },
+        {
+            "name": "closing",
+            "directions": 4,
+            "delays": [
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ]
+            ]
+        },
+        {
+            "name": "open",
+            "directions": 4,
+            "delays": [
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ],
+                [
+                    1.0
+                ]
+            ]
+        },
+        {
+            "name": "opening",
+            "directions": 4,
+            "delays": [
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ],
+                [
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2,
+                    0.2
+                ]
+            ]
+        }
+    ]
+}

BIN
Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/open.png


BIN
Resources/Textures/Civ14/Structures/Doors/metal_doors.rsi/opening.png


+ 3 - 0
Resources/Textures/Civ14/Structures/Floors/roads.rsi/meta.json

@@ -309,6 +309,9 @@
     {
       "name": "streetfull"
     },
+    {
+      "name": "streetfull_light"
+    },
     {
       "name": "r_road"
     },

BIN
Resources/Textures/Civ14/Structures/Floors/roads.rsi/streetfull_light.png


BIN
Resources/Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy1.png


BIN
Resources/Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy2.png


BIN
Resources/Textures/Civ14/Structures/Floors/tiles.rsi/tile_messy3.png


BIN
Resources/Textures/Civ14/Structures/Floors/wood.rsi/woodgrime_horizontal.png


BIN
Resources/Textures/Civ14/Structures/Floors/wood.rsi/woodgrime_vertical.png


BIN
Resources/Textures/Civ14/Structures/Walls/old_brick.rsi/new_brick7.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/full.png


+ 46 - 0
Resources/Textures/Civ14/Structures/grime_table.rsi/meta.json

@@ -0,0 +1,46 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "CORVAX STALKER",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "full"
+    },
+    {
+      "name": "state_0",
+      "directions": 4
+    },
+    {
+      "name": "state_1",
+      "directions": 4
+    },
+    {
+      "name": "state_2",
+      "directions": 4
+    },
+    {
+      "name": "state_3",
+      "directions": 4
+    },
+    {
+      "name": "state_4",
+      "directions": 4
+    },
+    {
+      "name": "state_5",
+      "directions": 4
+    },
+    {
+      "name": "state_6",
+      "directions": 4
+    },
+    {
+      "name": "state_7",
+      "directions": 4
+    }
+  ]
+}

BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_0.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_1.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_2.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_3.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_4.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_5.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_6.png


BIN
Resources/Textures/Civ14/Structures/grime_table.rsi/state_7.png


BIN
Resources/Textures/Civ14/Structures/rusty_railings.rsi/corner.png


BIN
Resources/Textures/Civ14/Structures/rusty_railings.rsi/corner_small.png


+ 27 - 0
Resources/Textures/Civ14/Structures/rusty_railings.rsi/meta.json

@@ -0,0 +1,27 @@
+{
+    "version": 1,
+    "license": "CC-BY-SA-3.0",
+    "copyright": "tgstation at cf5fa29c1458b50fa2811169534b9e4f7f9f3252",
+    "size": {
+      "x": 32,
+      "y": 32
+    },
+  "states": [
+    {
+      "name": "side",
+      "directions": 4
+    },
+    {
+      "name": "corner",
+      "directions": 4
+    },
+    {
+        "name": "corner_small",
+        "directions": 4
+    },
+    {
+        "name": "round",
+        "directions": 4
+    }
+  ]
+}

BIN
Resources/Textures/Civ14/Structures/rusty_railings.rsi/round.png


BIN
Resources/Textures/Civ14/Structures/rusty_railings.rsi/side.png


Деякі файли не було показано, через те що забагато файлів було змінено