Saturday, June 14, 2025

Traveller System Generator Part 15 and More Corsairs

Traveller System Generator


I have no idea why I did not originally have what system a planet belongs to. That has been corrected, and now the system details page will show the planets for that system. And you can click on the planet name to get to that planet detail view. And I just realized - I need to be able to pick the system for the planet when creating them. But that should be pretty simple.
updated system details - now with planets!

My last update had directions on how to install the software - no idea if anyone has tried. It honestly does not do a whole lot and there are a lot better resources out there. But eventually I hope to get it to something useful!

I've not had a lot of time to get to this as I was visiting family last weekend, and sometimes a small break is good. But I am hoping that there will be at least semi-monthly updates as I do find this fun. Which makes me a lucky person - I actually enjoy my job and what I do. So much that I write code even in my free time! 

Corsairs Game Prep   

I think I have the theme I am going to run. First, one of the players is an ex-slave, so that will eventually feed into the game as only one of the 3 main political factions has slavery. Next, stealing inspired by the books, one of the Spire factions (which are more like city-states and independent of the larger island political groups which is from the original Corsairs books) has managed to get an ethericist able to control some of the huge beasts, and will be striking at both Spires and islands. The group, while initially attacking foreign ships, will hopefully build up a sense of the bigger picture. Which I still have to draw out, but I have a bit more than just the concept of the plan at any rate. But I have the opening chapter in my head at least though I need to write down the details. And I have a few big things plotted out, just need to wrap them up in a way that will work for the game.

I've got the backgrounds for most of the players, and we are stretching a bit beyond the original Corsairs. The world is now above jungles instead of the molten seas, and as I think I mentioned, basing a lot of this on some Jim Butcher books, the Spire series. This is the intro to the world:
Corsairs takes place on a world with floating islands above a ferocious jungle teeming with violence that few can survive. Amongst the islands are 2,000 meter floating cylinders made of spirestone. While the majority of the human population lives in the Spires, many still opt for the floating islands.
It is a world of flying sail ships, floating with the repellium that keeps the islands afloat and powered by the winds. Many political factions exist – the Spires are basically city-states. The islands tend to keep to themselves, trading with each other as well as the Spires.
You are privateers for the one of the island factions, the Greens. This is a small colection of islands almost in the middle between the three island factions.
It is a time of sword and canon. Gunpowder is available but seems unstable. However, the Spires also grow crystals that can harness etheric energies. These crystals can be used as weapons but tend to heat up fast. These same crystals are what makes the ships fly as well as the repellium: there is either a lift crystal or a huge chunk of repellium in the center of ships that let them float. Ethericists can also harness the etheric power of crystals directly, but this rewires the brain and most tend to develop odd quirks. The jungles below are full of dangers: it is where creatures live that can rip through an unprotected village in moments. The skies above are also dangerous – the spires and islands float in a relatively safe space between the two dangers.

And those Spires are actually made of crystaliron - this is a very post-apocalyptic world that is recovering. The players and their characters do not know this (unless they read this blog which they usually only do when I post game recaps) but that's okay. It may come around at some point and they can figure this out. I could even make it eventually a Traveller game - a system way out or maybe in the collapse of the Imperium. Probably not but the option is there to sneak into a Traveller game :)

And poking around, I found an artist that has some imagery I like that matches some of the ideas I have. His artstation link is here, and where these pictures come from: https://www.artstation.com/artwork/mgqX9






Related Posts for Traveller System Generator

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-1-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-2-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-3-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-4-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-5-and.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-6.html

Part 7 towards the bottom here

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-8.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-9.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-10.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-11-and.html

https://traveller-ct.blogspot.com/2025/05/game-switching-traveller-system.html

https://traveller-ct.blogspot.com/2025/05/traveller-generator-part-13-settings.html

https://traveller-ct.blogspot.com/2025/06/traveller-system-generator-part-14.html

Wednesday, June 11, 2025

Traveller System Generator Part 14 - An Attempt At Directions

Figured I'd try & put better directions on how to download and run the software that I've been working on. Especially as someone asked over on COTI. 

First, I'm using the MIT open-source license which I think is the most open. Basically, you can do anything you want with it. All the code is in GitHub here so you can click the various things there. To download a zip file of the code, you can select the "download zip" via the green Code button:

click the green <> Code button and at the bottom is download zip
This will download a zip file. Windows, Linux and Mac should all be able to open that file. It will be named "TravSystem-master.zip". Unzipping that file where you want, and you will have a top-level directory TravSystem-master.

In that directory there are several files you can ignore - I was playing with Docker so there are some files there. The other files:
  • License.txt = the license
  • readme.md = a markdown file. plain text, markdown is a lightweight formatting markup thing.
  • TravSystem.sln = the Visual Studio solution. Unless you have Visual Studio, it does not do anything for you. It is the configuration and stuff for that development environment.
  • .gitignore and .gitattributes = source control stuff.
Opening up that directory you have a bunch of folders, and several files. If you are running Windows, and using the File Explorer, you can right-click in there and open a terminal there. For a Mac you will need to open a bash shell there. For that, you just open a terminal (hmm, "just open a terminal" => hit the cmd + space bar to bring up the application launcher, start typing "terminal" and you should be able to open a terminal session. Not entirely sure you can do this directly in Finder as you can in File Explorer but that would be easier if so. Else you will need to get to where you unzipped that file. Note that for bash, the command "ls -al' will list the files, and "cd" is used to change directories. If you have questions, please leave comments and I can address those directly)
open a terminal session in the TravSystem directory

Then type in "dotnet run", and it *should* try to build the software then leave a bunch of stuff in the terminal - this is actual program running. BUT: it is a web site, and you will see in the console what port it is running on:
the web site is running!
Go to your browser of choice, and in the URL enter "localhost:5269" (note the " Now listening on: http://localhost:5269" which is just telling you that you have a service, in this case the Traveller software, listening at port 5269). 

Doing that you should now have the site up & running. It has already created your local SQLite DB in that directory.

On a Mac it should do the same - while I want to think it will attempt to download .NET if you don't already have it, I am not sure that it will. Hard to test on my Mac as I also write .NET code on there, so I installed that a while ago. If you need to install .NET 8 (which is what this runs), you can go here to download it: https://learn.microsoft.com/en-us/dotnet/core/install/macos. Pick .NET 8. Note this also works on Linux:

your OS of choice
Just closing the web site does NOT stop the application. On the terminal you started it on, use "ctl-C" to stop that process (same for Windows, Mac and Linux). 

Hopefully that helps!

Files in the TravSystem folder

This is a MVC (Model-View-Controller) type of web site. Though organized a bit differently as I tend to experiment sometimes, but should be basically recognizable to any web developer (and I still maintain I am not a web developer, but I may have to admit it sooner or later)

Controllers - this is the directory that has the various controllers. This tells the browser where to go basically. You can see that there are files for all the things we want to do: Home, TAtmosphereController.cs for all the atmosphere stuff, and so on. Each file (and they are text files so you can look around) are really pretty similar - some initialization stuff so we have database access, an index to show all the stuff, details for showing details of a specific thing and so forth. Each of those actions maps 1:1 to the views, which we'll get to in a bit.
Data is where we have data-related stuff. The Models directory has the models - the software representation of the things like law level, government and all that. The Repositories directory contains the repositories - the actual "read and get from the database" stuff. They are all pretty similar as well. We initialize them to be able to connect to the DB. The RepositoryContracts are the interfaces for the repositories. I am using dependency injection, so we need to basically be able to define a contract. If really curious I can point you to a better explanation than I can give. There is also the TravellerDbContext.cs file which basically sets up the database to be able to read the data. There is also a bunch of other things telling the system how the tables interact. 
Migrations contains the SQL scripts to update the DB. as I add and change things. we need to keep the database updated. I've set this up in the startup to automatically check. So if I make an update, and you want that, you will have to probably make a copy of the DB, save it, follow the stuff above, and stick the DB back in the TravSystem directory (Traveller.db). 
obj is the compiled code and all that and gets created when you run the software.
Properties just has a launchsettings.json file, telling how to launch the web site. I never mess with it - one of those auto-created things with .NET.
Services holds all the various services, cush as the TPlanetGenService.cs file that does the actual planet generation. 
Views contains all the views for the controllers listed above - this is where you can find the Index and Details views. A view is just a web page. Like this blog post. There is 1 folder per controller and is the actual web page. There is a Shared folder that has views common to all views. 
wwwroot contains the "public" files for the site, such as CSS, javascripts and stuff.

There are then a few files - the appsettings...json files are application settings - you can have settings per environment you run in but the one that you use is the plain appsettings.json file which really has nothing in it. Usually, you set up logging info and stuff like that. 

The big file that actually starts the site is the Program.cs file: this is where we add all those repositories and services to the dependency injection container so that they are available where we need them. It also sets up a few other things (controllers, the DB and any migrations it may need to run). There are several things I could probably remove as there is no authorization but it is boilerplate code.

Related Post

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-1-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-2-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-3-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-4-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-5-and.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-6.html

Part 7 towards the bottom here

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-8.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-9.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-10.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-11-and.html

https://traveller-ct.blogspot.com/2025/05/game-switching-traveller-system.html

https://traveller-ct.blogspot.com/2025/05/traveller-generator-part-13-settings.html

Sunday, June 01, 2025

Game Prep: Corsairs, Brass Rings

Going to be running 2 different games as we take a break from TFT (and a long-running game that we only managed to get together every 2-4 weeks, so it got more disjointed than I liked).

The Corsair game is going to take a different world, though, than the original game. Borrowing heavily from Butcher's Windlass series, we are replacing the Molten Sea with a vicious jungle that no one has ever survived in. Plus we have the Spires, large floating cities made generations ago from Sunstone by unknown people. We will still have floating islands and repellium, but I am also adding in the crystals that can aid in flight and be used as weapons as well. And as 1 player does not like to play humans, we will need to throw a few other species in there. The books have 2 others we can use readily: intelligent cats that, while lacking hands, are used as vermin hunters. They have their own society in the warrens of vents that transverse the spires, as well as living on the islands. There is also a warrior-type of breed that are stronger, faster and shorter lived than humans. Cat people of a sort. They are also looked down on by most people and many consider a second-class citizen. Not all. Mechanically, they have to use their 4d6 stat for "mighty as a lion" (aka strength) but will also get a 4d6 for the "nimble as a mountain lion" (aka dexterity) and the 2d6 for intelligence, dense as a sack of potatoes. They will also get a negative social reaction score sometimes, depending on who it is. The military respect them as powerful warriors, but the upper class mostly see them as servants only. 

I'll leave it open for more races - we did add a very Dwarven-style race last time. I'll share this link with the Saturday game group, and we can start figuring out what kind of character (and what species) the players want to play. And then get a bit of background. 

I also have the Windward game, so actually have a lot of flying ship minis if we need them. And yeah, I did get the big box expansion with all the stuff. Still have yet to play the game! But I obviously need to have some ship-to-ship chasing and combats! Of course, the ships do not have to be traditional galleons - I found some really interesting ships back when I ran the 1st game.

Wish I knew who to attribute these to!
Flying ships!

For Brass Rings I am going to continue along the 1st adventure. This time though our 1st 2 antagonists have gone missing in Endkeep Station! Dr. Crackers and Miss Meadowheart's parents are mounting a rescue operation. While I doubt the Circada Gang in their steam jalopy will attack the train again, I do have several ideas to expand that past Endkeep Station, and use some of the locations in the original book. I am also opening this up to any rodents as per the book. I've yet to get any character ideas from the Monday night gang but, as above, I'll send them the link to this post so they can have start to think about things a bit and figure out what sort of characters they want to play. There are "islands" out past the F Ring of Saturn that we can explore. Who knows, perhaps there is a library that connects to other libraries in this universe as well. Which reminds me - I need to add an Uncle Heimlich for Brass Rings!
draft map, with insert of Endkeep Station




Henrich of the Corsairs - do I need a different one as this next game is a different universe?


a possible Uncle Heimlich from Brass Rings. Perhaps Miss Meadowheart's uncle?

Tuesday, May 27, 2025

Traveller Generator Part 13 - Settings and Stellar Types

Figured we needed to have settings to control a few things. Some settings are for "generate a subsector" vs "generate a system" and there will be more as I get to writing that stuff. I am first doing the stuff I needed for the Book 6 system generation from an existing main world. And then I realized I needed all the stellar stuff. And that got tricky: the schema is simple enough. A star may have zero or more orbits, and they are I/H/O for inner, habitable and Outer. But getting the page to be able to add orbits on demand is beyond me; fortunately, AI is pretty good at that sort of thing.

v1 of settings - realize I think I can stick the base ranges in here

How stars work. though not sure I am really doing that right!


I may have to add more stuff as I read through things, and I managed some bad names so may correct those with a subsequent update as well. I need to have the range in the stellar types I just realized: i.e., B = 0-1, B = 2, M = 3-7 and so on. And figure out the DM - coming from a main world we add 4 to the roll So a new setting there as well.

And - why all the settings? So that the user can adjust things as they want. Book 6, while I like it, has (at least according to people who know these things) issues with what we think systems should be. And while true, it is not a simulation of reality but a game universe. Regardless, I'd like any potential users to be able to set things up the way they want. Plus, it means I am not including data with the software so any issues with copyright and all that I *think* are bypassed. But as I seriously doubt this will ever get used by anyone other than me, it is all okay. 

There are still some quirks with the edit for orbits (e.g., you can't actually edit once there!) and I want to add a dropdown for the type and reverse the order in that partial so you do the orbit 1st then the type. And preferably on a single line. But at least what one of my first bosses said, it has basic functionality!

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-1-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-2-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-3-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-4-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-5-and.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-6.html

Part 7 towards the bottom here

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-8.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-9.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-10.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-11-and.html

https://traveller-ct.blogspot.com/2025/05/game-switching-traveller-system.html

sorry - added after the fact and blogger is not great at moving images!

Sunday, May 25, 2025

Game Switching, Traveller System Generator Part 12

After mulling over the last session (and trying to stop feeling sorry for myself!) I talked with a couple of the players, and they are okay with me switching the Saturday game to a different game while the survivors heal up at Kegbeard's place. I do want to return there, but I want to figure out some better ideas for running TFT.

And I started some more prep for the eventual Monday night game, as we are returning to the world of Brass Rings. Hooking with one of the returning players from that 2-3 session game we ran. He played Bucky:

Dr. Crackers (who sent out Bucky Bridgewater & Miss Fay Meadowheart to find his nephew, Brie Parmesan) has gotten in touch with Bucky - Miss Meadowheart has gone missing! She had made copies of the plans and documents Brie found at the Forerunner location back at Endkeep Station, and was determined to see if there was more to that complex than what they found. That was more than two weeks ago. Miss Meadowheart's aging parents, Fromage and Sweety Meadowheart, have offered to finance her search and rescue. Apparently she is the sole heir to Meadowheart Farms, an expansive mini-goat farm near Tannis Falls and the Greate Tree. They have 200 washers up front to pay for supplies and tickets to where she was last known to go: Endkeep Station!
This is the Monday night game, and that game is pretty light rules-wise. I just need to loosen up (which is hard for me - I live and work a world with pretty strict rules on how things work. Why I prefer crunchy games, though one would think I would like to let loose of those restrictions. But anyway...) We've a bit more time before I have to start running it, so I do want to create some more maps and locations and a few things like that. One of the interesting game mechanics is before each game arc, they roll on a table for an objective. They get extra XP if they manage that goal. And I'll be adding XP for cheese puns in the game as the core game has a that light-hearted approach.

For the Saturday group, we're going to switch from TFT to Corsairs - sky pirates! My idea is that they are a pirate crew on a corsair, complete with a base of operations on some floating island. I have a large-scale world map I made for that game last time we played. The immediate goal is to be determined, but they are going to be sponsored by one of the kingdoms as a privateer, and perhaps some spying, espionage, destruction of enemy supplies. That sort of thing.
Tebou, World of Corsairs
Based loosely on the map in the book. I've also bought or received the updated character and ship rules. But I also need to re-read all that to get that straight in my head as well. Though sometimes I do feel my brain is getting full over the years. Or just slower. 
Classic Farside by Gary Larson

Miscellaneous

I link to the games I mention where I can - not to try and sell or anything as I have nothing to do with these games other than playing them. But figure some of you may want to review the games themselves. Plus, I like cross-referencing things - miss the old card catalogs from libraries. Yeah, odd segue, I know.

Traveller System Generator

Made a bit of progress on adding bases to systems. Issue is it adds but does not remove. But I'll get that eventually. Decided to leave that as-is for the moment and start on the "create a system from this main planet". Where the planet generator creates the main planet, but then we want to generate the system from that. We've got the bases now added (though never removed - yet!). Need to generate the sun, belts, gas giants and all the other planets. I'll be adding the PBG so that the user can control that part. As I have Memorial Day off (though on call, so need to check the computer once in a while) I may see if I can get a good start on that process tomorrow. Which means re-reading Book 6 to start with.
Bases! And now realize I need to add the planets it has, PBG. And make it pretty.

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-1-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-2-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-3-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-4-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-5-and.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-6.html

Part 7 towards the bottom here

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-8.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-9.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-10.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-11-and.html




Tuesday, May 20, 2025

TFT Game Recap 10: A Couple of Deaths

I feel I screwed up this session. The demon was a bit overpowered in some ways, and I don't think I actually ran the combat well. Of course, old school games can be very lethal. The battle started when they were ready, but it really only lasted a few rounds.

The dice gods hate me - I rolled great for the succubus and her attacks and damage, but horribly for the NPCs I ran attacking her. And my players did not do a whole lot better: first round, the elf gets killed with a backhanded blow that threw her across the dungeon against the wall. A bit of damage was done to the demon from a few of the players and NPCs but not enough to throw her off her game. The lizard man does get two attacks (he has a tail, and I just parlayed the double fire for missile weapon into his native tail should be a pretty well-earned ability). He managed a bit of damage, and the others were trying their best, but my NPCs missed. One even dropped her spear - I rolled a 17. Next round the succubus manages to hit Hexis, the lizard man, but not quite killing him. The halfling manages a blow last round with explosive slingshots, but this round she managed to hit the druid in the back - he was in the line of fire. The druid used his magic staff to smash the demon, and she took more damage but was still standing and fighting. A minor demon has 50 strength points, so it takes quite a bit to kill them. Next round the halfling manages to use her whip (yeah, really should have been a turn to switch weapons but we were playing loosely with the combat rules) and gets it around the demon. Who, while weakened from the continued attacks, is still stronger than the halfling. Marianne, the lapinfolk, helps and pulls and between the two of them they get the demon down on the ground. But she manages to get back up next turn and deals a killing blow to the lizardman Hexis. Deimos, the mage, has failed twice to cast a spell - mere sparks drift from his gestures. But this round he finally manages to bring the bear, who, next turn, leaps on and finally kills Silgith.

Sister Ishbarra at one point darted across to try to lay healing hands on Dawn, the downed Elf. The roll was not good enough, so the elf and lizardman are now dead player characters. This also brought her to 1 strength point left - she was really hurt before and has not had time to heal. There was not enough space to put her in the battle - that room was a bit confined. And the players do not want NPCs to die if it can be avoided - this group does not use them as meatshields!

I will note that killing the demon is note quite right: the demon will respawn in the Pits. But she loses stature, and it will be years before she can come back to this plane of existence.

There is a garrulous voice from above: "The door is open! Who are you and are you okay?" They meet Kegbeard, and bring their companions up with them. There is then a bit of a lore dump. They helped improve the corruption twice now: freeing Stubboon's ghost and sending Silgith back to the Pit has helped a lot. Kegbeard does have the previously mentioned healing baths, so Sister Ishbarra and the others, over the next few days, will soak and get healed back up. This is also a chance for the player who lived to use their XP a bit if they want to. Arachne is now freed, and she can knit more armor. And in fact, I did set up Kegbeard so he can enchant armor and weapons. The players will have a chance to improve their kit here.

Assuming the group wants to keep on playing, we'll bring in replacement PCs. Kegbeard has friends, and they may be heading to Woodfall. Though not for the reasons I was hoping to set up: I gave Silgith the curse spell and was going to do that. But things moved too fast. And we may keep playing or perhaps switch or try something else entirely. I feel that session did not get run well. Part of that is it has been quite a while that we have been playing but there are long gaps between sessions. Keeping invested in characters is hard when you only see them every 4-6 weeks. 

Could the demon have been handled differently? Sure, hindsight being what it is. A couple of the players came up with some good ideas, but we had no way to implement them. I think I should have been a bit more flexible about a few things: holy water came up and Sister Ishabarra is a cleric. But the rules in TFT are different. I should have allowed something like that. But another part of the issue was I was tired and having a hard time tracking my own game, let alone the 2 other games I am playing in. While I'd like to say my job is mentally taxing (well, I suppose it really is - today I had to figure out how to implement JWTs for security. I've used them before but merely from a consumer's view...and I'll hush now). Regardless, my attention span for gaming seems fractured lately. Both running and playing. I felt bad about the Monday night's game: I've not been asking questions and exploring the lore like I feel like I should be doing. I am just showing up (though my character, a mutant flying squirrel, is a lot of fun to play) I think sometimes. I just need to breath a bit and maybe clear my mind. Though I think I will take the GM's map and add a layer for contacts in the next day or so. 

Anyway. Need to also start prepping for a Brass Rings game. So yes - game prep never ends. I've a few weeks I think, and I've two main ideas that I can sort of get a broad outline on. I just need to quit getting distracted by things (which is why GigBee, the flying squirrel, is easy to play - he is constantly distracted. Mostly by food). And life, while mostly really good, is complicated in ways I never expected. Truth to be told I worry about a few personal family things and that has a major impact on everything. 

No update on the Traveller software: I got hung up when adding bases to the systems. A bit of a data update, and while the schema is easy, the UX side of things got complicated as this involved multiple tables. AI is helping, but I also figured I needed to not be on the computer 12 hours a day (and here I am, on the computer again!). But the bases will get added to the systems. I think the next step is the system generator: I'll add that to the planet details so that once you have a planet, there will be a link to generate the rest of the system based on Book 6, Scouts. And maybe the Mongoose book. And maybe the Perilous Void book as well. Think I'll add options...

Yeah, too much to do it seems. And sadly, a post without pictures. Will have to fix that.

Baby Bear thinks about destroying the table

GigBee got an acorn tank! Gift from fellow player in the game. 

Wednesday, May 14, 2025

Traveller System Generator Part 11 and more game prep

I know - maybe too many posts about the code. But as this blog was originally created for my Traveller software (which I think 3 people have used :) ) going with that is okay. Today I added the travel codes: while I've set up the classic Traveller codes, this also allows you to add any kind of travel code you want. Messing with color a bit, and while red and green look okay, the amber is a yellow that just does not show up well. 

Anyway - added the ability to attach a travel code to a planet. Though I think it needs to be at the system level maybe? Or can different planets in the same system have different codes? For example, could a gas giant be okay (Green) but the main planet in the system is Red? I think the classic leans to the whole system has that code. I can always move that later if necessary.

Travel codes

travel code with color!

show the code

bases!
Still need to add the ability to attach bases to a planet (or system! yeah - bases are definitely system-based!)

Anyway, it is a lot of fun doing this. And it is what I am currently doing for work (though it is work so not as fun a domain as Traveller!) 

Game Prep   

And I finally got some stats and a name for the succubus: Silgith. Oneof her spells is curse, and think I can use that on one character, and they will have to find some magic users in Woodfall as I have it, I have swamp terrain I've even painted, and it could be fun. 
Welcome to Woodfall

Painting

Almost done with 2 NPCs (well, 1 NPC and one animated mop) for the next session. And also painting some SF for a potential Space:1999 game. Though it will have to be season 1: I am trying to watch season 2 but it is painful. Budget cuts and some bad story lines makes season 2 an entirely different show than season 1.
Yorfeal Kegbeard and Mop

a cardinal is nesting next to my house - no need to paint!

Halt!

Monday, May 12, 2025

Traveller System Generator Part 10 - Trade Classifications and Checks Are Needed

Got the trade classification tables and service added. And while it seems to be working, I noticed an interesting issue in my world generator: it created a world of size 0 but an atmosphere of 6. Obviously, that is not right. Two ways of fixing it - just hardcode a check for that (and also cap the hydrographics at 1 if the atmosphere is 0) or figure out how to make that a configurable thing. After all - Larry Niven's The Integral Trees was basically an atmosphere around...err, something. I read it a long time ago. But there was no planet. For the moment I'll hardcode those checks and hopefully figure a way to configure additional setting rules. I am a firm believer in the user should be able to do what they want. 



Which is also why I've added TL to the trade classification system: you may want to be able to add trade codes for high-tech or something. And all this will also feed into the to-be-written trade generator. Which years ago, my 1st version of this actually grabbed all systems within the jump range of the ship and gave all the possible cargos. 20+ years ago...yeah, I keep rewriting the wheel so to speak. But the trade rules of course get impacted by the trade classifications. Worry about that later. 

Now, the architecture of the system is SOA - Service Oriented Architecture. With dependency injection, which is a bit confusing until you get your head wrapped around it. It can also make for some pretty complicated initializers. The planet controller, that bit of code that sends you to the correct planet view, needs to be able to access a lot of things. So that controller startup looks like this:


I am basically injecting a bunch of repositories and services that this controller needs. It seems like a lot, but each repository is responsible for 1 table, each service does 1 thing (though the utility service is more of a kitchen sink for things used across the application). While it makes some things a bit more complicated, each piece is like a LEGO piece: it only does one thing mostly. It makes maintenance easier as each piece is a lot smaller and easier to get your head wrapped around. Plus things are a lot more independent, so the code is more resilient as it is what they call "loosely couple". Anyway....a view of what goes into the sausage and probably not interesting to anyone other than, well, me. But I am okay with that!

The trade classification service is pretty simple: it takes in a world UWP (not the actual planet model but a simple UWP string like A123456-8). It goes through and makes sure the various attributes all fit. Code is in the repo here for that service. So, in theory I could write a UWP trade API to get the trade classifications from the UWP....which I think I will do. There should also be some validation on the input - think I have that in the previous software I played with. As it will break the application if the UWP is not correct at least in terms of the number of characters. I then inject that trade classification service into the planet controller so it has access to it, and to have the planet's trade classifications show up, I basically add a variable (a list of trade classifications) to pass along to the view:

 // GET: TPlanets/Details/5

 public async Task<IActionResult> Details(int? id)

 {

     if (id == null)

         return NotFound();

     var tPlanet = await _repo.GetByID(id.Value);

     if (tPlanet == null)

         return NotFound();

     ViewBag.TradeClassifications = await _tradeClassificationService.FindTradeClassifications(tPlanet.UWP);

     if (ViewBag.TradeClassifications == null)

         ViewBag.TradeClassifications = new List<TradeClassification>() { new TradeClassification() { Name = "none" } } ;

     return View(tPlanet);

 }

And then the view just cycles through those (the "tradeClassifications" variable gets set at the top of the view; these are cshtml files, basically HTML with c# added. Stuff with the @ are c# lines of code):

<h5>Trade Classifications</h5>

<div class="row"

    <ul>

        @if (tradeClassifications != null)

          foreach (var t in tradeClassifications)

            {

              <li>@t.Name</li>

            }

    </ul>

</div

Also, most things are asynchronous. While not particularly critical in this small system with a local SQLite DB attached, it is what I am used to. It keeps the main thread from getting bogged down. The awaits just say do this, and while the main thread can handle other requests, when the task we're waiting on is done the code starts back up there. I think it is like javascript's promises and a few other languages that handle background tasking as a "first citizen" sort of thing.

I also realize I want to add notes for the planets. I can either add a note field to the table or add a generic notes table and be able to attach to planets, systems, and subsectors. More stuff to think about. And may add associated trade classification records for a system for things like subsector capital. Not sure about that yet. But as it will impact trade rules, it should probably be yet another table (planet ID and trade classification ID, so planets can have many trade classifications beside those we can calculate. Yeah, writing software requires thinking about a lot of things and how they all link together. A lot like running an RPG!)

And had time tonight as gaming got cancelled - GM was sick :( I really should have poked a bit for the Saturday game coming up and start looking at the Brass Rings for part 2. I'm going to run that game for the Monday night group soon. But this was fun, even after a full day of doing basically doing the same thing at work)

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-1-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-2-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-3-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-4-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-5-and.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-6.html

Part 7 towards the bottom here

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-8.html

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-9.html

Saturday, May 10, 2025

Traveller System Generator Part 9, Gaming Woes, and Crafting Madness

 Got the basic "generate the main world based on Book 3" service completed and it seems to work. Basically, it will create the main world based on book 3. The only thing I do not like is that the service does have the Scout & Navy bases hardcoded in as far as the TL DM, and their chances of being in the system.

Of course, there are a few hundred steps to keep going! I need to decide if I want to generate the rest of the system based on Book 6 & the Mongoose World Builder's book or do the "generate a subsector" and basically, based on system density, see if each hex has a world or not. Or even add in the world explainer stuff on the previous Windows/Android app that never went anywhere. Eventually I'd like to figure out how to draw the maps like the TravellerMap, and since that is open source I think, I can probably get what I need from that to do it. Or cheat like I have in past and create the .sec files and use it's API to draw the maps. But: the core functionality is now in there. I'll probably play some more tonight with it as soon as I decide what I want to add next.


I need to stop spray painting Gatorade bottles. But now I have a scene from Space:1999 (and a partially painted Alphan). Not sure when that RPG will show up, but if we can play face to face I am going to have toys!

inspecting the atomic waste dumps
Today's TFT game was cancelled - too many people could not show up. Last week I was sick. As I've mentioned a few times, adulting is hard! And in some ways, I am kind of relieved: while I am ready to run, I do get a bit of social anxiety even among my friends that I've been playing with for years. But I was ready: even got an apple pie as a running joke in our text messaging from one friend is, when he gets overloaded, "I like pie." Normally, I try to bake something for the group as I like to bake. And it helps break the game afternoon up. I like to be a good host. I even vacuumed the basement. Which is one of the reasons I am glad they show up once a month - it is the only time I get motivated to cleaning the basement!

And a thought about theater of the mind versus maps and scenery. I was going to also make a small house from the Archon stuff assuming they get past the succubus. Complete with the bathtub of healing I mentioned before. Then realized that there was not going to be any fighting in the house (well, unless something else came up) so there was no real need to have the house set up. Just because I do have the toys and want to use them. But I may still build it just because. 

I also got some stats for the demon succubus, along with TFT magic that fits the various traditional views of what these creatures have. And it does fit in with the cult. Which I need to re-read up on as I think I named this demon, and I know I named the cult. But it's been 6+ months....

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-1-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-2-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-3-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-4-of.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-5-and.html

https://traveller-ct.blogspot.com/2025/04/traveller-system-generator-part-6.html

Part 7 towards the bottom here

https://traveller-ct.blogspot.com/2025/05/traveller-system-generator-part-8.html

Saturday, May 03, 2025

Traveller System Generator Part 8

Part 7 is buried in the previous post.

I've added a few more things, but the most important part is that I've finally started on the "generate a world" service. This service will follow book 3. Which oddly (and has been argued about forever) you actually roll the starport type before anything else. I'll probably eventually add options to allow you to determine starport based on other criteria but for v1, classic book 3 all the way!

Which introduced a problem or three. The system contents table you use to roll for the port, naval base, scout base and gas giant (and yeah, eventually I'll add a PBG field in when we get to the generate a system service).

To handle the ports, I've added a min and max roll so you can set the range. Now, I've no real checks for a 2-12 die roll check but that can be added easily enough to the model for automatic error checking. But I am thinking way down the road - what if your TU has more starport types, and you want a different range? Leaving that for future development but I always want to make things that users can tweak. The logic currently is just 2d6 so anything outside of that range won't be available. And if there are overlapping ranges it will pick one of those randomly. And of course, you can always change it after the fact. 

our low/high die rages

range is now in the index

first planet generated via the service!

The service seems to work even though it only sets 2 things right now for a new planet: puts in the "New Planet" name and randomly rolls up the starport. 
I've also added a utility service for dice rolls and stuff. Only 1 roll in there but it allows for how many dice and how many sides per die to roll. I probably need to run some tests to see just how well it fairs in generating random rolls but it is good enough for me.

    public int DieRoll(int side, int number)
    {
        int results = 0;
        for (int i = 0; i < number; i++)
        {
            results += _random.Next(1, side + 1);
        }
        return results;
    }