Author Topic: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line  (Read 52227 times)

Offline jballou

  • Newbie
  • *
  • Posts: 6
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #125 on: April 21, 2019, 11:18:32 AM »
First off, thanks for the detailed response, it's gotta be a wall of text since I put up a wall myself.

I actually realized after I posted it that there was a whole subforum here and a lot of this has already been covered. So I'll just go over the remaining points.

For the master reports, a little context for the user on how to open the interface would be helpful. Even if it's a temporary dialog with buttons to connect all the UI pieces, it wouldn't be that much worse than the original. Heck, you wouldn't even make players wait 5 seconds for a smarmy AI WAV file to play before displaying the menu, so you're already ahead of the game :D

I'd be glad to work on some UI connectors to allow localizing out some text and events, that would let you make the code part and people like me could make smaller scripts with the help text and triggers that make them appear. It's not a trivial ask, but I've done something similar in other games and it did end up saving time and being easier to have a simple event thrower/listener than hardcoding the tutorial stuff directly into the game.

For the factory alert, and other stuff, something like an "events scroller" at the bottom would be good. Any event, be it "time travel", "bold new discovery", "factory can't deliver goods" or "no more air" could all show up in a feed. Players click the event to get deeper context and information, and maybe color code and/or flash critical events that need immediate attention. Something that always bugged me about Outpost was that things would happen, from the seed factory imploding to the rebels surrender, and I'd have no idea it happened until I clicked News Briefs. Bringing that to the foreground will go a long way here.

For the materials breakdown, I can see an entire "resource view", that has minerals, metals, air, etc. all on the list. Each has an In/Out column, to show the balance. Clicking any resource shows what buildings are creating, and consuming, these resources. You can get fancy like click an element to move to it on the map, or prioritize/enable/disable buildings that consume resources, but to start with just a list of the things and the balances would solve a lot of problems.

I can mock up a couple of these for you, what's your preferred format?

Offline leeor_net

  • Administrator
  • Hero Member
  • *****
  • Posts: 2205
    • LairWorks Entertainment
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #126 on: April 21, 2019, 04:19:53 PM »
First off, thanks for the detailed response, it's gotta be a wall of text since I put up a wall myself.

I actually realized after I posted it that there was a whole subforum here and a lot of this has already been covered. So I'll just go over the remaining points.

For the master reports, a little context for the user on how to open the interface would be helpful. Even if it's a temporary dialog with buttons to connect all the UI pieces, it wouldn't be that much worse than the original. Heck, you wouldn't even make players wait 5 seconds for a smarmy AI WAV file to play before displaying the menu, so you're already ahead of the game :D

By master reports, do you mean the full-screen reports UI that was recently developed?


At the moment this can be accessed by double-clicking on a Factory (surface or underground) or a Warehouse. This can also be accessed by pressing F1 though I'd like to reassign this key to something more intuitive in the future.

If this isn't what you mean, I'd like to hear more.

I'd be glad to work on some UI connectors to allow localizing out some text and events, that would let you make the code part and people like me could make smaller scripts with the help text and triggers that make them appear. It's not a trivial ask, but I've done something similar in other games and it did end up saving time and being easier to have a simple event thrower/listener than hardcoding the tutorial stuff directly into the game.

I'm not opposed to this but developing a scriptable GUI would take considerable resources. I wanted to keep things as straight forward as I could in the code -- it's why structures are hard-coded instead of being in some external definition file like an XML, etc. It's also why the UI is hard-coded. Developing a scripting system for this does mean that the UI can be developed without having to recompile the code but it adds additional overhead that I'm not convinced is a good idea, it potentially limits how tightly it can integrate with the core code (there's some really weird stuff I do in there, not as bad as working with wxWidgets but hard-coding the UI does overcome some inter-class comm issues that would be difficult to do with scripting). It also eliminates a lot of the loading times you'd get by having to load up external script files, check them and 'compile' them. Ultmiately it really just kind of shifts the location of the problem without actually solving it.

That stated, I do intend to have a lot of the text moved outside of the code -- currently it's all in a series of constants that are defined in <Constants/Strings.h>. This works but it's hardly ideal for being able to quickly change the text as needed. The plan is to build an XML file with key/value paired string constants that the code can reference with something like StringConstants[nameKey];. Quick, easy and provides and safe. There are a few cases where I use c-like string formatting specifiers (ala printf) that would make assumptions about the nature of the format specifiers... so I'll have to think about how to do this well should the string be changed.

For the factory alert, and other stuff, something like an "events scroller" at the bottom would be good. Any event, be it "time travel", "bold new discovery", "factory can't deliver goods" or "no more air" could all show up in a feed. Players click the event to get deeper context and information, and maybe color code and/or flash critical events that need immediate attention. Something that always bugged me about Outpost was that things would happen, from the seed factory imploding to the rebels surrender, and I'd have no idea it happened until I clicked News Briefs. Bringing that to the foreground will go a long way here.

This is precisely what I had in mind. Similar in style to how Endless Space does it with the notifications building up along the left edge of the screen. When you click on them you get more details, right-click to dismiss.

For the materials breakdown, I can see an entire "resource view", that has minerals, metals, air, etc. all on the list. Each has an In/Out column, to show the balance. Clicking any resource shows what buildings are creating, and consuming, these resources. You can get fancy like click an element to move to it on the map, or prioritize/enable/disable buildings that consume resources, but to start with just a list of the things and the balances would solve a lot of problems.

I can mock up a couple of these for you, what's your preferred format?

Please do!

I don't have a particular preference in format. I would recommend posting in the User Interface subforum. Another forum user (havkyp I think?) suggested using a program called Pencil -- I still use it and it's pretty effective at quickly developing UI mockups. It's not perfect but it's free and does its job. I mention it in this post.
« Last Edit: April 21, 2019, 04:55:12 PM by leeor_net »

Offline jballou

  • Newbie
  • *
  • Posts: 6
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #127 on: April 21, 2019, 07:03:12 PM »
Yep, I found the interface, but the double-click invocation wasn't clear to me at first. Another wiki/tooltip issue probably.

About the event/scripting interface, having not looked at your code, your reasoning seems pretty good. So, that aside, maybe I could come up with a list of tips, and things that trigger them? I think the initial set of triggers for tips would be a building created/destroyed, turn numbers, mines going dry, and robots dying. That covers a lot of ground, and seems like a reasonable amount of work to parcel out (again, making some big assumptions from my side here).

I'll take a peek at Pencil tomorrow, and pop a couple ideas into the UI subforum, and we can discuss them further in there.

Offline leeor_net

  • Administrator
  • Hero Member
  • *****
  • Posts: 2205
    • LairWorks Entertainment
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #128 on: April 21, 2019, 07:08:19 PM »
About the event/scripting interface, having not looked at your code, your reasoning seems pretty good. So, that aside, maybe I could come up with a list of tips, and things that trigger them? I think the initial set of triggers for tips would be a building created/destroyed, turn numbers, mines going dry, and robots dying. That covers a lot of ground, and seems like a reasonable amount of work to parcel out (again, making some big assumptions from my side here).

Makes sense to me. :D Should be very do-able in-game. It's a matter of setting a flag to 'show first-time tips' and as you said just have them trigger as the player uses the game.

Looking forward to seeing what you come up with!

Offline ekztal

  • Newbie
  • *
  • Posts: 3
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #129 on: August 30, 2019, 03:54:19 AM »
Hello!

I have Visual Studio 2019 installed, along with vcpkg, GLEW, & PhysFS
I cloned git repo for this, then downloaded and extracted the extra data.zip and api.zip files. I added their path as additional include directories

When I try to Build the project I get the following output

Code: [Select]
1>------ Build started: Project: OPHD, Configuration: Debug Win32 ------
1>GraphWalker.cpp
1>main.cpp
1>TileMap.cpp
1>Population.cpp
1>ProductPool.cpp
1>GameState.cpp
1>MapViewState.cpp
1>MainMenuState.cpp
1>MapViewStateDraw.cpp
1>C:\Users\Tom\source\repos\OPHD\src\main.cpp(7,10): error C1083:  Cannot open include file: 'NAS2D/Mixer/NullMixer.h': No such file or directory
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\GraphWalker.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\GraphWalker.cpp)
1>MapViewStateEvent.cpp
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\GraphWalker.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\ProductPool.cpp(134,20): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\Map\TileMap.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\Map\TileMap.cpp)
1>MapViewStateHelper.cpp
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\Map\TileMap.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MainMenuState.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MainMenuState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MainMenuState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Population\Population.cpp(31,16): error C2039:  'clamp': is not a member of 'NAS2D'
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D'
1>MapViewStateIO.cpp
1>C:\Users\Tom\source\repos\OPHD\src\Population\Population.cpp(31,21): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\GameState.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\GameState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\GameState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewState.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.cpp(256,18): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.cpp(257,6): error C3861:  'clamp': identifier not found
1>MapViewStateTurn.cpp
1>MapViewStateUi.cpp
1>PlanetSelectState.cpp
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.cpp(353,18): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(337,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(343,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(349,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(355,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(542,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(547,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(552,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(557,9): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(685,10): error C3861:  'clamp': identifier not found
1>SplashState.cpp
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewState.cpp(686,10): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateDraw.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateDraw.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewStateDraw.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateEvent.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateEvent.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewStateEvent.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateTurn.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateTurn.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewStateTurn.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewStateDraw.cpp(183,57): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewStateDraw.cpp(183,190): error C2661:  'NAS2D::Renderer::drawSubImage': no overloaded function takes 6 arguments
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateHelper.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateHelper.cpp)
1>CheckBox.cpp
1>Slider.cpp
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewStateHelper.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateIO.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateIO.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewStateIO.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateUi.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\MapViewStateUi.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\MapViewStateUi.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\States\MapViewStateTurn.cpp(158,19): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,53): error C2039:  'clamp': is not a member of 'NAS2D' (compiling source file ..\..\src\States\PlanetSelectState.cpp)
1>F:\Outpost 1\includes\NAS2D\include\NAS2D\Resources\Sprite.h(19): message :  see declaration of 'NAS2D' (compiling source file ..\..\src\States\PlanetSelectState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\Map\TileMap.h(62,28): error C3861:  'clamp': identifier not found (compiling source file ..\..\src\States\PlanetSelectState.cpp)
1>C:\Users\Tom\source\repos\OPHD\src\states\SplashState.cpp(130,18): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\UI\Core\CheckBox.cpp(106,17): error C3861:  'clamp': identifier not found
1>C:\Users\Tom\source\repos\OPHD\src\UI\Core\Slider.cpp(170,14): error C3861:  'clamp': identifier not found
1>Done building project "ophd.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

I'm sure I'd doing something wrong, if you know what it is, that would be fantastic.
« Last Edit: August 30, 2019, 03:58:26 AM by ekztal »

Offline Vagabond

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 900
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #130 on: August 30, 2019, 07:04:27 PM »
Hello ekztal,

Welcome to the forums!

I briefly looked at the build output youposted. My first guess is either you have not downloaded the NAS2D dependency or that you placed the dependency in a location that OutpostHD is not looking for it, esp the file nullmixer.h.

You can find NAS2D here: https://github.com/lairworks/nas2d-core

Hope this helps. Please post how it goes.

Brett

Offline ekztal

  • Newbie
  • *
  • Posts: 3
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #131 on: August 31, 2019, 03:13:33 AM »
Hello ekztal,

Welcome to the forums!

I briefly looked at the build output youposted. My first guess is either you have not downloaded the NAS2D dependency or that you placed the dependency in a location that OutpostHD is not looking for it, esp the file nullmixer.h.

You can find NAS2D here: https://github.com/lairworks/nas2d-core

Hope this helps. Please post how it goes.

Brett

Thanks for the quick reply.   I had previously already downloaded NAS2D.  Before I had downloaded NAS2D the other day I was getting "Cannot open include file:" on every line.  Now I mostly get the 'clamp' error except for the 1st line where I get the error "Cannot open include file: NAS2D/Mixer/NullMixer.h" but that's because there IS NO NullMixer.h in the NAS2D/Mixer/ directory it only contains 3 files:

Code: [Select]
Mixer.h
MixerNull.h
MixerSDL.h

Offline Hooman

  • Administrator
  • Hero Member
  • *****
  • Posts: 4798
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #132 on: September 01, 2019, 10:20:10 AM »
Sounds like you may have an out of date copy of NAS2D (or too new of a copy to match with what OPHD expects). Both the Mixer and Clamp areas were changed recently.

If you cloned the OPHD repository from GitHub, you may want to Init and Update submodules. That should download a matching version of NAS2D into a subfolder.

If that doesn't help solve your problem, maybe try posting what version you have of each repository, giving perhaps a commit hash or date/time/message. It's possible we could have messed up the version dependencies during an update and not noticed.



Edit: Oh, and welcome to the forums :)

Edit2: I think your version of NAS2D is too new. Updates are often made to the library using the built in unit tests to verify them. When working on these updates, the focus is mainly on the library. We often don't get around to pushing corresponding changes to the main game until sometime later. A git submodule update from the game should checkout a matching version of NAS2D.
« Last Edit: September 01, 2019, 10:32:06 AM by Hooman »

Offline leeor_net

  • Administrator
  • Hero Member
  • *****
  • Posts: 2205
    • LairWorks Entertainment
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #133 on: September 05, 2019, 01:41:41 PM »
Apologies for the late reply. The last few weeks have been... rough. I'll be posting a separate topic about that and where things lie in terms of development.

You pulled from the main branch of OPHD -- try the v0.8.0-develop branch.

Thanks for your interest! And sorry about the confusion. There were many changes made to NAS2D on the back end (such as removing NAS2D::clamp in favor of std::clamp) that haven't been merged into the main branch yet. You'll see that the main branch is 20 some commits behind the development branch.

Offline ekztal

  • Newbie
  • *
  • Posts: 3
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #134 on: September 05, 2019, 09:59:58 PM »
Thank you for trying to help.  I just tried pulling from the development branch you linked, and re-downloading the api.zip and assets.zip listed in your original post.  I added include directories where NAS2D was downloaded but I still have the same problem.  If I can't even figure this out seemingly single step out I doubt I have any business messing with source code.

Offline leeor_net

  • Administrator
  • Hero Member
  • *****
  • Posts: 2205
    • LairWorks Entertainment
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #135 on: September 06, 2019, 09:34:39 AM »
Believe it or not, setting up the environment is the hardest part. We call it dependency hell for a reason. It's usually a simple problem but it's not at all an easy one to tackle if you're unfamiliar with what the project expects.

I'll see if I can get something written up a bit better to help get the environment set up the way it's supposed to be. Chances are I haven't put up the most up to date versions of NAS2D -- I have a bad habit of using builds that I haven't actually released yet.

I'll have some time this weekend (I think), I'll see if I'm up for working with code.

Offline Hooman

  • Administrator
  • Hero Member
  • *****
  • Posts: 4798
Re: OutpostHD - An Open Source Remake of OUTPOST by Sierra On-Line
« Reply #136 on: September 18, 2019, 04:39:24 AM »
Sounds like you are downloading NAS2D separately from OPHD. That an obvious thing to do, but can lead to mismatched versions. And we're not very good at tracking release versions.  ::)

I'd recommend using Git to download both repositories together. The OPHD project has a Git submodule reference to the NAS2D project. If you use the submodule update from within the OPHD repository, it should fetch the NAS2D project for you, and checkout a matching version. Unfortunately, Git doesn't tend to fetch submodules by default. I really wish it would.

When you clone the repository, sometimes you can choose to clone recursively, which should also fetch submodules. Failing that, once a repository is cloned, you should be able run a Git submodule init, followed by a Git submodule update. Do that from the OPHD repository, and it should give you a matching NAS2D library in a subfolder to build with.

Don't just copy one repository into a subfolder of the other. I know it can be tempting if the default clone gives you an empty "nas2d-core" folder, but you don't want to just copy stuff in there. It won't work the same. When you use the submodule feature, the hidden ".git" folder of the parent project will be shared between both repositories. The submodule will just have a small ".git" file which gives the relative path to the parent repository's ".git" folder. By using the Git submodule features, you'll enable Git to match up the versions of the two repositories.


Of course I'm assuming you're using a Git client to pull the changes. If you don't have a Git client installed, and are just downloading raw zip files, we'll have to come up with a different plan.