SadConsole 9.2.1
See the version list below for details.
dotnet add package SadConsole --version 9.2.1
NuGet\Install-Package SadConsole -Version 9.2.1
<PackageReference Include="SadConsole" Version="9.2.1" />
paket add SadConsole --version 9.2.1
#r "nuget: SadConsole, 9.2.1"
// Install SadConsole as a Cake Addin #addin nuget:?package=SadConsole&version=9.2.1 // Install SadConsole as a Cake Tool #tool nuget:?package=SadConsole&version=9.2.1
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, .NET 5, .NET Core 3.1, and .NET Standard 2.1.
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.
- Windowing capabilities.
- Importers for DOS ANSI files, TheDraw text fonts, RexPaint, and Playscii.
- Animation support.
- Translating images to text-blocks.
- Highly customizable system.
String display and parsing
GUI library
Scrolling
Dependencies
SadConsole uses NuGet for its .NET dependencies:
- Newtonsoft.Json (>= 13.0.1)
- TheSadRogue.Primitives (>= 1.0.0)
Latest changes
v9.2.1 (01/04/2022)
(v9.2.1 fixes API documentation generation, all other changes are for 9.2.0)
Breaking changes
- [Breaking]
Print(int x, int y, ColoredGlyph glyph)
renamed toSetGlyph
. - [Breaking] Surface
SetEffect
method signatures have changed. - [Breaking] Renamed
Animation.ConvertImageFile
toAnimation.FromImage
. - [Breaking] Removed
ColorGradient
as this type is implemented in the SadRogue.Primitives library asGradient
.
Behavioral changes
- [Behavior]
ColoredString.String.Set
forced the string through the parser. This has now changed to use the characters directly. - [Behavior] All
ColoredString
contructors that used the(string)
overload used the string parser. This is no longer the case. - [Behavior]
ColoredString.IgnoreEffect
no longer defaults totrue
. - [Behavior] Using
Surface.Print
methods that used the string parser for fore/back/mirror will force those settings after the string was parsed and not before. - [Behavior] Surface
Clear
andFill
methods now clear the effect. - [Behavior]
Print
statements have been updated to all act the same.- New overload added that accepts decorators.
- Print clears the effect over the glyphs printed.
- Print that uses the string processor now processes the string and then sets the appropriate overloaded settings. For example, the overload that sets the foreground and background colors will process the string and then set the foreground and background of the entire string. This is a change from previous behavior which set the colors at the start of the string processor and allowed the processor to override the overload.
Host changes
- [MonoGame] Added DrawCallManager to allow injecting custom sprite batch rendering during final scene composition.
- [MonoGame/SFML] Fixed a bug that caused all surfaces to redraw all cells 100% of the time even if nothing changed. Should bring 300%-400% fps increase in surfaces that aren't changing content.
- [MonoGame/SFML] ITexture improvements for GetPixel/SetPixel; Demos on editing textures. (RychuP)
- [MonoGame/SFML] The game host now has a
FrameNumber
property that incremenets each frame cycle. - [SFML] Fixed
Settings.UnlimitedFPS
. This now works.
Other changes
- [Core] Fixed bug that caused redraws every frame even if nothing had changed.
- [Core] Cursor didn't respect
Cursor.UseStringParser
because of howColoredString
was always using the string parser. This is fixed now. - [Core] Cursor has a
Cursor.MouseClickRepositionHandlesMouse
property which sets the handled flag on mouse left-click for the cursor reposition. - [Core] Cursor updates the space character appearance while printing. Previously only the first character was used to determine the space's appearance.
- [Core]
DrawString
instruction overrides reset now, fixing a bug with having the instruction run more than once. - [Core]
Surface.ShiftLeft|Right|Up\Down
methods now move decorators. - [Core] New
Surface.ShiftRow
andSurface.ShiftColumn
methods added. (Chris3606) - [Core]
ColoredString.SetDecorators
added, to fit in withSetForeground
,SetBackground
, etc. - [Core] Renamed
EffectsChain
toEffectSet
and added newCodeEffect
type. - [Core] Effects use
TimeSpan
instead of double. - [Core] The
EffectsManager
used by a surface now works on cell instances, not cell indicies. - [Core] Resizing a surface without the
clear
parameter keeps existing effects instead of dropping them. - [Core]
AnimatedSurface.FromImage
helper added which converts image-based animations to an animated surface. (RychuP) - [Core] Added TheDraw font reader:
SadConsole.Readers.TheDrawFont
. Not a SadConsole Font. - [Core] Playscii support added in the
SadConsoles.Readers
namespace. (RychuP) - [Core] Entity renderer has a
RemoveAll
method to clear out all the entities. - [Core] Entity renderer now has a
SkipExistsChecks
property which can greatly improve performance when adding/removing entities (when you already have a lot of entities). - [Core] For entities, added
AnimatedAppearanceComponent
which can be added to an entity to animate the glyph like theAnimatedSurface
did for the old entity type. - [UI] Fix various minor bugs with controls.
- [UI]
Textbox
has more events related to text changing. - [UI]
Textbox
behaviors have changed slightly. For example,EditingText
event doesn't fire when the text ends up being the same prior to editing. - [UI]
ListBox
items can be inserted as aValueTuple<string, object>
which will use the string (can be aColoredString
) as the display text of the item. - [StringParser] Introduced new interface for string parsing:
StringParser.IParser
. - [StringParser] Moved current parse code to
StringParser.Default
. - [StringParser]
ColoredString.Parse
is obsolete and forwards toColoredString.Parser.Parse
. - [StringParser] String processor now has a decorators command:
[c:d glyph:mirror:color[:count]]
- [StringParser] String processor no longer hides effects until they're used. All processed strings will set a null effect that will be set on the cells that are printed.
- [ExtendedLib] Added ClassicConsoleKeyboardHandler and C64KeyboardHandler for cursor handlers.
- [ExtendedLib] Added MoveViewPortKeyboardHandler component.
- [ExtendedLib] Added
surface.PrintFadingText
extension method that prints text using theDrawString
instruction with an effect.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. 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 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- Newtonsoft.Json (>= 13.0.1)
- TheSadRogue.Primitives (>= 1.1.1)
-
.NETStandard 2.1
- Newtonsoft.Json (>= 13.0.1)
- TheSadRogue.Primitives (>= 1.1.1)
-
net5.0
- Newtonsoft.Json (>= 13.0.1)
- TheSadRogue.Primitives (>= 1.1.1)
-
net6.0
- Newtonsoft.Json (>= 13.0.1)
- TheSadRogue.Primitives (>= 1.1.1)
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 | 165 | 10/24/2024 | |
10.4.2-debug | 62 | 10/24/2024 | |
10.4.1 | 1,102 | 6/13/2024 | |
10.4.1-debug | 144 | 6/13/2024 | |
10.4.0 | 1,190 | 3/31/2024 | |
10.4.0-debug | 198 | 3/31/2024 | |
10.0.3 | 456 | 3/14/2024 | |
10.0.3-debug | 253 | 3/14/2024 | |
10.0.2 | 1,559 | 11/10/2023 | |
10.0.2-debug | 871 | 11/10/2023 | |
10.0.1 | 746 | 11/10/2023 | |
10.0.1-debug | 716 | 11/10/2023 | |
10.0.0 | 1,782 | 10/29/2023 | |
10.0.0-debug | 983 | 10/29/2023 | |
10.0.0-beta3-debug | 1,096 | 10/14/2023 | |
10.0.0-beta3 | 1,062 | 10/14/2023 | |
10.0.0-beta2-debug | 1,045 | 10/11/2023 | |
10.0.0-beta2 | 1,066 | 10/11/2023 | |
10.0.0-beta1-debug | 1,073 | 10/11/2023 | |
10.0.0-beta1 | 1,112 | 10/11/2023 | |
10.0.0-alpha4-debug | 1,363 | 8/26/2023 | |
10.0.0-alpha4 | 1,296 | 8/26/2023 | |
10.0.0-alpha3-debug | 1,207 | 8/26/2023 | |
10.0.0-alpha3 | 1,224 | 8/26/2023 | |
10.0.0-alpha2-debug | 1,591 | 6/18/2023 | |
10.0.0-alpha2 | 1,387 | 6/18/2023 | |
10.0.0-alpha1-debug | 1,487 | 6/4/2023 | |
9.2.2 | 5,046 | 1/22/2022 | |
9.2.2-debug | 1,184 | 1/22/2022 | |
9.2.1 | 2,442 | 1/4/2022 | |
9.2.0 | 3,306 | 12/31/2021 | |
9.2.0-debug | 1,076 | 12/31/2021 | |
9.1.1 | 5,391 | 8/7/2021 | |
9.1.1-debug | 1,267 | 8/7/2021 | |
9.1.0 | 2,129 | 7/6/2021 | |
9.1.0-debug | 1,253 | 7/6/2021 | |
9.0.0 | 4,622 | 6/6/2021 | |
9.0.0-debug | 1,239 | 6/6/2021 | |
9.0.0-beta4 | 1,943 | 1/15/2021 | |
9.0.0-beta3 | 2,051 | 12/19/2020 | |
9.0.0-beta2 | 1,569 | 10/9/2020 | |
9.0.0-beta1 | 1,692 | 8/1/2020 | |
9.0.0-alpha9 | 1,703 | 7/25/2020 | |
9.0.0-alpha8 | 1,393 | 7/13/2020 | |
9.0.0-alpha7 | 1,731 | 7/11/2020 | |
9.0.0-alpha6 | 1,746 | 5/28/2020 | |
9.0.0-alpha5 | 1,559 | 5/26/2020 | |
9.0.0-alpha4 | 1,405 | 5/1/2020 | |
9.0.0-alpha3 | 1,601 | 5/1/2020 | |
9.0.0-alpha2 | 1,494 | 3/14/2020 | |
9.0.0-alpha1 | 1,914 | 1/26/2020 | |
8.99.3 | 3,694 | 8/15/2020 | |
8.99.3-debug | 1,447 | 8/15/2020 | |
8.99.2 | 1,771 | 7/14/2020 | |
8.99.2-debug | 1,407 | 7/14/2020 | |
8.99.1 | 2,420 | 4/11/2020 | |
8.99.1-debug | 1,408 | 4/11/2020 | |
8.99.0 | 2,455 | 11/27/2019 | |
8.99.0-debug | 1,402 | 11/27/2019 | |
8.9.1 | 3,821 | 11/5/2019 | |
8.9.1-debug | 1,411 | 11/5/2019 | |
8.9.0 | 2,170 | 9/7/2019 | |
8.9.0-debug | 1,596 | 9/7/2019 | |
8.8.1 | 3,034 | 7/28/2019 | |
8.8.1-debug | 1,574 | 7/28/2019 | |
8.8.0 | 2,351 | 7/27/2019 | |
8.8.0-debug | 1,514 | 7/27/2019 | |
8.7.1 | 1,906 | 6/22/2019 | |
8.7.1-debug | 1,576 | 6/22/2019 | |
8.7.0 | 1,755 | 6/22/2019 | |
8.7.0-debug | 1,595 | 6/22/2019 | |
8.6.0 | 2,034 | 4/14/2019 | |
8.6.0-debug | 1,601 | 4/14/2019 | |
8.5.0 | 1,928 | 4/2/2019 | |
8.5.0-debug | 1,623 | 4/2/2019 | |
8.4.1 | 1,882 | 3/19/2019 | |
8.4.1-debug | 1,662 | 3/19/2019 | |
8.4.0 | 1,749 | 3/17/2019 | |
8.4.0-debug | 1,595 | 3/17/2019 | |
8.3.0 | 1,855 | 3/10/2019 | |
8.3.0-debug | 1,586 | 3/10/2019 | |
8.2.0 | 1,892 | 3/2/2019 | |
8.2.0-debug | 1,666 | 3/2/2019 | |
8.1.0 | 1,851 | 2/28/2019 | |
8.1.0-debug | 1,586 | 2/28/2019 | |
8.0.0 | 1,949 | 2/24/2019 | |
8.0.0-pre5 | 1,636 | 2/19/2019 | |
8.0.0-pre4 | 1,667 | 1/31/2019 | |
8.0.0-pre2 | 1,717 | 12/30/2018 | |
8.0.0-pre1 | 1,684 | 12/30/2018 | |
7.3.0 | 2,011 | 12/29/2018 | |
7.2.0 | 2,103 | 11/20/2018 | |
7.1.0 | 2,136 | 10/19/2018 | |
7.0.4 | 2,083 | 9/8/2018 | |
7.0.3 | 1,944 | 9/8/2018 | |
7.0.2 | 2,300 | 8/31/2018 | |
7.0.0 | 2,063 | 8/29/2018 | |
7.0.0-pre1 | 1,775 | 8/22/2018 | |
6.5.0 | 2,253 | 6/12/2018 | |
6.4.11 | 2,302 | 4/13/2018 | |
6.4.11-pre1 | 2,096 | 4/6/2018 | |
6.4.10 | 2,258 | 3/18/2018 | |
6.4.9 | 2,215 | 3/18/2018 | |
6.4.8 | 2,182 | 3/18/2018 | |
6.4.7 | 2,264 | 3/16/2018 | |
6.4.6 | 2,463 | 2/14/2018 | |
6.4.5 | 2,281 | 2/3/2018 | |
6.4.3 | 2,261 | 11/14/2017 | |
6.4.2 | 2,344 | 8/11/2017 | |
6.4.1 | 2,167 | 8/10/2017 | |
6.4.0 | 2,242 | 7/25/2017 | |
6.3.0 | 2,264 | 6/9/2017 | |
6.2.2 | 2,272 | 5/20/2017 | |
6.2.1 | 2,382 | 4/23/2017 | |
6.2.0 | 2,189 | 4/22/2017 | |
6.1.4 | 2,186 | 4/17/2017 | |
6.1.3 | 2,880 | 4/3/2017 | |
6.1.2 | 2,154 | 4/1/2017 | |
6.1.1 | 2,117 | 4/1/2017 | |
6.1.0 | 2,139 | 3/31/2017 | |
6.0.1 | 2,259 | 3/19/2017 | |
6.0.0 | 2,060 | 3/18/2017 |
9.2.0 contains lots of changes, including breaking changes. See NuGet or GitHub documentation for more information. 9.2.1 only fixes API documentation