MountainHome - DwarfFortress Package ManagerOverviewConceptThe reason I started working on this project is due to the frequent requests for various graphics/mods/utilities to be packaged into the various, and excellent, Starter Packs that are out there. Unfortunately for the maintainers of those packs, adding more functionality to accommodate specific user requests comes at an increased file size for the users who are uninterested in the additions. For example, with PeridexisErrant's Starter Pack, I personally find myself only using DF, DFHack, Phoebus's Graphics, a handful of scripts/plug-ins, DT and QuickFort. All of the other tools and graphics he packages are things I never bother with because they don't fit my interests and play style, yet I download them every time SP updates. This project is intended to provide a way to break that mould.
For UsersFor Windows users, I'm creating a client that lets them manage what tools they use and automatically flags things that are ready to update. It is meant as the "where do I go next?" for people hooked on the game with the Starter Packs who want to expand their horizons without getting continually lost in the rabbit holes of forum threads.
For DevelopersFor developers, I'm trying to re-architect the dependencies between different versions of utilities, graphics, mods, and other 3rd party inventions. The diagram below shows the models I'm using and their relationships, but essentially a
Component, such as DF itself, DwarfTherapist, DFHack, a graphics pack, or any packable item, will have meta information such as forum/wiki links, support information, and of course a title/description. Each specific version of that
Component is a
Release which has a download URL and a list of
Mirrors and
Dependencies. A
Dependency is a specification of a
Component and an optional Minimum and Maximum version of that
Component that is required to run the given
Release. For example, the DFHack
Component's latest
Release is version 0.40.13-r1. It would have a
Dependency on the DwarfFortress
Component with a minimum AND maximum version of 0.40.13.
What this does is let me flag both
what can upgrade and
what the impact is if you upgrade a
Component. For example, when DwarfFortress has a 0.40.14
Release, clients will be notified of this. If they use the Windows client I'm writing to upgrade, they'll be warned that the DFHack
Component will be disabled due to incompatibility. This lets the user decide whether to push forward without DFHack, or wait. Let's assume the user waits - once DFHack has a
Release compatible with DwarfFortress 0.40.14, if they were to upgrade DwarfFortress, they would also be prompted to update DFHack as well, potentially with settings in the background to automatically upgrade compatible
ComponentsWhat this does for you is provide an API with all of this information.
http://mountainhome.azurewebsites.net/help lists (and will have better documentation in coming days) what calls can be made and provides some information on the data structures used. All responses are JSON, so it should be easy to incorporate into any client you want - I just ask that you let me know that you plan to leverage this so I can keep you in the loop if I make any breaking changes.
MountainHome SoftwareWebsiteThe project's website, while in development, is located at
http://mountainhome.azurewebsites.net. It does not do anything flashy except provide a database of the Components and Releases discussed above. Anyone can view this information, but you need to be a SuperUser to edit it. Please PM me if you are interested in helping populate this database, as right now only DwarfFortress itself is listed.
Windows ClientThe current version of the Windows Client is available here:
http://dffd.wimbli.com/file.php?id=9775 I need to do some additional write-up on how to use it, but the interface itself is very barebones right now. In summary:
* On first run, it will require you to set a root directory for DF applications. This is similar to the root folder that the Starter Packs use. If you choose a folder that already has a DF install in it, the client will automatically detect the latest installed version.
* The main window shows a table of known components (pulled from the website's API above). White rows are up to date. Red rows are mandatory upgrades (e.g. you do not have DwarfFortress installed at all in the folder you chose). Purple rows are optional updates (e.g. you have DF 0.40.12 installed and 0.40.13 is available).
Project AssetsProject Repositoriesssg_coreSteppingStoneGames is something I worked on a long time ago but never took anyplace. I'm reviving it, starting with a core set of functionality I can use across all my future projects. This package has base classes for objects/entities, extension methods, and utility classes I frequently find myself using.
MountainHomeThis is the repository for this particular project. It includes
- SSG.MountainHome.Core - Portable class library with the base models used across the solution.
- SSG.MountainHome.DAL - Class library (non-portable) that leverages Entity Framework for the DAL layer.
- SSG.MountainHome.Web - MVC5/WebAPI hybrid project for hosting the project's website, database, and WebAPI.
- SSG.MountainHome.Client - Reference implementation for consuming the WebAPI framework. Also leveraged in the Windows client for communication with the website.
- SSG.MountainHome.UI.WPF - Windows client mentioned above, built on Microsoft's WPF functionality. This is not cross-platform, but I chose it to broaden my skills for work. If anyone is interested in adding a cross-platform client to the project, you are more than welcome to come aboard.
Project BuildsI'm using
AppVeyor to automatically manage builds out of GitHub.
https://ci.appveyor.com/project/salithus/ssg-corehttps://ci.appveyor.com/project/salithus/mountainhomeProject | Branch | Status |
ssg-core | master | |
ssg-core | develop | |
MountainHome | master | |
MountainHome | develop | |
From HereCutting this short - I'll spend some time this weekend writing up a new roadmap as I've already hit some of the major milestones I was looking to achieve.