Recent Forum Posts
From categories:
page »

Getting the website ready is more about getting the answers to the quizzes and problems in the book ready to post. I don't put the actual book content on there.

I am the publisher in my situation (self published) so I don't need any specific lead time. It takes about 5 days to get a copy printed and shipped to me, which I'd like to have before pushing the "publish" button, so I hope I can get that done in the next week or so before moving over to the website.

March 7th really is coming up soon…

Sprint 3 Results

For the first time, I wasn't able to reach my goals. I did work on the book for at least 30 minutes each day, but fell short on the total hours goal and getting enough sleep. I also failed horribly at the gym goal.

It doesn't help that work got busier this week, and I had a few other distractions going on during the week that complicated things.

In terms of what got done, I mostly just make more progress on reviewing the book, cover to cover, but didn't finish the first pass yet. In all honesty, if the 2nd Edition served as the baseline for the amount of work that constitutes a "new edition" then I should be to version 7 or 8 or 10 by now. So much has changed. For the better, but still… it has been way more work than I ever intended it to be.

Sprint 4 Goals

I'm going to basically repeat my goals from last week, even though I fell short. I've been mostly hitting those goals in previous weeks, so I'm going to try to not read too much into one failed week. So here are the goals this time around:

1. Do at least 30 minutes of work on the book every single day. ░░░░░░░ (0/7)
2. Get a total of 20 hours of work during the week. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ (0/40)
3. Get to the gym at least 4 times this week. ░░░░ (0/4)
4. Get 8 hours of sleep every night. ░░░░░░░ (0/7)

Sprint 3 Results: Reducing Project Clutter

This sprint, I reworked Tunnel Lords’ solution into less projects by leveraging Portable Class Libraries (PCLs) and solved the content type reader issues I was having when reading in custom XML classes (though a hacky solution). I didn’t have as much time as in past weeks, so progress was slow, but that is part of working on hobby hours.

Understanding the new .Net Framework Ecosystem

I had a conversation with RB over Discord about the changes in the .Net framework in the last 2 years. I’ve been out of the loop with the development of .Net Core and .Net Standard. This week, I researched both of these topics and Portable Class Libraries (PCL).

To reduce the number of projects associated with Tunnel Lords, I started using PCLs that target both .Net Framework 4.6.2 and .Net Core for Universal Windows Programs (UWP). Last week, I was creating 2 of every library project in order to compile it both with .Net 4.6.2 (for the PC version) and .Net Core (for the UWP version). Using PCLs, Visual Studio allows for dynamically changing which version of .Net is compiled against in the library project based on the need of the final compiled application. This is great news because it cut out all the redundant projects within the Tunnel Lords solution.


Tunnel Lords' Projects

I believe .Net Standard class libraries would serve to solve the redundant projects issues just as PCLs solve them. According to this article (, Microsoft is actually moving away from PCLs in favor of .Net Standard. Even after reading through the article, I’m pretty fuzzy on what benefits are gained from .Net Standard over PCLs. I actually really liked that I can chose what platforms a PCL supports and then letting the compiler complain if I try and use features that are not supported on all the chosen platforms.

Even though Microsoft plans to move towards .Net Standard, there is no way to select a .Net standard class library template from Visual Studio 2015. Perhaps I’m just missing something?

Under the hood of MonoGame Content Builder (MGCB)

I learned the MonoGame content pipeline does not require referenced data classes to be contained in a third library that is referenced by both the content pipeline and the game project. This is a requirement for XNA games. Because of this, I was also able to merge the TunnelLordsData project with the TunnelLordsCore project. This removed the TunnelLordsData project.

I’m a big fan of the human readable text format of the contents of the Monogame.MGCB files.

I attempted to link the MonoGame content project between both the PC and the UWP Tunnel Lords projects. I had a lot of issues with the XML Content Type Reader not working for the UWP build of the game. I’m not sure why, but by creating a separate content project for the UWP version, I was able to get everything running in UWP. So, I currently must add content to both projects separately, which is not ideal. I may look into this some more in the future and try to solve it.

Launching Game in a Xaml window

TunnelLords contains an ISettingsSerializer for serializing and deserializing game settings. I was planning on passing the specific Serializer as a parameter to the Tunnel Lords game class constructor. Unfortunately, MonoGame’s method for creating the game within the Xaml window requires the Game class to have a parameterless constructor.

private readonly TunnelLords _game;
public GamePage()
    // Create the game.
    var launchArguments = string.Empty;
    _game = MonoGame.Framework.XamlGame<TunnelLords>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);

Error CS0310 'TunnelLords' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'XamlGame<T>'

Right now, the UWP version of Tunnel Lords is using a dummy SettingsSerializer while I work through an alternate way of passing the SettingsSerializer in. A workable solution would be to create a new Game class for each platform variation that inherits a base TunnelLordsGame class. This way I could set the Serializer in the constructor of each platform specific version of the game. I need to think through the implications of this solution a little more though.

I really want to pull the game’s settings before initializing everything within the game and loading content. This way, things like the game’s resolution are set first and don’t have to be re-updated after all the content is loaded and classes initialized.

Using the Development Brach of MonoGame

I started using the newest build of MonoGame. Mostly because the MonoGame website asks developers to do so.


When new fixes, features, or changes are merged into our development branch the build server generates new installers. It is extremely helpful to have the community install and use these builds when ever possible. We find these releases to be generally stable, but if you do run into a bug please report it to us.

Sprint 4 Goals

I have family visiting, so progress will be slow.

  • Implement UWP specific content (like the UWP splash screen and Windows 10 tile graphics)
  • Stretch Goal: Start testing touch screen code
  • Stretch Goal: Finish the dedicated instructions screen
  • Stretch Goal: Design code for saving/loading Tunnel Lords settings data on UWP

Alright well Update… My work project just turned from "learn visual basic code" to "Rewrite the entire website in C#".. so the project is slightly longer (another month or more) than it was before..

My new project is to build a Risk Calculator web app that will allow you to simulate dice rolls using special rules like (Add 1 to the higher Die) using a user friendly web interface.

Sprint 2 Results: Universal Windows Platform (UWP) Build of Tunnel Lords

This sprint was productive with completing a clean install of Windows 10 on my development computer, re-organizing Tunnel Lords to support multiple platform builds (UWP and generic Windows), getting a partial build of Tunnel Lords working within UWP, and completing some class refactoring.

Additionally, I spent a lot of time reading on Microsoft’s UWP documentation and started on programming a nice game tutorial screen for Turnnel Lords, which is still far from complete.

Windows 10

After convincing my wife that I needed a new computer, we ended up just upgrading my current development computer to Windows 10. While I'd really like a shiny new machine, this one has a lot of life left and still works fast and reliably for my uses. So we saved the money. I did a clean installation of the new operating system and had to reinstall everything on the new machine, which took a lot of time. As always, there were a few hiccups with the upgrade, but everything seems to be running smoothly now. After spending the last year talking about how I dislike the way Windows 10 looks/feels, it hasn't been too bad using. It isn't noticeably slower than Windows 7, so that is nice. I'm turning into that guy that just complains about anything new related to technology since I don't want to spend the brainpower to learn it… :)

Building Tunnel Lords for UWP

Once everything was compiling on Windows 10, I took a stab at getting Tunnel Lords running within the Universal Windows Platform (UWP) framework. I came across several snags.

At first, I didn't understand that UWP uses a different version of .Net framework than conventional desktop applications. It uses .Net Core, which actually compiles into native code as opposed to using the JIT (Just In Time) compiler. This should give it a nice performance boost, and I actually like this over using the JIT (I think?). The problem is that if I build my class libraries leveraging .Net 4.6.2 (or any .Net outside of .Net core), they cannot be used by the UWP build of Tunnel Lords. Besides compiling into native code for Windows, .Net core can be used on Linux and MacOS and is open source. Sounds very awesome indeed! .Net Core is updated in your projects through Nuget, which is a little different as well.

I ended up solving the mismatch between .Net Framework 4.6.2 and .Net Core by making a second project for each of the class libraries. There is now a GameUtilities project that compiles with .Net 4.6.2 and a GameUtilitiesUWP project that compiles for UWP using .Net Core. The UWP version just links to all the source code files and doesn't actually contain anything unique. This is basically how I handled compiling code for both the PC and Xbox 360 with XNA. The benefit of XNA was it would automatically link any files I created for the PC build to the Xbox project, saving time. I'm unsure how to make this hook happen on my own and am doing the work manually. This isn't a big deal though since Tunnel Lords is mature and I'm not adding many new code files anymore. It would have been a real chore earlier in development.

I managed to link the MonoGame content project to both the UWP and generic Windows build, so I only have to add new content in one place and MonoGame will handle building it for either environment. Not much different between the environments in this case, but it works the same for Linux or Android or MacOS. Nice work MonoGame!

I had LOTS of problems with the MonoGame UWP template project. I ended up using the C# UWP app project from Visual Studio, and then manually adding the references to MonoGame. This took a while since I've never integrated MonoGame (or XNA) into a project manually before. I even tried using the current non-stable build of MonoGame (ver 3.6), but it didn't work either. I think it is buggy, but there could also be some operator error since it is my first time working with UWP.

I have a MonoGame running within a UWP frame. Important step forward!

The current problem is MonoGame failing to properly read my custom XML data when calling Content.Load on the UWP build; When I read in XML data that only contains C# types (like Dictionary, string, int, etc), it works fine. When I try reading in my own custom data class (like Dictionary<string, MineData>), MonoGame throws an error. The content processor appears to be writing the XML content properly as .xnb files, but cannot read the .xnb file into the game. It throws the error on Content.Load. I think the problem is the ContentTypeReader is unable to understand my custom data types. However, I don't know why the non-UWP build of the game is able to read the XML data and the UWP version is unable. Perhaps I messed something up when adding the MonoGame references to the UWP project?

An exception of type 'Microsoft.Xna.Framework.Content.ContentLoadException' occurred in MonoGame.Framework.dll but was not handled in user code

Additional information: Could not find ContentTypeReader Type. Please ensure the name of the Assembly that contains the Type matches the assembly in the full type name: Microsoft.Xna.Framework.Content.DictionaryReader`2[[GameUtilities.Input.InputCommands, GameUtilities, Version=, Culture=neutral, PublicKeyToken=null],[GameUtilities.Input.KeyList, GameUtilities, Version=, Culture=neutral, PublicKeyToken=null]] (Microsoft.Xna.Framework.Content.DictionaryReader`2[[GameUtilities.Input.InputCommands, GameUtilities],[GameUtilities.Input.KeyList, GameUtilities]])

If unable to solve it soon, I'll probably post on the MonoGame website asking for help.

UWP .Net Framework compatibility issues

Beyond causing all the headache of creating multiple projects due to .Net Core, .Net Core does not contain everything available within .Net Framework 4.6.2.

  • The Console class does not exist on UWP. I was using Console to write output data when certain errors occured. I had to switch these to .Net Debug, but I think it will work close to the same.
  • The StringComparer class does not include the properties InvariantCulture or InvariantCultureIgnoreCase. I just switched to using OrdinalIgnoreCase when comparing strings instead of InvariantCultureIgnoreCase.
  • UWP does not contain the class System.Diagnostics.Process. I was using System.Diagnostics.Process.Start to open the player's browser to Itch.IO when they selected purchase game. This will be handled by a different mechanism on UWP anyways, so no loss here.

So while .Net core framework is missing some parts of the traditional .Net framework, the issues were easy to workaround.

GameUtilities Refactoring & Instructions Screen

I spent some time cleaning my class library code. Some of this code was written by me 2 years ago (or more) and it was written poorly. I can tell my coding style has matured over time. I spent time renaming a lot of the methods and cleaning poorly written algorithms. I noticed the poor code while building up the Instructions screen. I'm setting the instruction screen to show on first play through or when selected from the main menu. The screen still needs a lot of work in the coming weeks though.

Sprint 3

I have family visiting later this week and expect work to be busy before then. Progress will probably be slow.

  • Fix Content read error for custom types serialized as XML.
  • Read through more large chunks of the Universal Windows Program documentation related to Tunnel Lords
  • Stretch Goal: Start testing touch screen code
  • Stretch Goal: Finish the dedicated instructions screen
  • Stretch Goal: Design code for saving/loading Tunnel Lords settings data on UWP

Looking forward to seeing the screenshots!


Re: Sprint 2 by Brett208Brett208, 21 Feb 2017 00:41


When you say getting the website ready, where are you planning to host the new book content?

How much lead time do you need with your publisher if you are planning on getting the book released when VS2017 comes out? It seems like March 7th is just around the corner!

Congrats on meeting all your process goals again.


All goes well on my new project. I have actually managed to dedicate time to it, so that's good I guess?
I plan on uploading some screenshots within the next week. So, stay tuned!

Sprint 3 Goals

It's a breakout clone, not really sure what else I can add to it :D
Power-ups aren't there yet, so I can list that as a goal.
Score-keeping is also not a "thing" currently. Another item on the list.

Sprint 2 by Icecream-BurglarIcecream-Burglar, 20 Feb 2017 18:52

We've reached the half-way point of the competition!

My goals have been going along pretty well so far, and I was once again able to complete everything I had set out to do. (I blame that largely on process goals over target goals, because I actually fell way short of what I was hoping to complete this last week. Revising has taken way more effort than I originally planned.)

Sprint 2 Results

I don't have much in the way of an itemized list of things completed. I began doing some website work early in the week, and decided that the website stuff is probably lower priority because I can tweak it after the book launch if necessary. The rest of the week was spent revising the book. I wanted to get through two full passes of that, and so far am only to about page 158 of 427. Interestingly, the book was 439 pages a week ago. I've shed 12 pages without actually losing anything important. In fact, I've actually made the book stronger overall.

The chapters on using and making classes has actually gotten a heavy dose of revising, which is something it needed.

I'm actually frequently surprised by the size of "bugs" that weren't ever squashed and also weren't ever pointed out to me. 99% of the stuff in the book is correct and well written (IMHO) but I do keep stumbling into weird little things here and there.

Visual Studio 2017 has an official release date of March 7th. They've never really done that in the past, but I think it's like the 20th anniversary of Visual Studio or something. So I think I know what my target date is, and I should be good.

Sprint 2 Goals

In terms of what I'll be working on, it's largely the same stuff I listed last time:

  • Two full passes through the book, cover-to-cover, revising things.
  • Finish getting the website ready.

At this point, I think I can safely say I probably won't finish all of that by the end of next week, but I should be getting close.

I'm going to reuse my goals from last week, with one slight adjustment to change the number of gym workouts to 4 instead of 3. (It's actually warming up here, and I can run outside, which is way more fun for me. Plus I have a goal of hitting 1000 miles over the whole year, so I need to start pushing down on the gas pedal a little harder if I want to hit that.)

1. Do at least 30 minutes of work on the book every single day. ███████ (7/7)
2. Get a total of 20 hours of work during the week. ████████████████████████████████████░░░░ (36/40)
3. Get to the gym at least 3 times this week. █░░░ (1/4)
4. Get 8 hours of sleep every night. ██████░ (6/7)

Updated 10:30 pm Sunday.

Nice to see you making a forum thread, Swatacular!

Well it's already been two weeks since the start of the competition, and I haven't touched a line of code.

I've been working on Future Game for a few weeks (theory work, not much actual programming either) so I don't feel bad about leaving it for a bit.

My work is starting to involve more programming related topics, I am currently between training someone to take my place in IT Hardware for our company and starting doing web development. Mostly on my own time schedule.

So, while this isn't a common entry, I am going to enter my very small simple work project that I am assigned to.

Project Summary

The "ACD Corp" website contains details for hardware and software that specific employees "own" (For example. Matt Owns Office 2010 and Office 2016, you can look at the exact key's if you want.

To edit the database, you must have SQL Management Studio installed and manually add/edit/remove elements inside the specific tables.


  • Fill out this thread again.
Simply Work (Swat's Entry) by SwatacularSwatacular, 17 Feb 2017 17:05

I stopped working on The Eternal Flame one week ago because of the huge graphic. I normally don't like working on graphics but this is really too much for me.

I now started with a new project, a shipping company "simulator"/game.
On a map with many habours you start with one little container ship. The habours want you to carry their goods to other habours and you have to decide, which quests are most profitable for you with which ship. With more money you can buy more Ships in a Shipyard. The goods can only be carried by a specified type of ship (e.g. container ship or tankship).
To make everything more intresting I want to make a computer enemy.


The new game by TristanStTristanSt, 17 Feb 2017 07:39

Some personal stuff went on during this week and I got literally nothing done. So I've decided to make a game which I will be able to focus on time-dedication to the project.
This new game is surely nothing exciting, just a simple little project.
And now, for the reveal of the new project.
Drum roll
A breakout clone.

Tune in next week to see if I've done any work on it or not.

Sprint 1 by Icecream-BurglarIcecream-Burglar, 14 Feb 2017 15:10

Mouse/Touch Input Cues and Porting to MonoGame

This week I completed basic touch screen input controls and ported Tunnel Lords to MonoGame 3.5.1. I was pleased with how smoothly the transition to MonoGame went. While touch screen code has been added, it has not been tested since I do not currently have easy access to a touch screen device.

Mouse & Touch Input Cue Graphics

We generated a couple of icons to represent mouse and touch input. I’m pleased with how they turned out. We may take another pass improving them before the final release. While playing Tunnel Lords, the input cue graphics change based on which input device is selected as primary.


New Touch and Mouse Input Cues

We needed a way to steer the drillship with mouse and touch screen. I decided to separate the screen into multiple arcs radiating from the center. When pressing the mouse/touching a particular quadrant, the drillship moves in that direction. So you are limited to driving left/right, flying left-up, right-up, and straight up, and drilling down. I thought about adding full freedom of movement (IE change the x/y vector based on exact screen position), but this would give you a control advantage when using mouse/touch/joystick over the keyboard or arrows on a gamepad. (It would also require a lot more work adapting the current input logic.)

I added a HUD graphic showing control quadrants. It works, but could probably use some polishing. I had to modify the game’s camera to actually put the drillship in the center. Turns out I was drawing the drillship’s top left pixel in the center which looked goofy with the HUD graphic overlayed. The magenta arrows don't actually mean anything. The green lines are the ones that denote the changes in movement.


Mouse & Touch Control Angles HUD graphic

MonoGame Port

I ported Tunnel Lords to MonoGame 3.5.1 and .Net 4.6.2 this week. The port went very smoothly. I think there are some lingering issues with screen resolution resizes not working properly in MonoGame. I’m going to wait until getting the game running in a UWP frame before worrying too much about it though because I’m worried UWP will require specific and different code to affect screen resolution changes.

When transferring all the content to the MonoGame content manager, I was getting a cryptic content build error. After about an hour of fiddling, I realized that when copying all the files in I had copied in Content.mgcb itself into the content pipeline. So the content pipeline was trying to build itself, if that makes sense at all. After removing it, most everything built properly.

I found a bug where spritefonts in MonoGame will not render as Bold/Italics properly. I managed to work around the issue by either building the spritefonts in XNA and transferring over the XNB file. Adding bold/italics directly to the Font’s title XML element as opposed to the style XML element also fixed it for some fonts but not others. It looks like others have already reported the bug to MonoGame.

New Development Environment

I’m currently developing on a non-touch screen Windows 7 computer, which I am very comfortable with. Even though I would prefer not to upgrade, it doesn’t appear possible to compile the source code for use with UWP without using a Windows 10 computer. It would probably be smart to get a new Windows 10 computer that also has a touch screen. So I’m looking at buying a new machine. It probably needs to be purchased in the next week or so to keep from slowing development. I’m running out of tasks I can complete on Windows 7 only.

Sprint 2 Goals

  • Read through large chunks of the Universal Windows Program documentation related to Tunnel Lords
  • Reorganize projects to align with supporting more platforms (Windows generic vs UWP)
  • Stretch Goal: Start testing touch screen code
  • Stretch Goal: Create a dedicated instructions screen
  • Stretch Goal: Get a Windows 10 development computer setup
  • Stretch Goal: Design code for saving/loading Tunnel Lords settings data on UWP


Congratulations on making all three of your process goals!

I'm kind of sad that I already own your book so I won't get to see the changes in the new edition.

Sprint 1 Results

I was able to accomplish all of my goals and then some this week, both in terms of my process and also in terms of the specific tasks I had hoped to accomplish. Here's a summary of the tasks I accomplished:

  • Updated the Table of Contents
  • Fixed some issues with the images in my document.
  • Revised my What's Next chapter at the end of the book.
  • Moved some stuff about working with native code around.
  • Cleaned up to goto stuff (made it shorter and did just a bit more to discourage people from using it).
  • Made some adjustments to the tables in the back that were running into the margins.
  • Updated the index.
  • Updated the glossary.
  • Updated all screenshots to VS 2017.
  • Did some cleanup on a couple of places that reference CSV (no need to describe CSV twice in the book).
  • Began getting my list of tasks that I need for updating the website.

Sprint 2 Goals

The major things that are left to do are:

  • A couple of rounds of just going through the book cover-to-cover to make sure that it all has integrity as a whole.
  • Finish getting the website ready.

I think both of those things are doable in the next week. And VS 2017 is getting so close! It does feel good to be ahead of the curve this time though. I won't beat myself up if something gets in the way of completing those, or I discover something else that needs to be done though.

In terms of my process, I'm going to stick pretty close to my goals from last week:

1. Do at least 30 minutes of work on the book every single day. ███████ (7/7) Done!
2. Get a total of 20 hours of work during the week. ████████████████████████████████████████+██ (42/40) Done!
3. Get to the gym at least 3 times this week. ███ (3/3) Done!
4. Get 8 hours of sleep every night. ███████ (7/7) Done!

Update 9 pm Sunday.

Deurm (guest) 08 Feb 2017 21:09
in discussion Hidden / Per page discussions » MonoGame Texture Atlases

"so near the top of the file, find the line that says:"

Says what?

by Deurm (guest), 08 Feb 2017 21:09

Denied for Xbox One

Yesterday I received an email from ID@Xbox saying they denied Tunnel Lords entry on the Xbox One. Unfortunately, the email was generic and didn't give any clues as to why Tunnel Lords was denied. It did state the we could re-submit Tunnel Lords after it has been live in the Windows App store for at least 30 days. (I'm assuming they would reconsider allowing the game if it ranked well and downloaded well in the App Store.) I suspect it was denied because the graphics are not polished enough, but not really sure?

So, for now we are pressing forward with releasing on the Windows App store for PC and Windows tablet. If sales and reviews look great, perhaps we will make another bid at the Xbox One.

I was hoping things would go differently since Tunnel Lords has been ranked fairly well on the Xbox 360, at least in my opinion.

Well, I hope everyone else is having more success with their game development!

I spent the first weekend researching how everybody else procedurally creates dungeons. And I've decided to use none of the existing implementations and algorithm descriptions I've found/implemented over the weekend. Instead I'm going to attempt to write my own. The basic overview of how my system will work is as follows:

  • Randomly place rooms throughout the level.
  • Iterate over each room and connect it to another randomly selected room via tunnels.
    • Use a-star to pathfind from the source room to the target room.
    • Before running the a-star algorithm, place a random number of barriers (exact amount will probably be proportional to the level size) at random locations. In theory, this should cause the pathfinding algorithm to create a tunnel with some winding involved.
  • While creating the tunnels, mark random locations within each tunnel as a "tunnel merge point".
  • Connect one merge point to another randomly selected merge point via the same a-star algorithm and "barrier" implementation as previously described. In this pass however, the pathfinding algorithm should favor traversing through existing tunnels to aid in creating confusing intersections.

While this approach may not be efficient, it will be mine.
Also, while playing through one level the system should be pre-loading the next level in the background.

Sprint 0 by Icecream-BurglarIcecream-Burglar, 06 Feb 2017 18:19

I'm aiming to release a game this year. And this is the project that's going to make that happen.

I'm completely reworking my Empires of the Black Sun game. If you haven't seen it before, it's a space based RPG loosely based on space invaders:

Theoretically, there should be elements of Final Fantasy blended in. For instance, you would be able to travel through space freely, where you have random encounters. That's where the old school space invaders fight comes from. You would also have to gather resources for upgrades, be able to gain levels, and encounter level based enemies so every fight you get into matches your skill level.

It's an interesting idea, and I hope to bring it to fruition. We'll just have to see how things go. My current plan is to start with this competition and keep reworking it throughout 2017 until I have something I feel is worthy of putting out there.

I spent this weekend working through some issues with game play and scope, and worked up an outline of how things could work. There's a little more design work but I think I'm on a good path. Hopefully, by next weekend maybe I can get out some visuals.

Good Luck all, and it's great seeing every one making it happen!

"May the mercy of His Divine Shadow fall upon you." - Stanley H. Tweedle, Security Guard class IV, The League of 20,000 planets

Empires of the Black Sun by PiscesMikePiscesMike, 06 Feb 2017 05:02
page »