SadConsole 10.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package SadConsole --version 10.0.0                
NuGet\Install-Package SadConsole -Version 10.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SadConsole" Version="10.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SadConsole --version 10.0.0                
#r "nuget: SadConsole, 10.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SadConsole as a Cake Addin
#addin nuget:?package=SadConsole&version=10.0.0

// Install SadConsole as a Cake Tool
#tool nuget:?package=SadConsole&version=10.0.0                

SadConsole Logo

Chat on discord NuGet kandi X-Ray

SadConsole is a generic library that emulates old-school console game systems. It provides command prompt-style graphics where one or more tile textures are used to represent an ASCII character set. Console's are made up of a grid of cells, each of which can have its own foreground, background, glyph, and special effect applied to it.

While SadConsole is a generic library that doesn't provide any rendering capabilities, "host" libraries are provided that add renderers to SadConsole. The two hosts provided by this library are for MonoGame and SFML.

SadConsole currently targets .NET 6 and .NET 7

For the latest changes in this release, see the notes below

Features

Here are some of the features SadConsole supports:

  • Show any number of consoles.
  • Uses graphical tile-based images to build out an ASCII-character font with support for more than 256 characters.
  • Use more than one font file. However, each console is restricted to a single font.
  • Independently controlled entities for game objects.
  • Keyboard and Mouse support.
  • Text UI control framework with windowing support.
  • Importers for DOS ANSI files, TheDraw text fonts, RexPaint, and Playscii.
  • Animated consoles.
  • Translating images to text-blocks.
  • Highly customizable framework.
String display and parsing

string pic

GUI library

GUI library pic

Scrolling

scrolling console

Dependencies

SadConsole uses NuGet for its .NET dependencies:

Example startup code

using Console = SadConsole.Console;
using SadConsole;
using SadConsole.Configuration;
using SadRogue.Primitives;

Settings.WindowTitle = "SadConsole Examples";

// Configure how SadConsole starts up
Builder startup = new Builder()
    .SetScreenSize(90, 30)
    .UseDefaultConsole()
    .OnStart(Game_Started)
    .IsStartingScreenFocused(true)
    .ConfigureFonts((config, game) => config.UseBuiltinFontExtended())
    ;

// Setup the engine and start the game
Game.Create(startup);
Game.Instance.Run();
Game.Instance.Dispose();

void Game_Started(object? sender, GameHost host)
{
    ColoredGlyph boxBorder = new(Color.White, Color.Black, 178);
    ColoredGlyph boxFill = new(Color.White, Color.Black);

    Game.Instance.StartingConsole.FillWithRandomGarbage(255);
    Game.Instance.StartingConsole.DrawBox(new Rectangle(2, 2, 26, 5), ShapeParameters.CreateFilled(boxBorder, boxFill));
    Game.Instance.StartingConsole.Print(4, 4, "Welcome to SadConsole!");
}
Imports SadConsole
Imports Console = SadConsole.Console
Imports SadConsole.Configuration
Imports SadRogue.Primitives

Module Module1

    Sub Main()

        Dim startup As New Builder()

        ' Configure how SadConsole starts up
        startup.SetScreenSize(90, 30)
        startup.UseDefaultConsole()
        startup.OnStart(AddressOf Game_Started)
        startup.IsStartingScreenFocused(True)
        startup.ConfigureFonts(Sub(config As FontConfig, gameObject As Game)
                                   config.UseBuiltinFontExtended()
                               End Sub)

        ' Setup the engine and start the game
        SadConsole.Game.Create(startup)
        SadConsole.Game.Instance.Run()
        SadConsole.Game.Instance.Dispose()

    End Sub

    Sub Game_Started(sender As Object, host As GameHost)

        Dim boxBorder = New ColoredGlyph(Color.White, Color.Black, 178)
        Dim boxFill = New ColoredGlyph(Color.White, Color.Black)

        Game.Instance.StartingConsole.FillWithRandomGarbage(255)
        Game.Instance.StartingConsole.DrawBox(New Rectangle(2, 2, 26, 5), ShapeParameters.CreateFilled(boxBorder, boxFill))
        Game.Instance.StartingConsole.Print(4, 4, "Welcome to SadConsole!")

    End Sub

End Module

Latest changes v10.0.0 Beta 1 and 2 (10/11/2023)

  • OnStart startup config is no longer an Action but is now an event.
  • Startup config changed again from the last alpha. Types were renamed and rewritten to be extensible. It works the same way as before except that everything is in the SadConsole.Configuration namespace. You must import that namespace to enable the extension methods that build the config. The type to build the config is Builder.
  • Tabs orientated left/right didn't display the text properly.
  • ColoredGlyph was renamed to ColoredGlyphBase and a new ColoredGlyph that inherits from the base class was added.
  • Scrollbars didn't behave properly when in a CompositeControl.
  • ListBox mouse logic was improved to use an "ItemsArea" property that designates when the mouse is over the items list specifically.
  • StringParser supports variables. There's a dictionary that invokes a delegate which returns a value for the variable. So the value can be determined as the variable is used. See DemoStringParsing.cs in the sample template.
  • AnimatedScreenObject's weren't rendering correctly.
  • Decorators are no longer array's but rented from a list pool. Use the CellDecoratorHelpers class to manage them. SadConsole does its best to rent and return from the pool as you add or remove decorators.
  • Default font used the wrong name. It's been corrected from "IBM_16x8" to "IBM_8x16".
  • The ToggleSwitch control wasn't drawing properly.
  • NumberBox supports cultured number parsing.
  • CellDecorator, as a readonly struct, now declares the properties with "get; init;" which allows mutation with the the "with" keyword.
  • EntityManager.AlternativeFont added to support different fonts for entities.
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on SadConsole:

Package Downloads
SadConsole.Extended

A library of common classes that extend SadConsole with new controls, windows, and more.

SadConsole.Host.MonoGame

A graphics hosting library for SadConsole that targets MonoGame.

SadConsole.Host.SFML

A graphics hosting library for SadConsole that targets SFML.

SadConsole.GoRogueHelpers

A helper library for SadConsole games built with GoRogue.

TheSadRogue.Integration

An official integration library for using GoRogue and SadConsole together to create a roguelike.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on SadConsole:

Repository Stars
Thraka/SadConsole
A .NET ascii/ansi console engine written in C# for MonoGame and XNA. Create your own text roguelike (or other) games!
Version Downloads Last updated
10.4.2 193 10/24/2024
10.4.2-debug 66 10/24/2024
10.4.1 1,137 6/13/2024
10.4.1-debug 148 6/13/2024
10.4.0 1,208 3/31/2024
10.4.0-debug 202 3/31/2024
10.0.3 460 3/14/2024
10.0.3-debug 257 3/14/2024
10.0.2 1,564 11/10/2023
10.0.2-debug 875 11/10/2023
10.0.1 750 11/10/2023
10.0.1-debug 720 11/10/2023
10.0.0 1,788 10/29/2023
10.0.0-debug 987 10/29/2023
10.0.0-beta3-debug 1,100 10/14/2023
10.0.0-beta3 1,066 10/14/2023
10.0.0-beta2-debug 1,049 10/11/2023
10.0.0-beta2 1,070 10/11/2023
10.0.0-beta1-debug 1,077 10/11/2023
10.0.0-beta1 1,116 10/11/2023
10.0.0-alpha4-debug 1,367 8/26/2023
10.0.0-alpha4 1,300 8/26/2023
10.0.0-alpha3-debug 1,211 8/26/2023
10.0.0-alpha3 1,228 8/26/2023
10.0.0-alpha2-debug 1,595 6/18/2023
10.0.0-alpha2 1,389 6/18/2023
10.0.0-alpha1-debug 1,489 6/4/2023
9.2.2 5,053 1/22/2022
9.2.2-debug 1,186 1/22/2022
9.2.1 2,444 1/4/2022
9.2.0 3,308 12/31/2021
9.2.0-debug 1,078 12/31/2021
9.1.1 5,394 8/7/2021
9.1.1-debug 1,269 8/7/2021
9.1.0 2,131 7/6/2021
9.1.0-debug 1,257 7/6/2021
9.0.0 4,625 6/6/2021
9.0.0-debug 1,241 6/6/2021
9.0.0-beta4 1,945 1/15/2021
9.0.0-beta3 2,053 12/19/2020
9.0.0-beta2 1,573 10/9/2020
9.0.0-beta1 1,694 8/1/2020
9.0.0-alpha9 1,705 7/25/2020
9.0.0-alpha8 1,395 7/13/2020
9.0.0-alpha7 1,733 7/11/2020
9.0.0-alpha6 1,748 5/28/2020
9.0.0-alpha5 1,561 5/26/2020
9.0.0-alpha4 1,407 5/1/2020
9.0.0-alpha3 1,603 5/1/2020
9.0.0-alpha2 1,496 3/14/2020
9.0.0-alpha1 1,916 1/26/2020
8.99.3 3,701 8/15/2020
8.99.3-debug 1,449 8/15/2020
8.99.2 1,774 7/14/2020
8.99.2-debug 1,409 7/14/2020
8.99.1 2,426 4/11/2020
8.99.1-debug 1,410 4/11/2020
8.99.0 2,461 11/27/2019
8.99.0-debug 1,404 11/27/2019
8.9.1 3,829 11/5/2019
8.9.1-debug 1,413 11/5/2019
8.9.0 2,172 9/7/2019 8.9.0 is deprecated because it is no longer maintained.
8.9.0-debug 1,598 9/7/2019 8.9.0-debug is deprecated because it is no longer maintained.
8.8.1 3,036 7/28/2019 8.8.1 is deprecated because it is no longer maintained.
8.8.1-debug 1,576 7/28/2019 8.8.1-debug is deprecated because it is no longer maintained.
8.8.0 2,353 7/27/2019 8.8.0 is deprecated because it is no longer maintained.
8.8.0-debug 1,516 7/27/2019 8.8.0-debug is deprecated because it is no longer maintained.
8.7.1 1,908 6/22/2019 8.7.1 is deprecated because it is no longer maintained.
8.7.1-debug 1,578 6/22/2019 8.7.1-debug is deprecated because it is no longer maintained.
8.7.0 1,757 6/22/2019 8.7.0 is deprecated because it is no longer maintained.
8.7.0-debug 1,597 6/22/2019 8.7.0-debug is deprecated because it is no longer maintained.
8.6.0 2,036 4/14/2019 8.6.0 is deprecated because it is no longer maintained.
8.6.0-debug 1,603 4/14/2019 8.6.0-debug is deprecated because it is no longer maintained.
8.5.0 1,930 4/2/2019 8.5.0 is deprecated because it is no longer maintained.
8.5.0-debug 1,625 4/2/2019 8.5.0-debug is deprecated because it is no longer maintained.
8.4.1 1,884 3/19/2019 8.4.1 is deprecated because it is no longer maintained.
8.4.1-debug 1,664 3/19/2019 8.4.1-debug is deprecated because it is no longer maintained.
8.4.0 1,751 3/17/2019 8.4.0 is deprecated because it is no longer maintained.
8.4.0-debug 1,597 3/17/2019 8.4.0-debug is deprecated because it is no longer maintained.
8.3.0 1,857 3/10/2019 8.3.0 is deprecated because it is no longer maintained.
8.3.0-debug 1,588 3/10/2019 8.3.0-debug is deprecated because it is no longer maintained.
8.2.0 1,894 3/2/2019 8.2.0 is deprecated because it is no longer maintained.
8.2.0-debug 1,668 3/2/2019 8.2.0-debug is deprecated because it is no longer maintained.
8.1.0 1,853 2/28/2019 8.1.0 is deprecated because it is no longer maintained.
8.1.0-debug 1,588 2/28/2019 8.1.0-debug is deprecated because it is no longer maintained.
8.0.0 1,953 2/24/2019 8.0.0 is deprecated because it is no longer maintained.
8.0.0-pre5 1,640 2/19/2019 8.0.0-pre5 is deprecated because it is no longer maintained.
8.0.0-pre4 1,671 1/31/2019 8.0.0-pre4 is deprecated because it is no longer maintained.
8.0.0-pre2 1,721 12/30/2018 8.0.0-pre2 is deprecated because it is no longer maintained.
8.0.0-pre1 1,688 12/30/2018 8.0.0-pre1 is deprecated because it is no longer maintained.
7.3.0 2,015 12/29/2018
7.2.0 2,107 11/20/2018 7.2.0 is deprecated because it is no longer maintained.
7.1.0 2,140 10/19/2018 7.1.0 is deprecated because it is no longer maintained.
7.0.4 2,087 9/8/2018 7.0.4 is deprecated because it is no longer maintained.
7.0.3 1,948 9/8/2018 7.0.3 is deprecated because it is no longer maintained.
7.0.2 2,304 8/31/2018 7.0.2 is deprecated because it is no longer maintained.
7.0.0 2,067 8/29/2018
7.0.0-pre1 1,779 8/22/2018 7.0.0-pre1 is deprecated because it is no longer maintained.
6.5.0 2,258 6/12/2018
6.4.11 2,306 4/13/2018 6.4.11 is deprecated because it is no longer maintained.
6.4.11-pre1 2,100 4/6/2018 6.4.11-pre1 is deprecated because it is no longer maintained.
6.4.10 2,262 3/18/2018 6.4.10 is deprecated because it is no longer maintained.
6.4.9 2,219 3/18/2018 6.4.9 is deprecated because it is no longer maintained.
6.4.8 2,186 3/18/2018 6.4.8 is deprecated because it is no longer maintained.
6.4.7 2,268 3/16/2018 6.4.7 is deprecated because it is no longer maintained.
6.4.6 2,467 2/14/2018 6.4.6 is deprecated because it is no longer maintained.
6.4.5 2,285 2/3/2018 6.4.5 is deprecated because it is no longer maintained.
6.4.3 2,265 11/14/2017 6.4.3 is deprecated because it is no longer maintained.
6.4.2 2,348 8/11/2017 6.4.2 is deprecated because it is no longer maintained.
6.4.1 2,171 8/10/2017 6.4.1 is deprecated because it is no longer maintained.
6.4.0 2,248 7/25/2017 6.4.0 is deprecated because it is no longer maintained.
6.3.0 2,268 6/9/2017 6.3.0 is deprecated because it is no longer maintained.
6.2.2 2,276 5/20/2017 6.2.2 is deprecated because it is no longer maintained.
6.2.1 2,387 4/23/2017 6.2.1 is deprecated because it is no longer maintained.
6.2.0 2,193 4/22/2017 6.2.0 is deprecated because it is no longer maintained.
6.1.4 2,190 4/17/2017 6.1.4 is deprecated because it is no longer maintained.
6.1.3 2,886 4/3/2017 6.1.3 is deprecated because it is no longer maintained.
6.1.2 2,158 4/1/2017 6.1.2 is deprecated because it is no longer maintained.
6.1.1 2,121 4/1/2017 6.1.1 is deprecated because it is no longer maintained.
6.1.0 2,143 3/31/2017 6.1.0 is deprecated because it is no longer maintained.
6.0.1 2,263 3/19/2017 6.0.1 is deprecated because it is no longer maintained.
6.0.0 2,064 3/18/2017

- OnStart startup config is no longer an Action but is now an event.
- Startup config changed again from the last alpha. Types were renamed and rewritten to be extensible. It works the same way as before except that everything is in the SadConsole.Configuration namespace. You must import that namespace to enable the extension methods that build the config. The type to build the config is Builder.
- Tabs orientated left/right didn't display the text properly.
- ColoredGlyph was renamed to ColoredGlyphBase and a new ColoredGlyph that inherits from the base class was added.
- Scrollbars didn't behave properly when in a CompositeControl.
- ListBox mouse logic was improved to use an "ItemsArea" property that designates when the mouse is over the items list specifically.
- StringParser supports variables. There's a dictionary that invokes a delegate which returns a value for the variable. So the value can be determined as the variable is used. See DemoStringParsing.cs in the sample template.
- AnimatedScreenObject's weren't rendering correctly.
- Decorators are no longer array's but rented from a list pool. Use the CellDecoratorHelpers class to manage them. SadConsole does its best to rent and return from the pool as you add or remove decorators.
- Default font used the wrong name. It's been corrected from "IBM_16x8" to "IBM_8x16".
- The ToggleSwitch control wasn't drawing properly.
- NumberBox supports cultured number parsing.
- CellDecorator, as a readonly struct, now declares the properties with "get; init;" which allows mutation with the the "with" keyword.
- EntityManager.AlternativeFont added to support different fonts for entities.