SadConsole 10.4.1-debug

This is a prerelease version of SadConsole.
There is a newer version of this package available.
See the version list below for details.
dotnet add package SadConsole --version 10.4.1-debug                
NuGet\Install-Package SadConsole -Version 10.4.1-debug                
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.4.1-debug" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SadConsole --version 10.4.1-debug                
#r "nuget: SadConsole, 10.4.1-debug"                
#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.4.1-debug&prerelease

// Install SadConsole as a Cake Tool
#tool nuget:?package=SadConsole&version=10.4.1-debug&prerelease                

SadConsole Logo

Chat on discord NuGet

SadConsole is a C#-based .NET cross-platform terminal, ascii, console, game engine. It simulates these types of programs and with it you can make ascii-styled games for modern platforms. At its heart, SadConsole is really a giant tile-based game engine. However, its object model is conceptually similar to a traditional console app.

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 SadConsole.Host.MonoGame and SadConsole.Host.SFML. When adding a host library to your project, you don't need to reference the base SadConsole package. If you use MonoGame, you'll also need to add a rendering NuGet package, such as MonoGame.Framework.DesktopGL.

SadConsole currently targets .NET 6, .NET 7, and .NET 8

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 of any size.
  • Uses graphical tile-based images to build out an ASCII-character font with support for more than 256 characters.
  • Fonts are simply sprite sheet tilesets tied to ascii codes, you can use full graphical tiles if you want.
  • Use more than one font file. However, each console is restricted to a single font.
  • Full GUI system for interactive controls such as list boxes, buttons, and text fields.
  • Importers for DOS ANSI files, TheDraw text fonts, RexPaint, and Playscii.
  • Animated consoles and instruction system to chain commands together.
  • String encoding system for colors and effects while printing.
  • Entity support for drawing thousands of movable objects on the screen
  • Translating images to text-blocks.
  • Keyboard and mouse support.
  • Highly customizable framework.
String display and parsing

string pic

GUI library

GUI library pic

Scrolling

scrolling console

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(true)
    ;

// 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(True)

        ' 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.4.0 (03/31/2024)

New versioning system. Versions for SadConsole will be in the following format: [all libs major].[all libs minor].[individual lib revision]

When patches come out for the indvidual libraries, the X in 10.0.X would increment. These would be like host updates, or the extended library, but not public facing changes in SadConsole itself. If SadConsole itself updates, the X in 10.X.0 would increment. All libraries would increment with SadConsole, and the individual lib revisions would reset to 0. The X on X.0.0 would indicate a major change to SadConsole with most likely a lot of bigger breaking changes.

That said, SadConsole is resetting all versions to v10.4.0 for this release. From now on, the new versioning system is in place.

  • [Breaking] A minor breaking change. If you were creating your own IConfigurator startup configs, the Run method's parameter changed from Game to GameHost.

  • [Core] Added Components.Overlay which displays a surface on top of an existing console/surface object as a top layer.

  • [Core] Bug: Font.OnFontChanged wasn't actually being called. It is now.

  • [Core] Added Coroutine NuGet library. This is included now with SadConsole.

  • [Core] Added CoroutineHandlerComponent which is a manager that you can add to an object and coroutines to.

  • [Core] Cursor.PrintCoroutine which prints as a coroutine, pausing at each character.

  • [Core] Instructions.DrawString updated to use Cursor.PrintCoroutine which lets it pretty print word breaks.

  • [Core] XML docs didn't genereate correctly for the last build.

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 is compatible.  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 (8)

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.5.0 326 12/7/2024
10.5.0-debug 101 12/7/2024
10.4.2 246 10/24/2024
10.4.2-debug 70 10/24/2024
10.4.1 1,247 6/13/2024
10.4.1-debug 151 6/13/2024
10.4.0 1,276 3/31/2024
10.4.0-debug 212 3/31/2024
10.0.3 486 3/14/2024
10.0.3-debug 259 3/14/2024
10.0.2 1,573 11/10/2023
10.0.2-debug 876 11/10/2023
10.0.1 753 11/10/2023
10.0.1-debug 721 11/10/2023
10.0.0 1,799 10/29/2023
10.0.0-debug 988 10/29/2023
10.0.0-beta3-debug 1,101 10/14/2023
10.0.0-beta3 1,067 10/14/2023
10.0.0-beta2-debug 1,050 10/11/2023
10.0.0-beta2 1,071 10/11/2023
10.0.0-beta1-debug 1,078 10/11/2023
10.0.0-beta1 1,117 10/11/2023
10.0.0-alpha4-debug 1,368 8/26/2023
10.0.0-alpha4 1,301 8/26/2023
10.0.0-alpha3-debug 1,212 8/26/2023
10.0.0-alpha3 1,229 8/26/2023
10.0.0-alpha2-debug 1,596 6/18/2023
10.0.0-alpha2 1,390 6/18/2023
10.0.0-alpha1-debug 1,490 6/4/2023
9.2.2 5,064 1/22/2022
9.2.2-debug 1,189 1/22/2022
9.2.1 2,447 1/4/2022
9.2.0 3,315 12/31/2021
9.2.0-debug 1,079 12/31/2021
9.1.1 5,397 8/7/2021
9.1.1-debug 1,270 8/7/2021
9.1.0 2,134 7/6/2021
9.1.0-debug 1,258 7/6/2021
9.0.0 4,630 6/6/2021
9.0.0-debug 1,259 6/6/2021
9.0.0-beta4 1,946 1/15/2021
9.0.0-beta3 2,054 12/19/2020
9.0.0-beta2 1,574 10/9/2020
9.0.0-beta1 1,695 8/1/2020
9.0.0-alpha9 1,706 7/25/2020
9.0.0-alpha8 1,396 7/13/2020
9.0.0-alpha7 1,734 7/11/2020
9.0.0-alpha6 1,767 5/28/2020
9.0.0-alpha5 1,562 5/26/2020
9.0.0-alpha4 1,408 5/1/2020
9.0.0-alpha3 1,604 5/1/2020
9.0.0-alpha2 1,497 3/14/2020
9.0.0-alpha1 1,921 1/26/2020
8.99.3 3,709 8/15/2020
8.99.3-debug 1,450 8/15/2020
8.99.2 1,779 7/14/2020
8.99.2-debug 1,410 7/14/2020
8.99.1 2,434 4/11/2020
8.99.1-debug 1,411 4/11/2020
8.99.0 2,471 11/27/2019
8.99.0-debug 1,407 11/27/2019
8.9.1 3,842 11/5/2019
8.9.1-debug 1,414 11/5/2019
8.9.0 2,178 9/7/2019 8.9.0 is deprecated because it is no longer maintained.
8.9.0-debug 1,599 9/7/2019 8.9.0-debug is deprecated because it is no longer maintained.
8.8.1 3,041 7/28/2019 8.8.1 is deprecated because it is no longer maintained.
8.8.1-debug 1,577 7/28/2019 8.8.1-debug is deprecated because it is no longer maintained.
8.8.0 2,358 7/27/2019 8.8.0 is deprecated because it is no longer maintained.
8.8.0-debug 1,517 7/27/2019 8.8.0-debug is deprecated because it is no longer maintained.
8.7.1 1,917 6/22/2019 8.7.1 is deprecated because it is no longer maintained.
8.7.1-debug 1,579 6/22/2019 8.7.1-debug is deprecated because it is no longer maintained.
8.7.0 1,764 6/22/2019 8.7.0 is deprecated because it is no longer maintained.
8.7.0-debug 1,598 6/22/2019 8.7.0-debug is deprecated because it is no longer maintained.
8.6.0 2,042 4/14/2019 8.6.0 is deprecated because it is no longer maintained.
8.6.0-debug 1,604 4/14/2019 8.6.0-debug is deprecated because it is no longer maintained.
8.5.0 1,937 4/2/2019 8.5.0 is deprecated because it is no longer maintained.
8.5.0-debug 1,630 4/2/2019 8.5.0-debug is deprecated because it is no longer maintained.
8.4.1 1,895 3/19/2019 8.4.1 is deprecated because it is no longer maintained.
8.4.1-debug 1,665 3/19/2019 8.4.1-debug is deprecated because it is no longer maintained.
8.4.0 1,756 3/17/2019 8.4.0 is deprecated because it is no longer maintained.
8.4.0-debug 1,598 3/17/2019 8.4.0-debug is deprecated because it is no longer maintained.
8.3.0 1,862 3/10/2019 8.3.0 is deprecated because it is no longer maintained.
8.3.0-debug 1,589 3/10/2019 8.3.0-debug is deprecated because it is no longer maintained.
8.2.0 1,900 3/2/2019 8.2.0 is deprecated because it is no longer maintained.
8.2.0-debug 1,671 3/2/2019 8.2.0-debug is deprecated because it is no longer maintained.
8.1.0 1,858 2/28/2019 8.1.0 is deprecated because it is no longer maintained.
8.1.0-debug 1,589 2/28/2019 8.1.0-debug is deprecated because it is no longer maintained.
8.0.0 1,958 2/24/2019 8.0.0 is deprecated because it is no longer maintained.
8.0.0-pre5 1,641 2/19/2019 8.0.0-pre5 is deprecated because it is no longer maintained.
8.0.0-pre4 1,672 1/31/2019 8.0.0-pre4 is deprecated because it is no longer maintained.
8.0.0-pre2 1,722 12/30/2018 8.0.0-pre2 is deprecated because it is no longer maintained.
8.0.0-pre1 1,689 12/30/2018 8.0.0-pre1 is deprecated because it is no longer maintained.
7.3.0 2,020 12/29/2018
7.2.0 2,112 11/20/2018 7.2.0 is deprecated because it is no longer maintained.
7.1.0 2,149 10/19/2018 7.1.0 is deprecated because it is no longer maintained.
7.0.4 2,096 9/8/2018 7.0.4 is deprecated because it is no longer maintained.
7.0.3 1,956 9/8/2018 7.0.3 is deprecated because it is no longer maintained.
7.0.2 2,312 8/31/2018 7.0.2 is deprecated because it is no longer maintained.
7.0.0 2,077 8/29/2018
7.0.0-pre1 1,780 8/22/2018 7.0.0-pre1 is deprecated because it is no longer maintained.
6.5.0 2,268 6/12/2018
6.4.11 2,313 4/13/2018 6.4.11 is deprecated because it is no longer maintained.
6.4.11-pre1 2,101 4/6/2018 6.4.11-pre1 is deprecated because it is no longer maintained.
6.4.10 2,269 3/18/2018 6.4.10 is deprecated because it is no longer maintained.
6.4.9 2,226 3/18/2018 6.4.9 is deprecated because it is no longer maintained.
6.4.8 2,193 3/18/2018 6.4.8 is deprecated because it is no longer maintained.
6.4.7 2,275 3/16/2018 6.4.7 is deprecated because it is no longer maintained.
6.4.6 2,474 2/14/2018 6.4.6 is deprecated because it is no longer maintained.
6.4.5 2,292 2/3/2018 6.4.5 is deprecated because it is no longer maintained.
6.4.3 2,272 11/14/2017 6.4.3 is deprecated because it is no longer maintained.
6.4.2 2,353 8/11/2017 6.4.2 is deprecated because it is no longer maintained.
6.4.1 2,178 8/10/2017 6.4.1 is deprecated because it is no longer maintained.
6.4.0 2,256 7/25/2017 6.4.0 is deprecated because it is no longer maintained.
6.3.0 2,273 6/9/2017 6.3.0 is deprecated because it is no longer maintained.
6.2.2 2,281 5/20/2017 6.2.2 is deprecated because it is no longer maintained.
6.2.1 2,392 4/23/2017 6.2.1 is deprecated because it is no longer maintained.
6.2.0 2,198 4/22/2017 6.2.0 is deprecated because it is no longer maintained.
6.1.4 2,195 4/17/2017 6.1.4 is deprecated because it is no longer maintained.
6.1.3 2,891 4/3/2017 6.1.3 is deprecated because it is no longer maintained.
6.1.2 2,163 4/1/2017 6.1.2 is deprecated because it is no longer maintained.
6.1.1 2,126 4/1/2017 6.1.1 is deprecated because it is no longer maintained.
6.1.0 2,148 3/31/2017 6.1.0 is deprecated because it is no longer maintained.
6.0.1 2,268 3/19/2017 6.0.1 is deprecated because it is no longer maintained.
6.0.0 2,072 3/18/2017

- When a Cursor is removed from a host object, the object is set to dirty now.
- Overlay component now calls update on the attached visual.
- Fix bug with DrawCircle not setting dirty.
- Fix bug with DrawBox not respecting ignore glyph setting.