Added Glitches (+ small fix)

This commit is contained in:
CreepyCrafter24 2019-09-19 18:51:31 +02:00
parent 8c11682cc0
commit b4439c4708
27 changed files with 756 additions and 36 deletions

2
1/1.cs
View File

@ -53,7 +53,7 @@ namespace LaptopSimulator2015.Levels
}
}
public int levelNumber => 1;
public int availableAfter => 1;
public int gameClock => 17;

2
2/2.cs
View File

@ -54,7 +54,7 @@ namespace LaptopSimulator2015.Levels
}
}
public int levelNumber => 2;
public int availableAfter => 2;
public int gameClock => 17;

2
3/3.cs
View File

@ -54,7 +54,7 @@ namespace LaptopSimulator2015.Levels
}
}
public int levelNumber => 3;
public int availableAfter => 3;
public int gameClock => 17;

View File

@ -32,7 +32,7 @@ namespace LaptopSimulator2015.Goals
}
}
public int levelNumber => 0;
public int availableAfter => 0;
public int gameClock => 300;

2
4/4.cs
View File

@ -51,7 +51,7 @@ namespace LaptopSimulator2015.Levels
}
}
public int levelNumber => 4;
public int availableAfter => 4;
public int gameClock => 17;
public Panel desktopIcon { get; set; }
public int installerProgressSteps => 500;

View File

@ -44,6 +44,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Drawing.cs" />
<Compile Include="Glitch.cs" />
<Compile Include="Input.cs" />
<Compile Include="Minigame.cs" />
<Compile Include="Misc.cs" />

View File

@ -10,6 +10,15 @@ namespace Base
{
public static class Drawing
{
/// <summary>
/// Draw a string with the given size
/// </summary>
/// <param name="g">The graphics object to draw the string on</param>
/// <param name="s">The string to draw</param>
/// <param name="size">The font size of the string</param>
/// <param name="location">The location to draw the string at</param>
/// <param name="brush">The brush to draw the string with</param>
/// <param name="isLocationCentered">Set to true if you want to draw the string around instead of left-down from the location</param>
public static void DrawSizedString(Graphics g, string s, int size, PointF location, Brush brush, bool isLocationCentered = false)
{
SmoothingMode tmpS = g.SmoothingMode;

27
Base/Glitch.cs Normal file
View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Base
{
public interface CaptchaGlitch
{
/// <summary>
/// The chance of the Glitch being called, must be bewteen 0 and 1. Set this to zero if it should not be called (select based on currentLevel)
/// </summary>
double chance { get; }
/// <summary>
/// The current level, intended for modifying the intensity of the Glitch
/// </summary>
int currentLevel { get; set; }
/// <summary>
/// Called with the selected chance after the player inputs a char to the Captcha-box
/// </summary>
/// <param name="inputChar">The character the player typed</param>
/// <param name="inputString">The string to be added to the Captcha-box, modified by previous CaptchaGlitch instances</param>
/// <param name="captchaChars">The characters which can be added to the CaptchaBox</param>
void apply(char inputChar, ref string inputString, char[] captchaChars);
}
}

View File

@ -13,8 +13,11 @@ namespace Base
{
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern short GetKeyState(int keyCode);
//public static bool IsKeyDown(Key key) => Keyboard.IsKeyDown(key);
/// <summary>
/// Check whether the Key is pressed
/// </summary>
/// <param name="key">Key to check</param>
/// <returns>Whether the key is pressed</returns>
public static bool IsKeyDown(Keys key)
{
try
@ -32,16 +35,27 @@ namespace Base
Console.WriteLine("Invader: IsKeyDown failed:\r\n" + e1.ToString());
return false;
}
/*Enum.TryParse(key.ToString(), out Key k);
if (k == Key.None)
return false;
return IsKeyDown(k);*/
}
/// <summary>
/// Unified input for going up
/// </summary>
public static bool Up => IsKeyDown(Keys.Up) || IsKeyDown(Keys.W);
/// <summary>
/// Unified input for going left
/// </summary>
public static bool Left => IsKeyDown(Keys.Left) || IsKeyDown(Keys.A);
/// <summary>
/// Unified input for going down
/// </summary>
public static bool Down => IsKeyDown(Keys.Down) || IsKeyDown(Keys.S);
/// <summary>
/// Unified input for going right
/// </summary>
public static bool Right => IsKeyDown(Keys.Right) || IsKeyDown(Keys.D);
/// <summary>
/// Unified input for doing something
/// </summary>
public static bool Action => IsKeyDown(Keys.Space) || IsKeyDown(Keys.Q) || IsKeyDown(Keys.E);
}
}

View File

@ -10,24 +10,70 @@ namespace LaptopSimulator2015
{
public interface Minigame
{
/// <summary>
/// The minigames displayed name, found in installers title and tooltips
/// </summary>
string name { get; }
/// <summary>
/// The minigames icon, found in installers and on desktop
/// </summary>
Image icon { get; }
int levelNumber { get; }
/// <summary>
/// Level on which the Minigame becomes visible
/// </summary>
int availableAfter { get; }
/// <summary>
/// Defines the delay between frames
/// </summary>
int gameClock { get; }
/// <summary>
/// DO NOT CHANGE! INTERNAL USE ONLY!
/// </summary>
Panel desktopIcon { get; set; }
/// <summary>
/// Called before each time before gameTick, to be used for resetting/initializing variables
/// </summary>
/// <param name="g">A temporary Graphics object, should not be used</param>
/// <param name="minigamePanel">The panel on which the minigame is displayed</param>
/// <param name="minigameTimer">The timer used for scheduling frames</param>
void initGame(Graphics g, Panel minigamePanel, Timer minigameTimer);
/// <summary>
/// Called each frame
/// </summary>
/// <param name="g">Graphics object, to be used for drawing the scene</param>
/// <param name="minigamePanel">The panel on which the minigame is displayed</param>
/// <param name="minigameTimer">The timer used for scheduling frames</param>
/// <param name="minigameTime">The amount of total displayed frames</param>
void gameTick(Graphics g, Panel minigamePanel, Timer minigameTimer, uint minigameTime);
}
public interface Level : Minigame
{
/// <summary>
/// Description shown on the installers first page
/// </summary>
string installerText { get; }
/// <summary>
/// Amount of seconds the minigame is to be played times ten
/// </summary>
int installerProgressSteps { get; }
}
public interface Goal : Minigame
{
/// <summary>
/// The level on which the Goal is reached
/// </summary>
int playableAfter { get; }
/// <summary>
/// The text displayed after the Minigame becomes visible
/// </summary>
string[] availableText { get; }
/// <summary>
/// The text displayed after finding out about the fact the Goal is not reached
/// </summary>
string[] incompleteText { get; }
/// <summary>
/// The text displayed after Goal is reached (NOT after the goals minigame is played)
/// </summary>
string[] completeText { get; }
}
}

View File

@ -10,7 +10,15 @@ namespace Base
{
public static class Misc
{
/// <summary>
/// Call to signal that the player failed
/// </summary>
public static Action closeGameWindow;
/// <summary>
/// Convert a double to a float
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static float d2f(double input)
{
float result = Convert.ToSingle(input);
@ -21,13 +29,57 @@ namespace Base
return result;
}
/// <summary>
/// Convert a float to an int
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static int f2i(float input) => (int)Math.Round(input);
/// <summary>
/// Convert a double to an int
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static int d2i(double input) => f2i(d2f(input));
/// <summary>
/// Convert an int to a float
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static float i2f(int input) => input;
/// <summary>
/// Convert an int to a double
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static double i2d(int input) => input;
/// <summary>
/// Convert a float to a double
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static double f2d(float input) => input;
/// <summary>
/// Convert a value in radians to a value in degrees
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static double rad2deg(double input) => (360 * input) / (2 * Math.PI);
/// <summary>
/// Convert a value in degrees to a value in radians
/// </summary>
/// <param name="input">Value to be converted</param>
/// <returns>Converted value</returns>
public static double deg2rad(double input) => ((2 * Math.PI) * input) / 360;
/// <summary>
/// Maps a number from one range of numbers to another
/// </summary>
/// <param name="originalStart">Start of the range the original number is in</param>
/// <param name="originalEnd">End of the range the original number is in</param>
/// <param name="newStart">Start of the range the new number is in</param>
/// <param name="newEnd">End of the range the new number is in</param>
/// <param name="value">Value to be mapped</param>
/// <returns>Mapped value</returns>
public static double map(double originalStart, double originalEnd, double newStart, double newEnd, double value)
{
double scale = (newEnd - newStart) / (originalEnd - originalStart);

View File

@ -7,9 +7,14 @@ using System.Threading.Tasks;
namespace Base
{
/// <summary>
/// Class for a 2-Dimensional Vector
/// </summary>
public class Vector2
{
/// <summary>
/// A new Vector with a value of zero
/// </summary>
public static readonly Vector2 Zero = new Vector2(Point.Empty);
double x_unchecked = 0;
double y_unchecked = 0;
@ -56,6 +61,9 @@ namespace Base
}
}
}
/// <summary>
/// X-Coordinate of the Vector
/// </summary>
public double X
{
get {
@ -67,6 +75,9 @@ namespace Base
check();
}
}
/// <summary>
/// Y-Coordinate of the Vector
/// </summary>
public double Y
{
get {
@ -78,26 +89,50 @@ namespace Base
check();
}
}
/// <summary>
/// Bounds of the Vector, set both values for a axis to zero to ignore it
/// </summary>
public Rectangle bounds;
/// <summary>
/// Set to true if you want the Vector to wrap instead of 'cutting' when reaching the bound
/// </summary>
public bool bounds_wrap = false;
/// <summary>
/// Create a new Vector
/// </summary>
/// <param name="x">X coordinate</param>
/// <param name="y">Y coordinate</param>
public Vector2(double x = 0, double y = 0)
{
X = x;
Y = y;
}
/// <summary>
/// Create a new Vector
/// </summary>
/// <param name="from">Point to copy data from</param>
public Vector2(Point from)
{
X = from.X;
Y = from.Y;
}
/// <summary>
/// Create a new Vector
/// </summary>
/// <param name="from">Point to copy data from</param>
public Vector2(PointF from)
{
X = from.X;
Y = from.Y;
}
/// <summary>
/// Copy data from the Vector to a new one
/// </summary>
/// <param name="from">Vector to copy data from</param>
/// <param name="useProperties">Set to true to copy bounds etc</param>
public Vector2(Vector2 from, bool useProperties = false)
{
X = from.X;
@ -110,20 +145,60 @@ namespace Base
}
}
public Point toPoint() => new Point((int)Math.Round(X), (int)Math.Round(Y));
/// <summary>
/// Copy the Vectors axis to a point
/// </summary>
/// <returns>The new Point</returns>
public Point toPoint() => new Point(Misc.d2i(X), Misc.d2i(Y));
/// <summary>
/// Copy the Vectors axis to a point
/// </summary>
/// <returns>The new Point</returns>
public PointF toPointF() => new PointF(Misc.d2f(X), Misc.d2f(Y));
/// <summary>
/// Get the squared distance between this Vector and the other
/// </summary>
/// <param name="other">The other Vector</param>
/// <returns>Distance</returns>
public double distanceFromSquared(Vector2 other) => Math.Pow(X - other.X, 2) + Math.Pow(Y - other.Y, 2);
/// <summary>
/// Get the distance between this Vector and the other
/// </summary>
/// <param name="other">The other Vector</param>
/// <returns>Distance</returns>
public double distanceFrom(Vector2 other) => Math.Sqrt(distanceFromSquared(other));
/// <summary>
/// Provided for compatibility with some methods for other Vector implementations
/// </summary>
public double magnitude { get { return distanceFrom(Zero); } }
/// <summary>
/// Provided for compatibility with some methods for other Vector implementations
/// </summary>
public double sqrMagnitude { get { return distanceFromSquared(Zero); } }
/// <summary>
/// Move the Vector in the direction
/// </summary>
/// <param name="radians">The angle in radians</param>
/// <param name="distance">Distance to move the Vector</param>
public void moveInDirection(double radians = 0, double distance = 1)
{
X += Math.Cos(radians) * distance;
Y += Math.Sin(radians) * distance;
}
/// <summary>
/// Get the angle inbetween the X-Axis and a line between two poins
/// </summary>
/// <param name="other">The other point for the line</param>
/// <returns>Angle in Radians</returns>
public double getDirection(Vector2 other) => Math.Atan((other.X - X) / (other.Y - Y));
/// <summary>
/// Move the Vector towards the other Vector
/// </summary>
/// <param name="other">The other Vector</param>
/// <param name="distance">The distance to move</param>
/// <param name="stopAtTarget">Whether to stop at the target or to go through it</param>
public void moveTowards(Vector2 other, double distance = 1, bool stopAtTarget = true)
{
double dist = distanceFrom(other);
@ -142,18 +217,19 @@ namespace Base
}
}
public Vector2 addTag(object Tag) { this.Tag = Tag; return this; }
public Vector2 addBounds(Rectangle bounds) { this.bounds = bounds; return this; }
public Vector2 addBoundsW(bool bounds_wrap) { this.bounds_wrap = bounds_wrap; return this; }
Vector2 addTag(object Tag) { this.Tag = Tag; return this; }
Vector2 addBounds(Rectangle bounds) { this.bounds = bounds; return this; }
Vector2 addBoundsW(bool bounds_wrap) { this.bounds_wrap = bounds_wrap; return this; }
Vector2 addData(object Tag, Rectangle bounds, bool bounds_wrap) => addTag(Tag).addBounds(bounds).addBoundsW(bounds_wrap);
public override string ToString() => "{X=" + X.ToString() + ", Y=" + Y.ToString() + "}";
public static Vector2 operator +(Vector2 left, Vector2 right) => new Vector2(left.X + right.X, left.Y + right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator +(Vector2 left, Point right) => new Vector2(left.X + right.X, left.Y + right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator +(Vector2 left, PointF right) => new Vector2(left.X + right.X, left.Y + right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator -(Vector2 left, Vector2 right) => new Vector2(left.X - right.X, left.Y - right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator -(Vector2 left, Point right) => new Vector2(left.X - right.X, left.Y - right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator -(Vector2 left, PointF right) => new Vector2(left.X - right.X, left.Y - right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator *(Vector2 left, Vector2 right) => new Vector2(left.X * right.X, left.Y * right.Y).addTag(left.Tag).addBounds(left.bounds).addBoundsW(left.bounds_wrap);
public static Vector2 operator +(Vector2 left, Vector2 right) => new Vector2(left.X + right.X, left.Y + right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator +(Vector2 left, Point right) => new Vector2(left.X + right.X, left.Y + right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator +(Vector2 left, PointF right) => new Vector2(left.X + right.X, left.Y + right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator -(Vector2 left, Vector2 right) => new Vector2(left.X - right.X, left.Y - right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator -(Vector2 left, Point right) => new Vector2(left.X - right.X, left.Y - right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator -(Vector2 left, PointF right) => new Vector2(left.X - right.X, left.Y - right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator *(Vector2 left, Vector2 right) => new Vector2(left.X * right.X, left.Y * right.Y).addData(left.Tag, left.bounds, left.bounds_wrap);
public static Vector2 operator *(Vector2 left, Point right) => new Vector2(left.X * right.X, left.Y * right.Y);
public static Vector2 operator *(Vector2 left, PointF right) => new Vector2(left.X * right.X, left.Y * right.Y);
public static Vector2 operator /(Vector2 left, Vector2 right) => new Vector2(left.X / right.X, left.Y / right.Y);

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B97A24F8-8027-471A-B688-8BC5D49B21D7}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CaptchaGlitch_Double</RootNamespace>
<AssemblyName>CaptchaGlitch_Double</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Double.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Base\Base.csproj">
<Project>{9a9561a7-dd5f-43a5-a3f5-a95f35da204d}</Project>
<Name>Base</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if not exist "$(SolutionDir)tmp2" mkdir "$(SolutionDir)tmp2"
copy "$(TargetPath)" "$(SolutionDir)tmp2"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Base;
namespace LaptopSimulator2015.Glitches
{
public class Double : CaptchaGlitch
{
public double chance { get { if (currentLevel < 1) return 0; return Math.Min(currentLevel / 8d, 0.8); } }
public int currentLevel { get; set; }
public void apply(char inputChar, ref string inputString, char[] captchaChars) => inputString += inputChar;
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CaptchaGlitch_Double")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CaptchaGlitch_Double")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("b97a24f8-8027-471a-b688-8bc5d49b21d7")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{72BBB6B8-5DA3-4FF1-8FA6-75256637F931}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CaptchaGlitch_Rand</RootNamespace>
<AssemblyName>CaptchaGlitch_Rand</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Rand.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Base\Base.csproj">
<Project>{9a9561a7-dd5f-43a5-a3f5-a95f35da204d}</Project>
<Name>Base</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if not exist "$(SolutionDir)tmp2" mkdir "$(SolutionDir)tmp2"
copy "$(TargetPath)" "$(SolutionDir)tmp2"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CaptchaGlitch_Rand")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CaptchaGlitch_Rand")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("72bbb6b8-5da3-4ff1-8fa6-75256637f931")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,16 @@
using Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LaptopSimulator2015.Glitches
{
public class Rand : CaptchaGlitch
{
public double chance { get { if (currentLevel < 2) return 0; return Math.Min((currentLevel - 1) / 16d, 0.8); } }
public int currentLevel { get; set; }
public void apply(char inputChar, ref string inputString, char[] captchaChars) => inputString += captchaChars[new Random().Next(captchaChars.Length - 1)];
}
}

View File

@ -8,8 +8,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaptopSimulator2015", "Lapt
{0965C803-49B2-4311-B62F-1E60DBD9185F} = {0965C803-49B2-4311-B62F-1E60DBD9185F}
{8109040E-9D8D-43E7-A461-83475B2939C9} = {8109040E-9D8D-43E7-A461-83475B2939C9}
{4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529} = {4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529}
{048BCC52-64BA-452B-A3F6-3683F9049AFD} = {048BCC52-64BA-452B-A3F6-3683F9049AFD}
{E61E2797-62B4-471C-ACBF-31EAB7C746CF} = {E61E2797-62B4-471C-ACBF-31EAB7C746CF}
{DFA2FB97-D676-4B0D-B281-2685F85781EE} = {DFA2FB97-D676-4B0D-B281-2685F85781EE}
{72BBB6B8-5DA3-4FF1-8FA6-75256637F931} = {72BBB6B8-5DA3-4FF1-8FA6-75256637F931}
{5E10F1D0-0114-444A-B80E-975B5DC40D9F} = {5E10F1D0-0114-444A-B80E-975B5DC40D9F}
{B97A24F8-8027-471A-B688-8BC5D49B21D7} = {B97A24F8-8027-471A-B688-8BC5D49B21D7}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Minigame Tests", "Minigame Tests", "{69DC5824-3F89-4B47-BF1A-F25942094195}"
@ -47,6 +51,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3g", "3g\3g.csproj", "{E61E
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "lv3g_t", "lv3g_t\lv3g_t.csproj", "{E6BF80E0-8848-4A6F-B114-FEC5055E1D9E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Glitches", "Glitches", "{A8CDDCD3-43FC-46AE-9132-24DE27808D96}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CaptchaGlitch_Rand", "CaptchaGlitch_Rand\CaptchaGlitch_Rand.csproj", "{72BBB6B8-5DA3-4FF1-8FA6-75256637F931}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zz_CaptchaGlitch_Empty", "zz_CaptchaGlitch_Empty\zz_CaptchaGlitch_Empty.csproj", "{048BCC52-64BA-452B-A3F6-3683F9049AFD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CaptchaGlitch_Double", "CaptchaGlitch_Double\CaptchaGlitch_Double.csproj", "{B97A24F8-8027-471A-B688-8BC5D49B21D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zzz_ShuffleChars", "zzz_ShuffleChars\zzz_ShuffleChars.csproj", "{5E10F1D0-0114-444A-B80E-975B5DC40D9F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -105,6 +119,22 @@ Global
{E6BF80E0-8848-4A6F-B114-FEC5055E1D9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6BF80E0-8848-4A6F-B114-FEC5055E1D9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6BF80E0-8848-4A6F-B114-FEC5055E1D9E}.Release|Any CPU.Build.0 = Release|Any CPU
{72BBB6B8-5DA3-4FF1-8FA6-75256637F931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72BBB6B8-5DA3-4FF1-8FA6-75256637F931}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72BBB6B8-5DA3-4FF1-8FA6-75256637F931}.Release|Any CPU.ActiveCfg = Release|Any CPU
{72BBB6B8-5DA3-4FF1-8FA6-75256637F931}.Release|Any CPU.Build.0 = Release|Any CPU
{048BCC52-64BA-452B-A3F6-3683F9049AFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{048BCC52-64BA-452B-A3F6-3683F9049AFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{048BCC52-64BA-452B-A3F6-3683F9049AFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{048BCC52-64BA-452B-A3F6-3683F9049AFD}.Release|Any CPU.Build.0 = Release|Any CPU
{B97A24F8-8027-471A-B688-8BC5D49B21D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B97A24F8-8027-471A-B688-8BC5D49B21D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B97A24F8-8027-471A-B688-8BC5D49B21D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B97A24F8-8027-471A-B688-8BC5D49B21D7}.Release|Any CPU.Build.0 = Release|Any CPU
{5E10F1D0-0114-444A-B80E-975B5DC40D9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5E10F1D0-0114-444A-B80E-975B5DC40D9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5E10F1D0-0114-444A-B80E-975B5DC40D9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5E10F1D0-0114-444A-B80E-975B5DC40D9F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -121,6 +151,10 @@ Global
{4AA1EF48-BC5E-4FE4-9B7D-BAE6D6AB9529} = {83BF22F9-3A2D-42A3-9DB0-C1E2AA1DD218}
{E61E2797-62B4-471C-ACBF-31EAB7C746CF} = {7D9F2BFD-61B6-4C6C-97CC-D9AD51A04959}
{E6BF80E0-8848-4A6F-B114-FEC5055E1D9E} = {69DC5824-3F89-4B47-BF1A-F25942094195}
{72BBB6B8-5DA3-4FF1-8FA6-75256637F931} = {A8CDDCD3-43FC-46AE-9132-24DE27808D96}
{048BCC52-64BA-452B-A3F6-3683F9049AFD} = {A8CDDCD3-43FC-46AE-9132-24DE27808D96}
{B97A24F8-8027-471A-B688-8BC5D49B21D7} = {A8CDDCD3-43FC-46AE-9132-24DE27808D96}
{5E10F1D0-0114-444A-B80E-975B5DC40D9F} = {A8CDDCD3-43FC-46AE-9132-24DE27808D96}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9631F8FF-AFC1-4583-9D27-6C2D97D3A2E9}

View File

@ -19,6 +19,7 @@ namespace LaptopSimulator2015
{
#region Base
List<Minigame> levels = new List<Minigame>();
List<CaptchaGlitch> captchaGlitches = new List<CaptchaGlitch>();
SoundPlayer fans;
bool winShouldClose = false;
@ -101,9 +102,12 @@ namespace LaptopSimulator2015
Control[] controls = getControls(ignore: new List<Control> { minigamePanel }).ToArray();
for (int i = 0; i < controls.Length; i++)
controls[i].Paint += Control_Paint;
levels = Directory.GetFiles("Levels").Concat(Directory.GetFiles("Goals")).Where(s => Path.GetExtension(s) == ".dll").Select(s => Assembly.LoadFrom(s))
.SelectMany(s => s.GetTypes()).Where(p => typeof(Minigame).IsAssignableFrom(p) && p != typeof(Minigame) && p != typeof(Level) && p != typeof(Goal)).Distinct()
.Select(s => (Minigame)Activator.CreateInstance(s)).OrderBy(lv => lv.levelNumber).ToList();
IEnumerable<Type> tmp_types = Directory.GetFiles("Levels").Concat(Directory.GetFiles("Goals")).Concat(Directory.GetFiles("Glitches")).Where(s => Path.GetExtension(s) == ".dll").Select(s => Assembly.LoadFrom(s))
.SelectMany(s => s.GetTypes());
levels = tmp_types.Where(p => typeof(Minigame).IsAssignableFrom(p)).Distinct().Except(new Type[] { typeof(Minigame), typeof(Level), typeof(Goal) })
.Select(s => (Minigame)Activator.CreateInstance(s)).OrderBy(lv => lv.availableAfter).ToList();
captchaGlitches = tmp_types.Where(p => typeof(CaptchaGlitch).IsAssignableFrom(p)).Distinct().Except(new Type[] { typeof(CaptchaGlitch) })
.Select(s => (CaptchaGlitch)Activator.CreateInstance(s)).ToList();
for (int i = 0; i < levels.Count; i++)
{
levels[i].desktopIcon = new Panel();
@ -112,7 +116,7 @@ namespace LaptopSimulator2015
levels[i].desktopIcon.Size = new Size(50, 50);
levels[i].desktopIcon.BackColor = Color.FromArgb(128, 128, 255);
levels[i].desktopIcon.Name = "lvl" + i.ToString() + "_1";
levels[i].desktopIcon.Visible = levels[i].levelNumber <= Settings.level;
levels[i].desktopIcon.Visible = levels[i].availableAfter <= Settings.level;
tmp1.BackColor = Color.Blue;
tmp1.BackgroundImageLayout = ImageLayout.Stretch;
@ -176,7 +180,7 @@ namespace LaptopSimulator2015
else
{
base.BackColor = Color.FromArgb(100, 0, 255);
if (levels[levelInd].levelNumber == Settings.level)
if (levels[levelInd].availableAfter == Settings.level)
{
playDialog(goal.incompleteText);
incrementLevel();
@ -206,7 +210,7 @@ namespace LaptopSimulator2015
{
for (int i = 0; i < levels.Count; i++)
{
if ((!ignoreSub) && ((typeof(Goal).IsAssignableFrom(levels[i].GetType()) && levels[i].desktopIcon.Visible != levels[i].levelNumber <= Settings.level) || (levels[i].levelNumber == 0 && Settings.level == 0)))
if ((!ignoreSub) && ((typeof(Goal).IsAssignableFrom(levels[i].GetType()) && levels[i].desktopIcon.Visible != levels[i].availableAfter <= Settings.level) || (levels[i].availableAfter == 0 && Settings.level == 0)))
{
string[] at = ((Goal)levels[i]).availableText;
new Thread(() =>
@ -220,7 +224,7 @@ namespace LaptopSimulator2015
});
}).Start();
}
levels[i].desktopIcon.Visible = levels[i].levelNumber <= Settings.level;
levels[i].desktopIcon.Visible = levels[i].availableAfter <= Settings.level;
}
}
@ -243,8 +247,8 @@ namespace LaptopSimulator2015
{
int closest = int.MaxValue;
for (int i = 0; i < levels.Count; i++)
if (levels[i].levelNumber < closest & levels[i].levelNumber > levels[levelInd].levelNumber)
closest = levels[i].levelNumber;
if (levels[i].availableAfter < closest & levels[i].availableAfter > levels[levelInd].availableAfter)
closest = levels[i].availableAfter;
if (closest != int.MaxValue)
Settings.level = closest;
Settings.Save();
@ -378,7 +382,7 @@ namespace LaptopSimulator2015
break;
case 2:
LevelWindowHeaderExit_Click(sender, e);
if (levels[levelInd].levelNumber >= Settings.level)
if (levels[levelInd].availableAfter >= Settings.level)
{
incrementLevel();
mode = Mode.game;
@ -400,8 +404,20 @@ namespace LaptopSimulator2015
LevelWindowC1_Click(sender, new EventArgs());
break;
default:
if (strings.captchaLetters.ToCharArray().Contains(char.Parse(e.KeyChar.ToString().ToUpper())))
captchaBox.Text += e.KeyChar.ToString().ToUpper();
char tmp1 = char.ToUpper(e.KeyChar);
if (strings.captchaLetters.ToUpper().ToCharArray().Contains(tmp1))
{
string tmp2 = tmp1.ToString().ToUpper();
for (int i = 0; i < captchaGlitches.Count; i++)
{
captchaGlitches[i].currentLevel = Settings.level;
if (new Random().NextDouble() < captchaGlitches[i].chance)
{
captchaGlitches[i].apply(tmp1, ref tmp2, strings.captchaLetters.ToUpper().ToCharArray());
}
}
captchaBox.Text += tmp2;
}
break;
}
}

View File

@ -140,6 +140,10 @@ if not exist "$(TargetDir)Goals" mkdir "$(TargetDir)Goals"
if exist "$(SolutionDir)tmp1" copy $(SolutionDir)tmp1\* "$(TargetDir)Goals"
rmdir /s /q "$(SolutionDir)tmp1"
if not exist "$(TargetDir)Glitches" mkdir "$(TargetDir)Glitches"
if exist "$(SolutionDir)tmp2" copy $(SolutionDir)tmp2\* "$(TargetDir)Glitches"
rmdir /s /q "$(SolutionDir)tmp2"
del /q "$(TargetDir)save.xml"</PostBuildEvent>
</PropertyGroup>
<PropertyGroup>

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Base;
namespace LaptopSimulator2015.Glitches
{
public class Empty : CaptchaGlitch
{
public double chance { get { if (currentLevel < 1) return 0; return Math.Min(currentLevel / 8d, 0.8); } }
public int currentLevel { get; set; }
public void apply(char inputChar, ref string inputString, char[] captchaChars) => inputString.Remove(0, 1);
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("zz_CaptchaGlitch_Empty")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("zz_CaptchaGlitch_Empty")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("048bcc52-64ba-452b-a3f6-3683f9049afd")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{048BCC52-64BA-452B-A3F6-3683F9049AFD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>zz_CaptchaGlitch_Empty</RootNamespace>
<AssemblyName>zz_CaptchaGlitch_Empty</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Empty.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Base\Base.csproj">
<Project>{9a9561a7-dd5f-43a5-a3f5-a95f35da204d}</Project>
<Name>Base</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if not exist "$(SolutionDir)tmp2" mkdir "$(SolutionDir)tmp2"
copy "$(TargetPath)" "$(SolutionDir)tmp2"</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("zzz_ShuffleChars")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("zzz_ShuffleChars")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("5e10f1d0-0114-444a-b80e-975b5dc40d9f")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Base;
namespace LaptopSimulator2015.Glitches
{
public class ShuffleChars : CaptchaGlitch
{
public double chance { get { if (currentLevel < 1) return 0; return Math.Min(currentLevel / 8d, 0.8); } }
public int currentLevel { get; set; }
Random rnd = new Random();
public void apply(char inputChar, ref string inputString, char[] captchaChars) => inputString = string.Join("", inputString.ToCharArray().OrderBy(x => rnd.Next()));
}
}

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5E10F1D0-0114-444A-B80E-975B5DC40D9F}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>zzz_ShuffleChars</RootNamespace>
<AssemblyName>zzz_ShuffleChars</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ShuffleChars.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Base\Base.csproj">
<Project>{9a9561a7-dd5f-43a5-a3f5-a95f35da204d}</Project>
<Name>Base</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if not exist "$(SolutionDir)tmp2" mkdir "$(SolutionDir)tmp2"
copy "$(TargetPath)" "$(SolutionDir)tmp2"</PostBuildEvent>
</PropertyGroup>
</Project>