SadConsole 10.0.3-debug
See the version list below for details.
dotnet add package SadConsole --version 10.0.3-debug
NuGet\Install-Package SadConsole -Version 10.0.3-debug
<PackageReference Include="SadConsole" Version="10.0.3-debug" />
paket add SadConsole --version 10.0.3-debug
#r "nuget: SadConsole, 10.0.3-debug"
// Install SadConsole as a Cake Addin #addin nuget:?package=SadConsole&version=10.0.3-debug&prerelease // Install SadConsole as a Cake Tool #tool nuget:?package=SadConsole&version=10.0.3-debug&prerelease
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
GUI library
Scrolling
Dependencies
SadConsole uses NuGet for its .NET dependencies:
- Newtonsoft.Json (>= 13.0.3)
- TheSadRogue.Primitives (>= 1.6.0)
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.0.3 (03/13/2024)
- [UI]
ScrollBar
has been completely rewritten. Minor breaking changes..Maximum
has been changed to.MaximumValue
.- Properties related to the style, such as
BarGlyph
, were moved to aStyle
property which controls how the control looks. Some property names have changed
- [UI]
NumberBox
improvements.- Rendering code split from
Textbox
. - Added
ShowUpDownButtons
to show up\down buttons. - Fixed bug with
UseMinMax
messing up the value and setting it back to 0 when the control loses focus.
- Rendering code split from
- [UI]
ControlBase.FindThemeFont
helper method added. - [UI] Minor bug fixed where captured controls (such as a scroll bar) wouldn't process the mouse if the control was parented to a composite control and the mouse left the parent area.
- [Core] Fixed
EffectSet
bug where the last effect wasn't applied. - [Core]
GlyphDefinition
has an init accessor now. - [Core] Added
ShapeParameter
docs andCreateFilled
supports ignoring the border. - [Core] Added
RootComponent
class that can be added toSadConsole.Game.Instance.RootComponents
. These components run logic before the keyboard and screen updates. - [Core] Splash screen collection is nulled after it runs, freeing memory.
- [Extended] Classic keyboard handler has
IsReady
flag now to control when it's active. - [Extended]
ColorPickerPopup
would crash on invalid textbox values. - [Extended]
GlyphSelectPopup
added. You can use this to display a list of glyphs in your font while debugging your app. - [Extended] Fixed a bug in the table control that prevented the scroll bars from being displayed.
- [Extended] Cleaned up code and enabled nullable.
- [Host - SFML] Fix bug where it was always running at unlimited FPS.
- [Host - MonoGame] Renderers can set backing texture usage.
- [Host - FNA] Fix bug where the screen clear wasn't working and would default to violet.
- [Host - All] Add
OptimizedScreenSurfaceRenderer
which renders. - [Host - All] Surface render step can accept an alternative surface with the
SetData
method.
Product | Versions 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. |
-
net6.0
- Newtonsoft.Json (>= 13.0.3)
- TheSadRogue.Primitives (>= 1.6.0-rc3)
-
net7.0
- Newtonsoft.Json (>= 13.0.3)
- TheSadRogue.Primitives (>= 1.6.0-rc3)
-
net8.0
- Newtonsoft.Json (>= 13.0.3)
- TheSadRogue.Primitives (>= 1.6.0-rc3)
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,787 | 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,460 | 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-debug | 1,598 | 9/7/2019 | |
8.8.1 | 3,036 | 7/28/2019 | |
8.8.1-debug | 1,576 | 7/28/2019 | |
8.8.0 | 2,353 | 7/27/2019 | |
8.8.0-debug | 1,516 | 7/27/2019 | |
8.7.1 | 1,908 | 6/22/2019 | |
8.7.1-debug | 1,578 | 6/22/2019 | |
8.7.0 | 1,757 | 6/22/2019 | |
8.7.0-debug | 1,597 | 6/22/2019 | |
8.6.0 | 2,036 | 4/14/2019 | |
8.6.0-debug | 1,603 | 4/14/2019 | |
8.5.0 | 1,930 | 4/2/2019 | |
8.5.0-debug | 1,625 | 4/2/2019 | |
8.4.1 | 1,884 | 3/19/2019 | |
8.4.1-debug | 1,664 | 3/19/2019 | |
8.4.0 | 1,751 | 3/17/2019 | |
8.4.0-debug | 1,597 | 3/17/2019 | |
8.3.0 | 1,857 | 3/10/2019 | |
8.3.0-debug | 1,588 | 3/10/2019 | |
8.2.0 | 1,894 | 3/2/2019 | |
8.2.0-debug | 1,668 | 3/2/2019 | |
8.1.0 | 1,853 | 2/28/2019 | |
8.1.0-debug | 1,588 | 2/28/2019 | |
8.0.0 | 1,953 | 2/24/2019 | |
8.0.0-pre5 | 1,640 | 2/19/2019 | |
8.0.0-pre4 | 1,671 | 1/31/2019 | |
8.0.0-pre2 | 1,721 | 12/30/2018 | |
8.0.0-pre1 | 1,688 | 12/30/2018 | |
7.3.0 | 2,015 | 12/29/2018 | |
7.2.0 | 2,107 | 11/20/2018 | |
7.1.0 | 2,140 | 10/19/2018 | |
7.0.4 | 2,087 | 9/8/2018 | |
7.0.3 | 1,948 | 9/8/2018 | |
7.0.2 | 2,304 | 8/31/2018 | |
7.0.0 | 2,067 | 8/29/2018 | |
7.0.0-pre1 | 1,779 | 8/22/2018 | |
6.5.0 | 2,258 | 6/12/2018 | |
6.4.11 | 2,306 | 4/13/2018 | |
6.4.11-pre1 | 2,100 | 4/6/2018 | |
6.4.10 | 2,262 | 3/18/2018 | |
6.4.9 | 2,219 | 3/18/2018 | |
6.4.8 | 2,186 | 3/18/2018 | |
6.4.7 | 2,268 | 3/16/2018 | |
6.4.6 | 2,467 | 2/14/2018 | |
6.4.5 | 2,285 | 2/3/2018 | |
6.4.3 | 2,265 | 11/14/2017 | |
6.4.2 | 2,348 | 8/11/2017 | |
6.4.1 | 2,171 | 8/10/2017 | |
6.4.0 | 2,248 | 7/25/2017 | |
6.3.0 | 2,268 | 6/9/2017 | |
6.2.2 | 2,276 | 5/20/2017 | |
6.2.1 | 2,387 | 4/23/2017 | |
6.2.0 | 2,193 | 4/22/2017 | |
6.1.4 | 2,190 | 4/17/2017 | |
6.1.3 | 2,886 | 4/3/2017 | |
6.1.2 | 2,158 | 4/1/2017 | |
6.1.1 | 2,121 | 4/1/2017 | |
6.1.0 | 2,143 | 3/31/2017 | |
6.0.1 | 2,263 | 3/19/2017 | |
6.0.0 | 2,064 | 3/18/2017 |
- ScrollBar has been completely rewritten. Minor breaking changes.
- NumberBox has been improved.
- Minor bug fixed where captured controls (such as a scroll bar) wouldn't process the mouse if the control was parented to a composite control and the mouse left the parent area.
- ControlBase.FindThemeFont helper method added.
- Fixed EffectSet bug where the last effect wasn't applied.
- GlyphDefinition has an init accessor now.
- Added ShapeParameter docs and CreateFilled supports ignoring the border.
- Added RootComponent class that can be added to SadConsole.Game.Instance.RootComponents. These components run logic before the keyboard and screen updates.
- Splash screen collection is nulled after it runs, freeing memory.