diff --git a/.gitignore b/.gitignore
index f413654f8a..e40481e459 100644
--- a/.gitignore
+++ b/.gitignore
@@ -268,3 +268,9 @@ release/
# Apple please go.
.DS_Store
+
+BuildFiles/Mac/Space Station 14.app/Contents/MacOS/Godot
+BuildFiles/Mac/Space Station 14.app/Contents/MacOS/GodotSharpTools.dll
+BuildFiles/Mac/Space Station 14.app/Contents/MacOS/mscorlib.dll
+BuildFiles/Mac/Space Station 14.app/Contents/MacOS/libmonosgen-2.0.dylib
+BuildFiles/Windows/Godot/*
diff --git a/BuildChecker/BuildChecker.csproj b/BuildChecker/BuildChecker.csproj
index 5384696457..e2d01a14f6 100644
--- a/BuildChecker/BuildChecker.csproj
+++ b/BuildChecker/BuildChecker.csproj
@@ -17,6 +17,7 @@ https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild
python3
py -3
{C899FCA4-7037-4E49-ABC2-44DE72487110}
+ .NETFramework, Version=v4.5.1
Library
@@ -31,4 +32,8 @@ https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild
-
\ No newline at end of file
+
+
+
+
+
diff --git a/BuildChecker/git_helper.py b/BuildChecker/git_helper.py
index 53bdc103f7..5d72e3f9b5 100644
--- a/BuildChecker/git_helper.py
+++ b/BuildChecker/git_helper.py
@@ -91,6 +91,6 @@ def reset_solution():
with SOLUTION_PATH.open("w") as f:
f.write(content)
-if __name__ == '__main__':
- install_hooks()
- update_submodules()
+#if __name__ == '__main__':
+# install_hooks()
+# update_submodules()
diff --git a/BuildFiles/Mac/Space Station 14.app/Contents/MacOS/SS14 b/BuildFiles/Mac/Space Station 14.app/Contents/MacOS/SS14
index b5bcdfbfe4..e69529e5b4 100755
--- a/BuildFiles/Mac/Space Station 14.app/Contents/MacOS/SS14
+++ b/BuildFiles/Mac/Space Station 14.app/Contents/MacOS/SS14
@@ -5,5 +5,4 @@ BASEDIR=$(dirname "$0")
echo "$BASEDIR"
cd "$BASEDIR"
-# TODO: unhardcode this, probably ship Mono with SS14.
-/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono --arch=64 ./SS14.Client.exe
+./Godot --path ./SS14.Client.Godot
diff --git a/BuildFiles/Windows/launch.bat b/BuildFiles/Windows/launch.bat
new file mode 100644
index 0000000000..12fea13879
--- /dev/null
+++ b/BuildFiles/Windows/launch.bat
@@ -0,0 +1 @@
+call Godot\godot.windows.tools.64.mono.exe --path SS14.Client.Godot
diff --git a/Content.Client/Content.Client.csproj b/Content.Client/Content.Client.csproj
index 8678e033df..19c65e36ac 100644
--- a/Content.Client/Content.Client.csproj
+++ b/Content.Client/Content.Client.csproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -11,37 +11,46 @@
Content.Client
v4.5.1
512
- ..\bin\Client\Resources\Assemblies\
+ ..\engine\bin\Client\Resources\Assemblies\
..\bin\Content.Client\
prompt
- MinimumRecommendedRules.ruleset
+ MinimumRecommendedRules.ruleset
true
DEBUG;TRACE
- full
+ portable
x86
- TRACE
+ TRACE;RELEASE
true
x86
true
DEBUG;TRACE
- full
+ portable
x64
- TRACE
+ TRACE;RELEASE
true
x64
+
+ TRACE;RELEASE
+ true
+
+
+ true
+ DEBUG;TRACE
+ portable
+
@@ -75,12 +84,8 @@
{59250baf-0000-0000-0000-000000000000}
Lidgren.Network
-
- {302b877e-0000-0000-0000-000000000000}
- SS14.Client.Graphics
-
- {0c31dfdf-0000-0000-0000-000000000000}
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}
SS14.Client
@@ -102,4 +107,4 @@
-
\ No newline at end of file
+
diff --git a/Content.Client/GameObjects/Components/Doors/ClientDoorComponent.cs b/Content.Client/GameObjects/Components/Doors/ClientDoorComponent.cs
index 00f4f9315c..8c593d60f4 100644
--- a/Content.Client/GameObjects/Components/Doors/ClientDoorComponent.cs
+++ b/Content.Client/GameObjects/Components/Doors/ClientDoorComponent.cs
@@ -12,8 +12,8 @@ namespace Content.Client.GameObjects
public bool Opened { get; private set; }
private SpriteComponent spriteComponent;
- private string OpenSprite = "door_ewo";
- private string CloseSprite = "door_ew";
+ private string OpenSprite = "Objects/door_ewo.png";
+ private string CloseSprite = "Objects/door_ew.png";
public override void Initialize()
{
diff --git a/Content.Client/GameObjects/Components/Items/ClientHandsComponent.cs b/Content.Client/GameObjects/Components/Items/ClientHandsComponent.cs
index f61b86d245..e6aca6bea2 100644
--- a/Content.Client/GameObjects/Components/Items/ClientHandsComponent.cs
+++ b/Content.Client/GameObjects/Components/Items/ClientHandsComponent.cs
@@ -30,19 +30,27 @@ namespace Content.Client.GameObjects
hands.Clear();
foreach (var hand in cast.Hands)
{
- hands[hand.Key] = Owner.EntityManager.GetEntity(hand.Value);
+ IEntity entity = null;
+ try
+ {
+ entity = Owner.EntityManager.GetEntity(hand.Value);
+ }
+ catch
+ {
+ // Nothing.
+ }
+ hands[hand.Key] = entity;
}
ActiveIndex = cast.ActiveIndex;
-
// Tell UI to update.
var uiMgr = IoCManager.Resolve();
- if (!uiMgr.TryGetSingleComponent(out var component))
+ if (!uiMgr.StateRoot.TryGetChild("HandsGui", out var control))
{
- component = new HandsGui();
- uiMgr.AddComponent(component);
+ control = new HandsGui();
+ uiMgr.StateRoot.AddChild(control);
}
- component.UpdateHandIcons();
+ control.UpdateHandIcons();
}
public void SendChangeHand(string index)
diff --git a/Content.Client/UserInterface/HandsGui.cs b/Content.Client/UserInterface/HandsGui.cs
index 8cd539f27b..d966235416 100644
--- a/Content.Client/UserInterface/HandsGui.cs
+++ b/Content.Client/UserInterface/HandsGui.cs
@@ -1,11 +1,13 @@
using Content.Client.Interfaces.GameObjects;
using SS14.Client.GameObjects;
using SS14.Client.Graphics;
-using SS14.Client.Graphics.Input;
-using SS14.Client.Graphics.Sprites;
+using SS14.Client.Graphics.Drawing;
+using SS14.Client.Input;
using SS14.Client.Interfaces.Player;
-using SS14.Client.Interfaces.Resource;
+using SS14.Client.Interfaces.ResourceManagement;
using SS14.Client.Interfaces.UserInterface;
+using SS14.Client.ResourceManagement;
+using SS14.Client.UserInterface;
using SS14.Client.UserInterface.Controls;
using SS14.Shared.Interfaces.GameObjects;
using SS14.Shared.IoC;
@@ -13,47 +15,53 @@ using SS14.Shared.Maths;
namespace Content.Client.UserInterface
{
- public class HandsGui : Control
+ public class HandsGui : HBoxContainer
{
- private readonly Color _inactiveColor = new Color(90, 90, 90);
+ private static readonly Color _inactiveColor = new Color(90, 90, 90);
+ private const int BOX_SPACING = 1;
+ // The boxes are square so that's both width and height.
+ private const int BOX_SIZE = 50;
private readonly IPlayerManager _playerManager = IoCManager.Resolve();
private readonly IUserInterfaceManager _userInterfaceManager = IoCManager.Resolve();
- private readonly Sprite handSlot;
- private readonly int spacing = 1;
+ private StyleBoxTexture handBox;
+ private StyleBoxTexture inactiveHandBox;
private UiHandInfo LeftHand;
private UiHandInfo RightHand;
private Box2i handL;
private Box2i handR;
- public HandsGui()
+ protected override void Initialize()
{
+ base.Initialize();
+
var _resMgr = IoCManager.Resolve();
- handSlot = _resMgr.GetSprite("hand");
- // OnCalcRect() calculates position so this needs to be ran
- // as it doesn't automatically get called by the UI manager.
- DoLayout();
+ var handsBoxTexture = _resMgr.GetResource("Textures/UserInterface/handsbox.png");
+ handBox = new StyleBoxTexture()
+ {
+ Texture = handsBoxTexture,
+ };
+ handBox.SetMargin(StyleBox.Margin.All, 6);
+ inactiveHandBox = new StyleBoxTexture(handBox)
+ {
+ Modulate = _inactiveColor,
+ };
+ SetMarginsPreset(LayoutPreset.CenterBottom);
+ SetAnchorPreset(LayoutPreset.CenterBottom);
+
+ handL = new Box2i(0, 0, BOX_SIZE, BOX_SIZE);
+ handR = handL.Translated(new Vector2i(BOX_SIZE + BOX_SPACING, 0));
+ SS14.Shared.Log.Logger.Debug($"{handL}, {handR}");
+ MouseFilter = MouseFilterMode.Stop;
}
- protected override void OnCalcRect()
+ protected override Vector2 CalculateMinimumSize()
{
- // Individual size of the hand slot sprite.
- var slotBounds = handSlot.LocalBounds;
- var width = (int)((slotBounds.Width * 2) + spacing);
- var height = (int)slotBounds.Height;
-
- // Force size because refactoring is HARD.
- Size = new Vector2i(width, height);
- ClientArea = Box2i.FromDimensions(0, 0, Width, Height);
-
- // Hell force position too what could go wrong!
- Position = new Vector2i((int)(CluwneLib.Window.Viewport.Width - width) / 2, (int)CluwneLib.Window.Viewport.Height - height - 10);
- handL = Box2i.FromDimensions(Position.X, Position.Y, (int)slotBounds.Width, (int)slotBounds.Height);
- handR = Box2i.FromDimensions(Position.X + (int)slotBounds.Width + spacing, Position.Y, (int)slotBounds.Width, (int)slotBounds.Height);
+ return new Vector2(BOX_SIZE * 2 + 1, BOX_SIZE);
}
- protected override void DrawContents()
+ protected override void Draw(DrawingHandle handle)
{
if (_playerManager?.LocalPlayer == null)
{
@@ -68,37 +76,31 @@ namespace Content.Client.UserInterface
var leftActive = hands.ActiveIndex == "left";
- handSlot.Color = Color.White;
- handSlot.SetTransformToRect(leftActive ? handL : handR);
- handSlot.Draw();
-
- handSlot.Color = _inactiveColor;
- handSlot.SetTransformToRect(leftActive ? handR : handL);
- handSlot.Draw();
+ handle.DrawStyleBox(handBox, leftActive ? handL : handR);
+ handle.DrawStyleBox(inactiveHandBox, leftActive ? handR : handL);
if (LeftHand.Entity != null && LeftHand.HeldSprite != null)
{
- var bounds = LeftHand.HeldSprite.LocalBounds;
- LeftHand.HeldSprite.SetTransformToRect(
- Box2i.FromDimensions(handL.Left + (int)(handL.Width / 2f - bounds.Width / 2f),
- handL.Top + (int)(handL.Height / 2f - bounds.Height / 2f),
- (int)bounds.Width, (int)bounds.Height));
- LeftHand.HeldSprite.Draw();
+ var bounds = LeftHand.HeldSprite.Size;
+ handle.DrawTextureRect(LeftHand.HeldSprite,
+ Box2i.FromDimensions(handL.Left + (int)(handL.Width / 2f - bounds.X / 2f),
+ handL.Top + (int)(handL.Height / 2f - bounds.Y / 2f),
+ (int)bounds.X, (int)bounds.Y), tile: false);
}
if (RightHand.Entity != null && RightHand.HeldSprite != null)
{
- var bounds = RightHand.HeldSprite.LocalBounds;
- RightHand.HeldSprite.SetTransformToRect(
- Box2i.FromDimensions(handR.Left + (int)(handR.Width / 2f - bounds.Width / 2f),
- handR.Top + (int)(handR.Height / 2f - bounds.Height / 2f),
- (int)bounds.Width, (int)bounds.Height));
- RightHand.HeldSprite.Draw();
+ var bounds = RightHand.HeldSprite.Size;
+ handle.DrawTextureRect(RightHand.HeldSprite,
+ Box2i.FromDimensions(handR.Left + (int)(handR.Width / 2f - bounds.Y / 2f),
+ handR.Top + (int)(handR.Height / 2f - bounds.Y / 2f),
+ (int)bounds.X, (int)bounds.Y), tile: false);
}
}
public void UpdateHandIcons()
{
+ UpdateDraw();
if (_playerManager?.LocalPlayer.ControlledEntity == null)
{
return;
@@ -152,39 +154,43 @@ namespace Content.Client.UserInterface
hands.SendChangeHand(index);
}
- public override bool MouseDown(MouseButtonEventArgs e)
+ protected override bool HasPoint(Vector2 point)
{
- if (e.Button != Mouse.Button.Right)
- {
- return false;
- }
- if (handL.Contains(e.X, e.Y))
- {
- SendSwitchHandTo("left");
- return true;
- }
- if (handR.Contains(e.X, e.Y))
- {
- SendSwitchHandTo("right");
- return true;
- }
- return false;
+ return handL.Contains((Vector2i)point) || handR.Contains((Vector2i)point);
}
- private static Sprite GetIconSprite(IEntity entity)
+ protected override void MouseDown(GUIMouseButtonEventArgs args)
{
- Sprite icon = null;
- if (entity.TryGetComponent(out var component))
+ base.MouseDown(args);
+
+ if (args.Button != Mouse.Button.Right)
{
- icon = component.Icon;
+ return;
}
- return icon ?? IoCManager.Resolve().DefaultSprite();
+
+ if (handL.Contains((Vector2i)args.RelativePosition))
+ {
+ SendSwitchHandTo("left");
+ }
+ if (handR.Contains((Vector2i)args.RelativePosition))
+ {
+ SendSwitchHandTo("right");
+ }
+ }
+
+ private static Texture GetIconSprite(IEntity entity)
+ {
+ if (entity.TryGetComponent(out var component) && component.Icon != null)
+ {
+ return component.Icon;
+ }
+ return IoCManager.Resolve().GetFallback();
}
private struct UiHandInfo
{
public IEntity Entity { get; set; }
- public Sprite HeldSprite { get; set; }
+ public Texture HeldSprite { get; set; }
}
}
}
diff --git a/Content.Client/packages.config b/Content.Client/packages.config
index 0072b14da4..ad225f30e9 100644
--- a/Content.Client/packages.config
+++ b/Content.Client/packages.config
@@ -1,6 +1,6 @@
-
+
-
\ No newline at end of file
+
diff --git a/Content.Server/Content.Server.csproj b/Content.Server/Content.Server.csproj
index 2fb2c2511d..b6f61fe713 100644
--- a/Content.Server/Content.Server.csproj
+++ b/Content.Server/Content.Server.csproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -11,33 +11,42 @@
Content.Server
v4.5.1
512
- ..\bin\Server\Resources\Assemblies\
+ ..\engine\bin\Server\Resources\Assemblies\
..\bin\Content.Server\
prompt
- MinimumRecommendedRules.ruleset
+ MinimumRecommendedRules.ruleset
true
DEBUG;TRACE
- full
+ portable
x86
- TRACE
+ TRACE;RELEASE
true
x86
true
DEBUG;TRACE
- full
+ portable
x64
- TRACE
+ TRACE;RELEASE
true
x64
+
+ TRACE;RELEASE
+ true
+
+
+ true
+ DEBUG;TRACE
+ portable
+
@@ -126,5 +135,4 @@
-
-
\ No newline at end of file
+
diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs
index 21629972e1..199e08793c 100644
--- a/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs
+++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Hitscan/HitscanWeaponComponent.cs
@@ -17,43 +17,45 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Hitscan
{
public override string Name => "HitscanWeapon";
- string spritename = "laser";
-
+ string spritename = "Objects/laser.png";
+
protected override void Fire(IEntity user, LocalCoordinates clicklocation)
{
var userposition = user.GetComponent().WorldPosition; //Remember world positions are ephemeral and can only be used instantaneously
var angle = new Angle(clicklocation.Position - userposition);
- var theta = angle.Theta;
-
+
var ray = new Ray(userposition, angle.ToVec());
var raycastresults = IoCManager.Resolve().IntersectRay(ray, 20, Owner.GetComponent().GetMapTransform().Owner);
Hit(raycastresults);
- AfterEffects(user, raycastresults, theta);
+ AfterEffects(user, raycastresults, angle);
}
protected virtual void Hit(RayCastResults ray)
{
- if(ray.HitEntity != null && ray.HitEntity.TryGetComponent(out DamageableComponent damage))
+ if (ray.HitEntity != null && ray.HitEntity.TryGetComponent(out DamageableComponent damage))
{
damage.TakeDamage(DamageType.Heat, 10);
}
}
-
- protected virtual void AfterEffects(IEntity user, RayCastResults ray, double theta)
+
+ protected virtual void AfterEffects(IEntity user, RayCastResults ray, Angle angle)
{
var time = IoCManager.Resolve().CurTime;
+ var offset = angle.ToVec() * ray.Distance / 2;
+
EffectSystemMessage message = new EffectSystemMessage
{
EffectSprite = spritename,
Born = time,
DeathTime = time + TimeSpan.FromSeconds(1),
Size = new Vector2(ray.Distance, 1f),
- Coordinates = user.GetComponent().LocalPosition,
+ Coordinates = user.GetComponent().LocalPosition.Translated(offset),
//Rotated from east facing
- Rotation = (float)theta,
+ Rotation = (float)angle.Theta,
ColorDelta = new Vector4(0, 0, 0, -1500f),
- Color = new Vector4(255,255,255,750)
+ Color = new Vector4(255, 255, 255, 750),
+ Shaded = false
};
IoCManager.Resolve().GetEntitySystem().CreateParticle(message);
}
diff --git a/Content.Server/packages.config b/Content.Server/packages.config
index 0072b14da4..ad225f30e9 100644
--- a/Content.Server/packages.config
+++ b/Content.Server/packages.config
@@ -1,6 +1,6 @@
-
+
-
\ No newline at end of file
+
diff --git a/Content.Shared/Content.Shared.csproj b/Content.Shared/Content.Shared.csproj
index b26d1f0b4a..c538cc8029 100644
--- a/Content.Shared/Content.Shared.csproj
+++ b/Content.Shared/Content.Shared.csproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -13,30 +13,39 @@
512
bin\x86\Debug\
prompt
- MinimumRecommendedRules.ruleset
+ MinimumRecommendedRules.ruleset
true
DEBUG;TRACE
- full
+ portable
x86
- TRACE
+ TRACE;RELEASE
true
x86
true
DEBUG;TRACE
- full
+ portable
x64
- TRACE
+ TRACE;RELEASE
true
x64
+
+ TRACE;RELEASE
+ true
+
+
+ true
+ DEBUG;TRACE
+ portable
+
@@ -75,33 +84,17 @@
SS14.Client
false
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}
SS14.Server
false
+ {B04AAE71-0000-0000-0000-000000000000}
-
-
- False
-
-
-
-
-
-
-
- Prototypes\Content\
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/Content.Shared/EntryPoint.cs b/Content.Shared/EntryPoint.cs
index 7d0dd955d6..9681111932 100644
--- a/Content.Shared/EntryPoint.cs
+++ b/Content.Shared/EntryPoint.cs
@@ -1,4 +1,6 @@
using SS14.Shared.ContentPack;
+using SS14.Shared.Interfaces;
+using SS14.Shared.IoC;
namespace Content.Shared
{
@@ -6,7 +8,10 @@ namespace Content.Shared
{
public override void Init()
{
- // TODO: Anything at all.
+#if DEBUG
+ var resm = IoCManager.Resolve();
+ resm.MountContentDirectory(@"../../../Resources/");
+#endif
}
}
}
diff --git a/Content.Shared/packages.config b/Content.Shared/packages.config
index 0072b14da4..ad225f30e9 100644
--- a/Content.Shared/packages.config
+++ b/Content.Shared/packages.config
@@ -1,6 +1,6 @@
-
+
-
\ No newline at end of file
+
diff --git a/Jenkinsfile b/Jenkinsfile
index ff7bf04df8..104bce04c2 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -4,15 +4,15 @@ pipeline {
stages {
stage('Setup') {
steps {
- sh './RUN_THIS.py'
+ sh 'git submodule update --init --recursive'
sh 'TMP=~/.cache/NuGet/ nuget restore'
+ sh 'engine/Tools/download_godotsharp.py'
}
}
stage('Build') {
steps {
- sh './package_release_build.py'
+ sh './package_release_build.py -p windows linux --godot /home/pjbriers/builds_shared/godot --windows-godot-build /home/pjbriers/builds_shared/win'
archiveArtifacts artifacts: 'release/*.zip'
- archiveArtifacts artifacts: 'engine/Resources/ResourcePack.zip'
}
}
}
diff --git a/Resources/Prototypes/1_Temperature.yml b/Resources/Prototypes/1_Temperature.yml
index f3c69ed49d..ab83e08513 100644
--- a/Resources/Prototypes/1_Temperature.yml
+++ b/Resources/Prototypes/1_Temperature.yml
@@ -6,10 +6,10 @@
- type: Clickable
- type: Sprite
sprites:
- - shoes
+ - Items/shoes.png
- type: Icon
- icon: shoes
+ icon: Items/shoes.png
- type: Damageable
resistanceset: Standard
diff --git a/Resources/Prototypes/Entities/Clothing.yml b/Resources/Prototypes/Entities/Clothing.yml
index 5f4ec1b3ae..35872b0ef7 100644
--- a/Resources/Prototypes/Entities/Clothing.yml
+++ b/Resources/Prototypes/Entities/Clothing.yml
@@ -3,21 +3,19 @@
id: ShoesItem
name: Shoes
components:
- - type: WearableAnimatedSprite
- sprite: player_shoes
- notWornSprite: shoes
+ - type: Sprite
+ sprite: Items/shoes.png
- type: Icon
- icon: shoes
+ icon: Items/shoes.png
- type: entity
parent: BaseItem
id: JanitorUniformItem
name: Janitor Jumpsuit
components:
- - type: WearableAnimatedSprite
- sprite: player_jumpsuit_gray
- notWornSprite: janitorsuit
+ - type: Sprite
+ sprite: Items/janitorsuit.png
- type: Icon
- icon: janitorsuit
+ icon: Items/janitorsuit.png
diff --git a/Resources/Prototypes/Entities/Door.yml b/Resources/Prototypes/Entities/Door.yml
index 15bc04eed8..56afd2a4a0 100644
--- a/Resources/Prototypes/Entities/Door.yml
+++ b/Resources/Prototypes/Entities/Door.yml
@@ -7,13 +7,14 @@
- type: Sprite
drawdepth: FloorPlaceable
sprites:
- - door_ew
- - door_ewo
+ - Objects/door_ew.png
+ - Objects/door_ewo.png
- type: Icon
- icon: door_ew
+ icon: Objects/door_ew.png
- type: BoundingBox
+ aabb: "1,-0.75,2,0.75"
sizeX: 1.9
offsetY: 1.5
- type: Collidable
diff --git a/Resources/Prototypes/Entities/HitscanWeapons.yml b/Resources/Prototypes/Entities/HitscanWeapons.yml
index 9bb823ddc5..e26f6e62e1 100644
--- a/Resources/Prototypes/Entities/HitscanWeapons.yml
+++ b/Resources/Prototypes/Entities/HitscanWeapons.yml
@@ -3,21 +3,19 @@
parent: BaseItem
id: LaserItem
components:
- - type: WearableAnimatedSprite
- notWornSprite: gun
- sprite: gun
+ - type: Sprite
+ sprite: Objects/gun.png
- type: Icon
- icon: gun
+ icon: Objects/gun.png
- type: HitscanWeapon
-
+
- type: entity
name: GUN
parent: BaseItem
id: GUNITEM
components:
- - type: WearableAnimatedSprite
- notWornSprite: projectileweapon
- sprite: projectileweapon
+ - type: Sprite
+ sprite: Objects/projectileweapon.png
- type: Icon
- icon: gun
- - type: ProjectileWeapon
\ No newline at end of file
+ icon: Objects/projectileweapon.png
+ - type: ProjectileWeapon
diff --git a/Resources/Prototypes/Entities/Items.yml b/Resources/Prototypes/Entities/Items.yml
index 0472b55c71..804831d819 100644
--- a/Resources/Prototypes/Entities/Items.yml
+++ b/Resources/Prototypes/Entities/Items.yml
@@ -14,44 +14,40 @@
parent: BaseItem
id: RedToolboxItem
components:
- - type: WearableAnimatedSprite
- notWornSprite: toolbox_r
- sprite: player_toolbox
+ - type: Sprite
+ sprite: Items/toolbox_r.png
- type: Icon
- icon: toolbox_r
+ icon: Items/toolbox_r.png
- type: entity
name: "Mechanical Toolbox With Handle"
parent: BaseItem
id: BlueToolboxItem
components:
- - type: WearableAnimatedSprite
- notWornSprite: toolbox_b
- sprite: player_toolbox
+ - type: Sprite
+ sprite: Items/toolbox_b.png
- type: Icon
- icon: toolbox_b
+ icon: Items/toolbox_b.png
- type: entity
name: "Electrical Toolbox With Handle"
parent: BaseItem
id: YellowToolboxItem
components:
- - type: WearableAnimatedSprite
- notWornSprite: toolbox_y
- sprite: player_toolbox
+ - type: Sprite
+ sprite: Items/toolbox_y.png
- type: Icon
- icon: toolbox_y
+ icon: Items/toolbox_y.png
- type: entity
name: "Extra-Grip™ Mop"
parent: BaseItem
id: MopItem
components:
- - type: WearableAnimatedSprite
- notWornSprite: mop
- sprite: player_mop
+ - type: Sprite
+ sprite: Items/mop.png
- type: Icon
- sprite: mop
+ icon: Items/mop.png
#handheld lights
- type: entity
@@ -59,9 +55,8 @@
parent: BaseItem
id: FlashlightLantern
components:
- - type: WearableAnimatedSprite
- notWornSprite: Flashlight
- sprite: player_Flashlight
+ - type: Sprite
+ sprite: Items/Flashlight.png
- type: Icon
- icon: Flashlight
- - type: PointLight
\ No newline at end of file
+ icon: Items/Flashlight.png
+ - type: PointLight
diff --git a/Resources/Prototypes/Entities/Power.yml b/Resources/Prototypes/Entities/Power.yml
index 313cca842c..fcc2e2d5a8 100644
--- a/Resources/Prototypes/Entities/Power.yml
+++ b/Resources/Prototypes/Entities/Power.yml
@@ -9,9 +9,9 @@
drawdepth: FloorPlaceable
color: Red
sprites:
- - eightdirwire
+ - Objects/eightdirwire.png
- type: Icon
- icon: eightdirwire
+ icon: Objects/eightdirwire.png
- type: PowerTransfer
snap:
@@ -35,11 +35,11 @@
- type: Sprite
drawdepth: FloorPlaceable
sprites:
- - generator
+ - Objects/generator.png
- type: Icon
- icon: generator
+ icon: Objects/generator.png
- type: PowerGenerator
-
+
- type: entity
id: WPPnobattery
name: WPPnobattery
@@ -50,9 +50,9 @@
- type: Sprite
drawdepth: FloorPlaceable
sprites:
- - provider
+ - Objects/provider.png
- type: Icon
- icon: provider
+ icon: Objects/provider.png
- type: PowerProvider
Range: 5
Priority: Provider
@@ -67,8 +67,8 @@
Charge: 1000
ChargeRate: 200
ChargePowernet: false
-
-
+
+
- type: entity
id: SMES
name: SMES
@@ -79,9 +79,9 @@
- type: Sprite
drawdepth: FloorPlaceable
sprites:
- - storage
+ - Objects/storage.png
- type: Icon
- icon: storage
+ icon: Objects/storage.png
- type: PowerStorage
Capacity: 3000
Charge: 1000
@@ -99,9 +99,9 @@
- type: Sprite
drawdepth: FloorPlaceable
sprites:
- - wiredmachine
+ - Objects/wiredmachine.png
- type: Icon
- icon: wiredmachine
+ icon: Objects/wiredmachine.png
- type: PowerDevice
Drawtype: Node
Load: 100
@@ -117,10 +117,10 @@
- type: Sprite
drawdepth: FloorPlaceable
sprites:
- - wirelessmachine
+ - Objects/wirelessmachine.png
- type: Icon
- icon: wirelessmachine
+ icon: Objects/wirelessmachine.png
- type: PowerDevice
Drawtype: Both
Load: 200
- Priority: Low
\ No newline at end of file
+ Priority: Low
diff --git a/Resources/Prototypes/Entities/Projectiles.yml b/Resources/Prototypes/Entities/Projectiles.yml
index 9ab7b0bcb6..8f6252d42c 100644
--- a/Resources/Prototypes/Entities/Projectiles.yml
+++ b/Resources/Prototypes/Entities/Projectiles.yml
@@ -5,10 +5,9 @@
- type: Transform
- type: Sprite
drawdepth: FloorPlaceable
- sprites:
- - projectilebullet
+ sprite: Objects/projectilebullet.png
- type: Icon
- icon: projectilebullet
+ icon: Objects/projectilebullet.png
- type: BoundingBox
- type: Physics
edgeslide: false
diff --git a/Resources/Prototypes/Entities/Tools.yml b/Resources/Prototypes/Entities/Tools.yml
index fc01ca3ee3..e29ece71ae 100644
--- a/Resources/Prototypes/Entities/Tools.yml
+++ b/Resources/Prototypes/Entities/Tools.yml
@@ -4,24 +4,22 @@
id: Wirecutter
components:
- type: Wirecutter
- - type: WearableAnimatedSprite
- notWornSprite: wirecutter
- sprite: wirecutter
+ - type: Sprite
+ sprite: Objects/wirecutter.png
- type: Icon
- icon: wirecutter
+ icon: Objects/wirecutter.png
- type: MeleeWeapon
-
+
- type: entity
name: Screwdriver
parent: BaseItem
id: Screwdriver
components:
- type: Screwdriver
- - type: WearableAnimatedSprite
- notWornSprite: screwdriver
- sprite: screwdriver
+ - type: Sprite
+ sprite: Objects/screwdriver.png
- type: Icon
- icon: screwdriver
+ icon: Objects/screwdriver.png
- type: MeleeWeapon
- type: entity
@@ -30,11 +28,10 @@
id: Welder
components:
- type: Welder
- - type: WearableAnimatedSprite
- notWornSprite: welder
- sprite: welder
+ - type: Sprite
+ sprite: Objects/welder.png
- type: Icon
- icon: welder
+ icon: Objects/welder.png
- type: MeleeWeapon
- type: entity
@@ -43,34 +40,31 @@
id: Wrench
components:
- type: Wrench
- - type: WearableAnimatedSprite
- notWornSprite: wrench
- sprite: wrench
+ - type: Sprite
+ sprite: Objects/wrench.png
- type: Icon
- icon: wrench
+ icon: Objects/wrench.png
- type: MeleeWeapon
-
+
- type: entity
name: Crowbar
parent: BaseItem
id: Crowbar
components:
- type: Crowbar
- - type: WearableAnimatedSprite
- notWornSprite: crowbar
- sprite: crowbar
+ - type: Sprite
+ sprite: Objects/crowbar.png
- type: Icon
- icon: crowbar
+ icon: Objects/crowbar.png
- type: MeleeWeapon
-
+
- type: entity
name: Multitool
parent: BaseItem
id: Multitool
components:
- type: Multitool
- - type: WearableAnimatedSprite
- notWornSprite: multitool
- sprite: multitool
+ - type: Sprite
+ sprite: Objects/multitool.png
- type: Icon
- icon: multitool
\ No newline at end of file
+ icon: Objects/multitool.png
diff --git a/Resources/Prototypes/Entities/prototype_test.yml b/Resources/Prototypes/Entities/prototype_test.yml
index 9117b0535e..dcf5e6209c 100644
--- a/Resources/Prototypes/Entities/prototype_test.yml
+++ b/Resources/Prototypes/Entities/prototype_test.yml
@@ -5,9 +5,8 @@
- type: Transform
- type: Clickable
- type: Sprite
- sprites:
- - medkit_r
+ sprite: Items/medkit_r.png
- type: Icon
- icon: medkit_r
+ icon: Items/medkit_r.png
diff --git a/Resources/SavedEntities.xml b/Resources/SavedEntities.xml
deleted file mode 100644
index 27a5fb33db..0000000000
--- a/Resources/SavedEntities.xml
+++ /dev/null
@@ -1,304 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Resources/textures/Buildings/TurrBase.png b/Resources/Textures/Buildings/TurrBase.png
similarity index 100%
rename from Resources/textures/Buildings/TurrBase.png
rename to Resources/Textures/Buildings/TurrBase.png
diff --git a/Resources/textures/Buildings/TurrLamp.png b/Resources/Textures/Buildings/TurrLamp.png
similarity index 100%
rename from Resources/textures/Buildings/TurrLamp.png
rename to Resources/Textures/Buildings/TurrLamp.png
diff --git a/Resources/textures/Buildings/TurrTop.png b/Resources/Textures/Buildings/TurrTop.png
similarity index 100%
rename from Resources/textures/Buildings/TurrTop.png
rename to Resources/Textures/Buildings/TurrTop.png
diff --git a/Resources/textures/Objects/crowbar.png b/Resources/Textures/Objects/crowbar.png
similarity index 100%
rename from Resources/textures/Objects/crowbar.png
rename to Resources/Textures/Objects/crowbar.png
diff --git a/Resources/textures/Objects/eightdirwire.png b/Resources/Textures/Objects/eightdirwire.png
similarity index 100%
rename from Resources/textures/Objects/eightdirwire.png
rename to Resources/Textures/Objects/eightdirwire.png
diff --git a/Resources/textures/Objects/generator.png b/Resources/Textures/Objects/generator.png
similarity index 100%
rename from Resources/textures/Objects/generator.png
rename to Resources/Textures/Objects/generator.png
diff --git a/Resources/textures/Objects/multitool.png b/Resources/Textures/Objects/multitool.png
similarity index 100%
rename from Resources/textures/Objects/multitool.png
rename to Resources/Textures/Objects/multitool.png
diff --git a/Resources/textures/Objects/provider.png b/Resources/Textures/Objects/provider.png
similarity index 100%
rename from Resources/textures/Objects/provider.png
rename to Resources/Textures/Objects/provider.png
diff --git a/Resources/textures/Objects/screwdriver.png b/Resources/Textures/Objects/screwdriver.png
similarity index 100%
rename from Resources/textures/Objects/screwdriver.png
rename to Resources/Textures/Objects/screwdriver.png
diff --git a/Resources/textures/Objects/storage.png b/Resources/Textures/Objects/storage.png
similarity index 100%
rename from Resources/textures/Objects/storage.png
rename to Resources/Textures/Objects/storage.png
diff --git a/Resources/textures/Objects/welder.png b/Resources/Textures/Objects/welder.png
similarity index 100%
rename from Resources/textures/Objects/welder.png
rename to Resources/Textures/Objects/welder.png
diff --git a/Resources/textures/Objects/wirecutter.png b/Resources/Textures/Objects/wirecutter.png
similarity index 100%
rename from Resources/textures/Objects/wirecutter.png
rename to Resources/Textures/Objects/wirecutter.png
diff --git a/Resources/textures/Objects/wiredmachine.png b/Resources/Textures/Objects/wiredmachine.png
similarity index 100%
rename from Resources/textures/Objects/wiredmachine.png
rename to Resources/Textures/Objects/wiredmachine.png
diff --git a/Resources/textures/Objects/wirelessmachine.png b/Resources/Textures/Objects/wirelessmachine.png
similarity index 100%
rename from Resources/textures/Objects/wirelessmachine.png
rename to Resources/Textures/Objects/wirelessmachine.png
diff --git a/Resources/textures/Objects/wrench.png b/Resources/Textures/Objects/wrench.png
similarity index 100%
rename from Resources/textures/Objects/wrench.png
rename to Resources/Textures/Objects/wrench.png
diff --git a/Resources/Textures/UserInterface/handsbox.png b/Resources/Textures/UserInterface/handsbox.png
new file mode 100644
index 0000000000..c5f67f10ba
Binary files /dev/null and b/Resources/Textures/UserInterface/handsbox.png differ
diff --git a/SpaceStation14Content.sln b/SpaceStation14Content.sln
index 27e96154e2..55edfbab5c 100644
--- a/SpaceStation14Content.sln
+++ b/SpaceStation14Content.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2026
+VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Content.Shared", "Content.Shared\Content.Shared.csproj", "{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}"
ProjectSection(ProjectDependencies) = postProject
@@ -12,10 +12,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Shared", "engine\SS14.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Server", "engine\SS14.Server\SS14.Server.csproj", "{B04AAE71-0000-0000-0000-000000000000}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Client.Graphics", "engine\SS14.Client.Graphics\SS14.Client.Graphics.csproj", "{302B877E-0000-0000-0000-000000000000}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Client", "engine\SS14.Client\SS14.Client.csproj", "{0C31DFDF-0000-0000-0000-000000000000}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.UnitTesting", "engine\SS14.UnitTesting\SS14.UnitTesting.csproj", "{F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Content.Server", "Content.Server\Content.Server.csproj", "{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}"
@@ -28,9 +24,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Content.Client", "Content.Client\Content.Client.csproj", "{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}"
ProjectSection(ProjectDependencies) = postProject
{0529F740-0000-0000-0000-000000000000} = {0529F740-0000-0000-0000-000000000000}
- {302B877E-0000-0000-0000-000000000000} = {302B877E-0000-0000-0000-000000000000}
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5} = {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}
- {0C31DFDF-0000-0000-0000-000000000000} = {0C31DFDF-0000-0000-0000-000000000000}
+ {83429BD6-6358-4B18-BE51-401DF8EA2673} = {83429BD6-6358-4B18-BE51-401DF8EA2673}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network", "engine\Lidgren.Network\Lidgren.Network.csproj", "{59250BAF-0000-0000-0000-000000000000}"
@@ -41,124 +36,223 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{B01693
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildChecker", "BuildChecker\BuildChecker.csproj", "{C899FCA4-7037-4E49-ABC2-44DE72487110}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sfml-system", "engine\SFML\src\System\sfml-system.csproj", "{31D24303-F6A9-4D53-BB03-A73EDCB3186D}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Client", "engine\SS14.Client\SS14.Client.csproj", "{83429BD6-6358-4B18-BE51-401DF8EA2673}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sfml-graphics", "engine\SFML\src\Graphics\sfml-graphics.csproj", "{46786269-57B9-48E7-AA4F-8F4D84609FE6}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Client.Godot", "engine\SS14.Client.Godot\SS14.Client.Godot.csproj", "{8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sfml-window", "engine\SFML\src\Window\sfml-window.csproj", "{D17DE83D-A592-461F-8AF2-53F9E22E1D0F}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SFML", "SFML", "{1780DA39-F1EC-4100-8C58-ECD756C68033}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SS14.Shared.Bsdiff", "engine\SS14.Shared.Bsdiff\SS14.Shared.Bsdiff\SS14.Shared.Bsdiff.csproj", "{0E0723E8-D785-4F61-81F4-182A12BCAA52}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
+ Tools|Any CPU = Tools|Any CPU
+ Tools|x64 = Tools|x64
+ Tools|x86 = Tools|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Debug|x64.ActiveCfg = Debug|x64
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Debug|x64.Build.0 = Debug|x64
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Debug|x86.ActiveCfg = Debug|x86
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Debug|x86.Build.0 = Debug|x86
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Release|Any CPU.Build.0 = Release|Any CPU
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Release|x64.ActiveCfg = Release|x64
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Release|x64.Build.0 = Release|x64
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Release|x86.ActiveCfg = Release|x86
{26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Release|x86.Build.0 = Release|x86
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Tools|x64.ActiveCfg = Debug|x64
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Tools|x64.Build.0 = Debug|x64
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Tools|x86.ActiveCfg = Debug|x86
+ {26AEEBB3-DDE7-443A-9F43-7BC7F4ACF6B5}.Tools|x86.Build.0 = Debug|x86
+ {0529F740-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0529F740-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0529F740-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{0529F740-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{0529F740-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{0529F740-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {0529F740-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0529F740-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{0529F740-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{0529F740-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{0529F740-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{0529F740-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {0529F740-0000-0000-0000-000000000000}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {0529F740-0000-0000-0000-000000000000}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {0529F740-0000-0000-0000-000000000000}.Tools|x64.ActiveCfg = Debug|x64
+ {0529F740-0000-0000-0000-000000000000}.Tools|x64.Build.0 = Debug|x64
+ {0529F740-0000-0000-0000-000000000000}.Tools|x86.ActiveCfg = Debug|x86
+ {0529F740-0000-0000-0000-000000000000}.Tools|x86.Build.0 = Debug|x86
+ {B04AAE71-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B04AAE71-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B04AAE71-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{B04AAE71-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{B04AAE71-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{B04AAE71-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {B04AAE71-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B04AAE71-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{B04AAE71-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{B04AAE71-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{B04AAE71-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{B04AAE71-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
- {302B877E-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
- {302B877E-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
- {302B877E-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
- {302B877E-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
- {302B877E-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
- {302B877E-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
- {302B877E-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
- {302B877E-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
- {0C31DFDF-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
- {0C31DFDF-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
- {0C31DFDF-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
- {0C31DFDF-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
- {0C31DFDF-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
- {0C31DFDF-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
- {0C31DFDF-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
- {0C31DFDF-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {B04AAE71-0000-0000-0000-000000000000}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {B04AAE71-0000-0000-0000-000000000000}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {B04AAE71-0000-0000-0000-000000000000}.Tools|x64.ActiveCfg = Debug|x64
+ {B04AAE71-0000-0000-0000-000000000000}.Tools|x64.Build.0 = Debug|x64
+ {B04AAE71-0000-0000-0000-000000000000}.Tools|x86.ActiveCfg = Debug|x86
+ {B04AAE71-0000-0000-0000-000000000000}.Tools|x86.Build.0 = Debug|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Debug|x64.ActiveCfg = Debug|x64
{F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Debug|x64.Build.0 = Debug|x64
{F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Debug|x86.ActiveCfg = Debug|x86
{F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Debug|x86.Build.0 = Debug|x86
- {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x64.ActiveCfg = Release|x64
- {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x64.Build.0 = Release|x64
- {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x86.ActiveCfg = Release|x86
- {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x86.Build.0 = Release|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|Any CPU.Build.0 = Debug|Any CPU
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x64.ActiveCfg = Debug|x64
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x64.Build.0 = Debug|x64
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x86.ActiveCfg = Debug|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Release|x86.Build.0 = Debug|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Tools|Any CPU.ActiveCfg = Debug|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Tools|Any CPU.Build.0 = Debug|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Tools|x64.ActiveCfg = Debug|x64
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Tools|x64.Build.0 = Debug|x64
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Tools|x86.ActiveCfg = Debug|x86
+ {F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9}.Tools|x86.Build.0 = Debug|x86
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Debug|x64.ActiveCfg = Debug|x64
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Debug|x64.Build.0 = Debug|x64
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Debug|x86.ActiveCfg = Debug|x86
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Debug|x86.Build.0 = Debug|x86
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Release|Any CPU.Build.0 = Release|Any CPU
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Release|x64.ActiveCfg = Release|x64
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Release|x64.Build.0 = Release|x64
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Release|x86.ActiveCfg = Release|x86
{B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Release|x86.Build.0 = Release|x86
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Tools|x64.ActiveCfg = Debug|x64
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Tools|x64.Build.0 = Debug|x64
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Tools|x86.ActiveCfg = Debug|x86
+ {B38DBBD0-04C2-4D1A-84E2-B3446F6ADF2A}.Tools|x86.Build.0 = Debug|x86
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Debug|x64.ActiveCfg = Debug|x64
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Debug|x64.Build.0 = Debug|x64
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Debug|x86.ActiveCfg = Debug|x86
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Debug|x86.Build.0 = Debug|x86
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Release|Any CPU.Build.0 = Release|Any CPU
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Release|x64.ActiveCfg = Release|x64
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Release|x64.Build.0 = Release|x64
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Release|x86.ActiveCfg = Release|x86
{A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Release|x86.Build.0 = Release|x86
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Tools|x64.ActiveCfg = Debug|x64
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Tools|x64.Build.0 = Debug|x64
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Tools|x86.ActiveCfg = Debug|x86
+ {A2E5F175-78AF-4DDD-8F97-E2D2552372ED}.Tools|x86.Build.0 = Debug|x86
+ {59250BAF-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {59250BAF-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{59250BAF-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|x64
{59250BAF-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|x64
{59250BAF-0000-0000-0000-000000000000}.Debug|x86.ActiveCfg = Debug|x86
{59250BAF-0000-0000-0000-000000000000}.Debug|x86.Build.0 = Debug|x86
+ {59250BAF-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {59250BAF-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
{59250BAF-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|x64
{59250BAF-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|x64
{59250BAF-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|x86
{59250BAF-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|x86
+ {59250BAF-0000-0000-0000-000000000000}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {59250BAF-0000-0000-0000-000000000000}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {59250BAF-0000-0000-0000-000000000000}.Tools|x64.ActiveCfg = Debug|x64
+ {59250BAF-0000-0000-0000-000000000000}.Tools|x64.Build.0 = Debug|x64
+ {59250BAF-0000-0000-0000-000000000000}.Tools|x86.ActiveCfg = Debug|x86
+ {59250BAF-0000-0000-0000-000000000000}.Tools|x86.Build.0 = Debug|x86
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C899FCA4-7037-4E49-ABC2-44DE72487110}.Debug|x64.ActiveCfg = Debug|Any CPU
{C899FCA4-7037-4E49-ABC2-44DE72487110}.Debug|x64.Build.0 = Debug|Any CPU
{C899FCA4-7037-4E49-ABC2-44DE72487110}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Debug|x86.Build.0 = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Release|Any CPU.Build.0 = Debug|Any CPU
{C899FCA4-7037-4E49-ABC2-44DE72487110}.Release|x64.ActiveCfg = Debug|Any CPU
{C899FCA4-7037-4E49-ABC2-44DE72487110}.Release|x64.Build.0 = Debug|Any CPU
{C899FCA4-7037-4E49-ABC2-44DE72487110}.Release|x86.ActiveCfg = Debug|Any CPU
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Debug|x64.ActiveCfg = Debug|x64
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Debug|x64.Build.0 = Debug|x64
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Debug|x86.ActiveCfg = Debug|x86
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Debug|x86.Build.0 = Debug|x86
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Release|x64.ActiveCfg = Release|x64
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Release|x64.Build.0 = Release|x64
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Release|x86.ActiveCfg = Release|x86
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D}.Release|x86.Build.0 = Release|x86
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Debug|x64.ActiveCfg = Debug|x64
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Debug|x64.Build.0 = Debug|x64
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Debug|x86.ActiveCfg = Debug|x86
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Debug|x86.Build.0 = Debug|x86
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Release|x64.ActiveCfg = Release|x64
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Release|x64.Build.0 = Release|x64
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Release|x86.ActiveCfg = Release|x86
- {46786269-57B9-48E7-AA4F-8F4D84609FE6}.Release|x86.Build.0 = Release|x86
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Debug|x64.ActiveCfg = Debug|x64
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Debug|x64.Build.0 = Debug|x64
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Debug|x86.ActiveCfg = Debug|x86
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Debug|x86.Build.0 = Debug|x86
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Release|x64.ActiveCfg = Release|x64
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Release|x64.Build.0 = Release|x64
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Release|x86.ActiveCfg = Release|x86
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F}.Release|x86.Build.0 = Release|x86
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Release|x86.Build.0 = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Tools|x64.ActiveCfg = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Tools|x64.Build.0 = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Tools|x86.ActiveCfg = Debug|Any CPU
+ {C899FCA4-7037-4E49-ABC2-44DE72487110}.Tools|x86.Build.0 = Debug|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Debug|x64.ActiveCfg = Debug|x64
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Debug|x64.Build.0 = Debug|x64
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Debug|x86.ActiveCfg = Debug|x86
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Debug|x86.Build.0 = Debug|x86
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Release|Any CPU.Build.0 = Release|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Release|x64.ActiveCfg = Release|x64
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Release|x64.Build.0 = Release|x64
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Release|x86.ActiveCfg = Release|x86
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Release|x86.Build.0 = Release|x86
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Tools|x64.ActiveCfg = Debug|x64
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Tools|x64.Build.0 = Debug|x64
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Tools|x86.ActiveCfg = Debug|x86
+ {83429BD6-6358-4B18-BE51-401DF8EA2673}.Tools|x86.Build.0 = Debug|x86
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Debug|x64.Build.0 = Debug|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Debug|x86.Build.0 = Debug|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Release|x64.ActiveCfg = Release|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Release|x64.Build.0 = Release|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Release|x86.ActiveCfg = Release|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Release|x86.Build.0 = Release|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Tools|Any CPU.ActiveCfg = Tools|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Tools|Any CPU.Build.0 = Tools|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Tools|x64.ActiveCfg = Tools|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Tools|x64.Build.0 = Tools|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Tools|x86.ActiveCfg = Tools|Any CPU
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB}.Tools|x86.Build.0 = Tools|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Debug|x64.ActiveCfg = Debug|x64
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Debug|x64.Build.0 = Debug|x64
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Debug|x86.ActiveCfg = Debug|x86
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Debug|x86.Build.0 = Debug|x86
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Release|x64.ActiveCfg = Release|x64
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Release|x64.Build.0 = Release|x64
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Release|x86.ActiveCfg = Release|x86
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Release|x86.Build.0 = Release|x86
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Tools|Any CPU.ActiveCfg = Debug|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Tools|Any CPU.Build.0 = Debug|Any CPU
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Tools|x64.ActiveCfg = Debug|x64
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Tools|x64.Build.0 = Debug|x64
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Tools|x86.ActiveCfg = Debug|x86
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52}.Tools|x86.Build.0 = Debug|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -166,15 +260,12 @@ Global
GlobalSection(NestedProjects) = preSolution
{0529F740-0000-0000-0000-000000000000} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
{B04AAE71-0000-0000-0000-000000000000} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
- {302B877E-0000-0000-0000-000000000000} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
- {0C31DFDF-0000-0000-0000-000000000000} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
{F0ADA779-40B8-4F7E-BA6C-CDB19F3065D9} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
{59250BAF-0000-0000-0000-000000000000} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
{C899FCA4-7037-4E49-ABC2-44DE72487110} = {3202E94D-E985-4181-9F69-F458A7F6574F}
- {31D24303-F6A9-4D53-BB03-A73EDCB3186D} = {1780DA39-F1EC-4100-8C58-ECD756C68033}
- {46786269-57B9-48E7-AA4F-8F4D84609FE6} = {1780DA39-F1EC-4100-8C58-ECD756C68033}
- {D17DE83D-A592-461F-8AF2-53F9E22E1D0F} = {1780DA39-F1EC-4100-8C58-ECD756C68033}
- {1780DA39-F1EC-4100-8C58-ECD756C68033} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
+ {83429BD6-6358-4B18-BE51-401DF8EA2673} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
+ {8AF31169-49B1-4A12-B8F4-2A0674A9E7CB} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
+ {0E0723E8-D785-4F61-81F4-182A12BCAA52} = {B01693E5-CF08-4DB7-8920-407F8D6603A1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AA37ED9F-F8D6-468E-A101-658AD605B09A}
diff --git a/engine b/engine
index 93c7aab5d0..fc890e5824 160000
--- a/engine
+++ b/engine
@@ -1 +1 @@
-Subproject commit 93c7aab5d0ec1fcad237ea84715378d0b95f99f9
+Subproject commit fc890e5824e9e33cda5e38eebc2a06e6d9ac94b6
diff --git a/package_release_build.py b/package_release_build.py
index a186cb58e9..87afde0f91 100755
--- a/package_release_build.py
+++ b/package_release_build.py
@@ -21,30 +21,66 @@ except ImportError:
Fore = ColorDummy()
Style = ColorDummy()
+p = os.path.join
+
+SHARED_IGNORED_RESOURCES = {
+ "ss13model.7z",
+ "ResourcePack.zip",
+ "buildResourcePack.py",
+ "CONTENT_GOES_HERE"
+}
+CLIENT_IGNORED_RESOURCES = {
+ "Maps",
+ "emotes.xml"
+}
+SERVER_IGNORED_RESOURCES = {
+ "Textures",
+ "Fonts"
+}
+
+GODOT = None
+
def main():
+ global GODOT
parser = argparse.ArgumentParser(
description="Packages the SS14 content repo for release on all platforms.")
parser.add_argument("--platform",
+ "-p",
action="store",
choices=["windows", "mac", "linux"],
nargs="*",
help="Which platform to build for. If not provided, all platforms will be built")
+ parser.add_argument("--godot",
+ action="store",
+ help="Path to the Godot executable used for exporting.")
+
+ parser.add_argument("--windows-godot-build",
+ action="store")
+
args = parser.parse_args()
platforms = args.platform
+ GODOT = args.godot
+ if not GODOT:
+ print("No Godot executable passed.")
+ exit(1)
if not platforms:
platforms = ["windows", "mac", "linux"]
if os.path.exists("release"):
- print(Fore.BLUE+Style.DIM + "Cleaning old release packages (release/)..." + Style.RESET_ALL)
+ print(Fore.BLUE+Style.DIM +
+ "Cleaning old release packages (release/)..." + Style.RESET_ALL)
shutil.rmtree("release")
os.mkdir("release")
if "windows" in platforms:
wipe_bin()
- build_windows()
+ if not args.windows_godot_build:
+ print("No --window-godot-build passed")
+ exit(1)
+ build_windows(args.windows_godot_build)
if "linux" in platforms:
wipe_bin()
@@ -54,58 +90,85 @@ def main():
wipe_bin()
build_macos()
+
def wipe_bin():
+ print(Fore.BLUE + Style.DIM +
+ "Clearing old build artifacts (if any)..." + Style.RESET_ALL)
+ if os.path.exists(p("engine", "bin")):
+ shutil.rmtree(p("engine", "bin"))
+
if os.path.exists("bin"):
- print(Fore.BLUE + Style.DIM + "Clearing old build artifacts..." + Style.RESET_ALL)
shutil.rmtree("bin")
-def build_windows():
+
+def build_windows(godot_build):
# Run a full build.
- print(Fore.GREEN + "Building project for Windows x86..." + Style.RESET_ALL)
+ print(Fore.GREEN + "Building project for Windows x64..." + Style.RESET_ALL)
subprocess.run(["msbuild",
"SpaceStation14Content.sln",
"/m",
"/p:Configuration=Release",
- "/p:Platform=x86",
+ "/p:Platform=x64",
"/nologo",
"/v:m",
"/p:TargetOS=Windows",
"/t:Rebuild"
], check=True)
- # Package client.
- print(Fore.GREEN + "Packaging Windows x86 client..." + Style.RESET_ALL)
- package_zip(os.path.join("bin", "Client"),
- os.path.join("release", "SS14.Client_windows_x86.zip"))
+ print(Fore.GREEN + "Packaging Windows x64 client..." + Style.RESET_ALL)
- print(Fore.GREEN + "Packaging Windows x86 server..." + Style.RESET_ALL)
- package_zip(os.path.join("bin", "Server"),
- os.path.join("release", "SS14.Server_windows_x86.zip"))
+ os.makedirs("bin/win_export", exist_ok=True)
+ subprocess.run([GODOT,
+ "--verbose",
+ "--export-debug",
+ "win",
+ "../../bin/win_export/SS14.Client.exe"],
+ cwd="engine/SS14.Client.Godot")
+
+ client_zip = zipfile.ZipFile(p("release", "SS14.Client_Windows_x64.zip"), "w", compression=zipfile.ZIP_DEFLATED)
+ client_zip.writestr("spess.bat", "cd godot\ncall SS14.Client.exe --path SS14.Client.Godot")
+ client_zip.write(p("bin", "win_export"), "godot")
+ client_zip.write(p("bin", "win_export", "SS14.Client.pck"), p("godot", "SS14.Client.pck"))
+ copy_dir_into_zip(godot_build, "godot", client_zip)
+ copy_dir_into_zip(p("engine", "bin", "Client"), p("bin", "Client"), client_zip)
+ copy_resources(p("bin", "Client", "Resources"), client_zip, server=False)
+ client_zip.close()
+
+ print(Fore.GREEN + "Packaging Windows x64 server..." + Style.RESET_ALL)
+ server_zip = zipfile.ZipFile(p("release", "SS14.Server_Windows_x64.zip"), "w", compression=zipfile.ZIP_DEFLATED)
+ copy_dir_into_zip(p("engine", "bin", "Server"), "", server_zip)
+ copy_resources(p("Resources"), server_zip, server=True)
+ server_zip.close()
def build_linux():
- print(Fore.GREEN + "Building project for Linux x86..." + Style.RESET_ALL)
+ print(Fore.GREEN + "Building project for Linux x64..." + Style.RESET_ALL)
subprocess.run(["msbuild",
"SpaceStation14Content.sln",
"/m",
"/p:Configuration=Release",
- "/p:Platform=x86",
+ "/p:Platform=x64",
"/nologo",
"/v:m",
"/p:TargetOS=Linux",
"/t:Rebuild"
- ], check=True)
+ ], check=True)
+ # NOTE: Temporarily disabled because I can't test it.
# Package client.
- print(Fore.GREEN + "Packaging Linux x86 client..." + Style.RESET_ALL)
- package_zip(os.path.join("bin", "Client"), os.path.join("release", "SS14.Client_linux_x86.zip"))
+ #print(Fore.GREEN + "Packaging Linux x64 client..." + Style.RESET_ALL)
+ # package_zip(p("bin", "Client"), p(
+ # "release", "SS14.Client_linux_x64.zip"))
+
+ print(Fore.GREEN + "Packaging Linux x64 server..." + Style.RESET_ALL)
+ server_zip = zipfile.ZipFile(p("release", "SS14.Server_Linux_x64.zip"), "w", compression=zipfile.ZIP_DEFLATED)
+ copy_dir_into_zip(p("engine", "bin", "Server"), "", server_zip)
+ copy_resources(p("Resources"), server_zip, server=True)
+ server_zip.close()
- print(Fore.GREEN + "Packaging Linux x86 server..." + Style.RESET_ALL)
- package_zip(os.path.join("bin", "Server"), os.path.join("release", "SS14.Server_linux_x86.zip"))
def build_macos():
- # Haha this is gonna suck.
print(Fore.GREEN + "Building project for MacOS x64..." + Style.RESET_ALL)
subprocess.run(["msbuild",
"SpaceStation14Content.sln",
@@ -116,56 +179,95 @@ def build_macos():
"/v:m",
"/p:TargetOS=MacOS",
"/t:Rebuild"
- ], check=True)
+ ], check=True)
print(Fore.GREEN + "Packaging MacOS x64 client..." + Style.RESET_ALL)
# Client has to go in an app bundle.
- bundle = os.path.join("bin", "app", "Space Station 14.app")
- shutil.copytree(os.path.join("BuildFiles", "Mac", "Space Station 14.app"),
- bundle)
+ subprocess.run(GODOT,
+ "--verbose",
+ "--export-debug",
+ "mac",
+ "../../release/mac_export.zip",
+ cwd="engine/SS14.Client.Godot",
+ check=True)
- _copytree(os.path.join("bin", "Client"),
- os.path.join(bundle, "Contents", "MacOS"))
+ _copytree(p("engine", "bin", "Client"),
+ p(bundle, "Contents", "MacOS", "bin", "Client"))
- package_zip(os.path.join("bin", "app"),
- os.path.join("release", "SS14.Client_MacOS.zip"))
+ copy_resources(p(bundle, "Contents",
+ "MacOS", "bin", "Client", "Resources"), server=False)
+
+ os.makedirs(p(bundle, "Contents", "MacOS",
+ "SS14.Client.Godot"), exist_ok=True)
+
+ _copytree(p("engine", "SS14.Client.Godot"),
+ p(bundle, "Contents", "MacOS", "SS14.Client.Godot"))
+
+ package_zip(p("bin", "mac_app"),
+ p("release", "SS14.Client_MacOS.zip"))
print(Fore.GREEN + "Packaging MacOS x64 server..." + Style.RESET_ALL)
- package_zip(os.path.join("bin", "Server"),
- os.path.join("release", "SS14.Server_MacOS.zip"))
+ copy_resources(p("engine", "bin",
+ "Server", "Resources"), server=True)
+
+ package_zip(p("engine", "bin", "Server"),
+ p("release", "SS14.Server_MacOS.zip"))
+
+
+def copy_resources(target, zipf, server):
+ # Content repo goes FIRST so that it won't override engine files as that's forbidden.
+ do_resource_copy(target, "Resources", zipf, server)
+ do_resource_copy(target, p("engine", "Resources"), zipf, server)
+
+
+def do_resource_copy(target, source, zipf, server):
+ for filename in os.listdir(source):
+ if filename in SHARED_IGNORED_RESOURCES \
+ or filename in (SERVER_IGNORED_RESOURCES if server else CLIENT_IGNORED_RESOURCES):
+ continue
+
+ path = p(source, filename)
+ target_path = p(target, filename)
+ if os.path.isdir(path):
+ copy_dir_into_zip(path, target_path, zipf)
-# Hack copied from Stack Overflow to get around the fact that
-# shutil.copytree doesn't allow copying into existing directories.
-def _copytree(src, dst, symlinks=False, ignore=None):
- for item in os.listdir(src):
- s = os.path.join(src, item)
- d = os.path.join(dst, item)
- if os.path.isdir(s):
- shutil.copytree(s, d, symlinks, ignore)
else:
- shutil.copy2(s, d)
+ zipf.write(path, target_path)
-def package_zip(directory, zipname):
- with zipfile.ZipFile(zipname, "w", zipfile.ZIP_DEFLATED) as zipf:
- for dirs, _, files in os.walk(directory):
- relpath = os.path.relpath(dirs, directory)
- if relpath != ".":
- # Write directory node except for root level.
- zipf.write(dirs, relpath)
- for filename in files:
- zippath = os.path.join(relpath, filename)
- filepath = os.path.join(dirs, filename)
+def zip_entry_exists(zipf, name):
+ try:
+ # Trick ZipInfo into sanitizing the name for us so this awful module stops spewing warnings.
+ zinfo = zipfile.ZipInfo.from_file("Resources", name)
+ zipf.getinfo(zinfo.filename)
+ except KeyError:
+ return False
+ return True
- message = "{dim}{diskroot}{sep}{zipfile}{dim} -> {ziproot}{sep}{zipfile}".format(
- sep=os.sep + Style.NORMAL,
- dim=Style.DIM,
- diskroot=directory,
- ziproot=zipname,
- zipfile=os.path.normpath(zippath))
- print(Fore.CYAN + message + Style.RESET_ALL)
- zipf.write(filepath, zippath)
+def copy_dir_into_zip(directory, basepath, zipf):
+ if basepath and not zip_entry_exists(zipf, basepath):
+ zipf.write(directory, basepath)
+
+ for root, _, files in os.walk(directory):
+ relpath = os.path.relpath(root, directory)
+ if relpath != "." and not zip_entry_exists(zipf, p(basepath, relpath)):
+ zipf.write(root, p(basepath, relpath))
+
+ for filename in files:
+ zippath = p(basepath, relpath, filename)
+ filepath = p(root, filename)
+
+ message = "{dim}{diskroot}{sep}{zipfile}{dim} -> {ziproot}{sep}{zipfile}".format(
+ sep=os.sep + Style.NORMAL,
+ dim=Style.DIM,
+ diskroot=directory,
+ ziproot=zipf.filename,
+ zipfile=os.path.normpath(zippath))
+
+ print(Fore.CYAN + message + Style.RESET_ALL)
+ zipf.write(filepath, zippath)
+
if __name__ == '__main__':
main()