For both factory production and research, it could be more user-friendly to use a queue approach. So the factory can make several items (possibly in a loop), and several pre-requisite technologies can be done in a row and all labs can work on the same thing without having to open each one.
That's not a bad idea... kind of take a page from Civilization's book in that case. I was actually thinking about how to handle the UI when selecting factories, labs and manufacturing/research parks. Could use a similar approach where it just covers the whole screen.
Research makes a lot more sense to queue up but I'm wondering if I should again take a page from Civ5's book and every time a research topic is completed it lets you know "Hey! Listen! You can do more research!". In this case research labs would be assigned all together. Or again, go with the research parks where several labs are directly connected to an administration building and they are treated together.
Going to have to think about it.
In Outpost 1 how do you add additional Command Center to create additional Colonies?
You don't. The game was never finished.
EDIT: sorry for the wall of text, I got carried away.
I'd love to help with testing and balancing, though, as well as most people here
UI can definitly benefit from some improvement, but I'd say to leave that for last.
Question; didn't Outpost 1 under windows simply change the theme to some odd variant of the high-contrast theme?
Could mining sites have differing proportions of these, though?
these routes is calculated using for A*
As I read it, we've got several resources:
This would be a parallel system, where you set up a couple of 'studies', which are then shared across labs.
Pretty much. They just changed it to black and green.Ah, yes, now I remember. And after a crash the theme would 'stick'. Ew.
e.g., tougher terrains will tend to favor medium and high yields, easy terrain will tend to favor low yieldsI like that; a clear incentive to go to the difficult-to-reach mines, yet at the same time it's possible to make a lot of easy mines.
Following that, once a route is established, the user would mostly be looking at assigning x number of trucks to particular routes. The UI for that would show if there are too many trucks, if resources are being left at the mine, etc.
These are the resources I'm currently considering:Noodles from a tin :o
- Common Metals
- Common Minerals
- Rare Metals
- Rare Minerals
- Energy
- Food
- Organic Waste
- Other Waste
... with the liquids then being sent off to the CHAP ...I think that's where the CHAP and the SPEW can work together; the SPEW eats up (organic, or all) waste, the CHAP gets rid of the smelly liquids, and produces air and potable water. For the CHAP a description should be enough, no extra resources would be needed. Concerning the circulation of matter; I read a Sci-fi book once that detailed (in excruciating detail) the flow of matter through a small colony. Generic 'trash' would be collected, separated into liquids, solid-ish organics, and non-organics. The liquids were used for air and water, same as here, the solid organics were made into fertilizer, and the non-organics were thrown into something that reminds me of the smelter. Perhaps a pseudo-resource could work here; the SPEW and CHAP simply get an amount of input based on the amount of people; more people, more organic waste. An overloaded SPEW or CHAP makes people unhappy. And then assume the CHAP produces as much air as required (until overloaded), and the SPEW has a direct line to the agridomes. In other words; organic waste disappears as a proper resource, and other (inorganic) waste can simply be thrown into the smelter for a small amount of random materials. No need for a big pile of poo outside the colony ;D
With the administration set up, now you can set research for up to four labs at a time, or maybe instead of having labs being required to be directly connected to the Admin building, the Admin building would instead have an area of effect, say any lab within 3 tiles of the admin building are under its control. This does bring up the problem of what about overlapping areas but that can be solved by just restricting administration buildings to having to be at least 6 tiles away from any other administration building.That'd require an additional building, and I expect people will want to put multiple admin buildings to the same task. Why not make labs auto-connect into larger labs? For example:
I like your thoughts on the population and morale models. I haven't looked too deeply into it yet as I've been more focused on getting the basics done first so if you wanted to design the population model and morale model, by all means go right on ahead.I'll do some minor brainstorming, and I can set up a preliminary list with some seemingly arbitrary values.
Humans don't die from old age. They die from organ failure
Are you planning to stick with ISO view?
Are you planning on drawing multiple textures per tile (IE a ground texture with a building texture on top), or only drawing one texture per tile?
Are you planning on having any animated tiles? If so, will the animation just sequence through several PNG tiles from a sprite sheet?
<sprite version="0.99">
<imagesheet id="construction" src="construction_01.png" />
<imagesheet id="main" src="command_center.png" />
<action name="construction">
<frame sheetid="construction" delay="800" x="0" y="0" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="107" y="0" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="214" y="0" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="321" y="0" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="0" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="107" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="214" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="321" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="0" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="107" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="214" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="321" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="500" x="0" y="192" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="321" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="214" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="107" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="0" y="128" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="321" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="214" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="107" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="0" y="64" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="321" y="0" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="214" y="0" width="107" height="64" anchorx="0" anchory="18" />
<frame sheetid="construction" delay="145" x="107" y="0" width="107" height="64" anchorx="0" anchory="18" />
</action>
<action name="operational">
<frame sheetid="main" delay="125" x="0" y="0" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="107" y="0" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="214" y="0" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="321" y="0" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="0" y="55" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="107" y="55" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="214" y="55" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="321" y="55" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="0" y="110" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="107" y="110" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="214" y="110" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="321" y="110" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="0" y="165" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="107" y="165" width="107" height="55" anchorx="0" anchory="9" />
<frame sheetid="main" delay="125" x="214" y="165" width="107" height="55" anchorx="0" anchory="9" />
</action>
</sprite>
That actually breaks things down much more easily for me and I now have the forumlation for a simple mathmatical approach. My math isn't particularly strong so I imagine it would be very easy to figure out a pattern and develop strategies to take advantage of any weaknesses in the math.
Your population takes 3 values (number of workers, kids, and scientists).
Population growth takes 3 values (growth progress of workers, kids, and scientists).
Population death takes 3 values (death progress of workers, kids, and scientists).
There are possibly other formulas that may work better. This was just an example. It's not overly complicated, and doesn't need to be.
I had a question: the original had the news-button, which became active if there was a bit of news present. Perhaps a scrolling news ticker, news box with clickable items, or popup news messages might be better. I did a bit of a playthrough two days ago and only looked at the news around turn 100.
A generalized pool would be good, but there is a potential issue: if mine yield is randomized per resource, then there is a risk of storage filling with materials of one kind, while there is not enough of another kind.
Simply 'throwing away' resources above a certain threshold (Rare ore low, common mineral highest, so replace common mineral with rare ore?) is something I've seen before, but I'm not sure if that's a good idea...
To help people find out which resources they need, perhaps a simple 'balance sheet' showing input, storage, and usage would be very helpful.
I saw you were working on the resource management, and I'm curious on your current plan. The 'Update the way the player's usable resources are handled'-task denotes a problem with complexity, but no preferred solution.I really like how you brought that up.
- As I understand it, Agridomes store their own food, which means every Agridome - object has its own counter and behaviour. This is similar to the original, but I'm not sure why this isn't done with a global counter.I'm used to the Outpost 2 way of storing food using a global counter. I never even considered it this way. In a way it almost makes more sense to have food stored at agridomes, and potentially losing it if the agridome is destroyed. That may be why it wasn't implemented that way though, since Outpost 2 needed to support land rush games where there is no agridome.
I really like how you brought that up.Not good?
... potentially losing it if the agridome is destroyed.Ah, that's what I was missing! Implementing disasters would mean you'd need to put the hot lab and tokamak away from everything else.
Not good?It was good. It was basically: hey, you said you were going to work on something vague. What are the specifics?
I saw you were working on the resource management, and I'm curious on your current plan. The 'Update the way the player's usable resources are handled'-task denotes a problem with complexity, but no preferred solution.
TODO:
Finish fleshing out this thought and create tasks revolving around this problem.
As I understand it, Agridomes store their own food, which means every Agridome - object has its own counter and behaviour. This is similar to the original, but I'm not sure why this isn't done with a global counter.
In a way it almost makes more sense to have food stored at agridomes, and potentially losing it if the agridome is destroyed.
On storage of resources (and later items in warehouses); the original did that per object. That is the plan, I gather, but I wouldn't have the faintest on how an implementation would look like.
In the original, I would build a tokamak and forget about my energy needs. Energy was implemented, right?
The master report was a bit odd, but it could be made useful.
outposthd$ make
/bin/sh: 2: [: src/Map/: unexpected operator
/bin/sh: 2: [: src/Map/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/Things/Structures/: unexpected operator
/bin/sh: 2: [: src/Things/Structures/: unexpected operator
/bin/sh: 2: [: src/Things/Robots/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/Core/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/UI/: unexpected operator
/bin/sh: 2: [: src/States/: unexpected operator
/bin/sh: 2: [: src/States/: unexpected operator
/bin/sh: 2: [: src/States/: unexpected operator
/bin/sh: 2: [: src/States/: unexpected operator
/bin/sh: 2: [: src/States/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
/bin/sh: 2: [: src/Population/: unexpected operator
/bin/sh: 2: [: src/: unexpected operator
make: *** No rule to make target 'API/NAS2D/lib/libnas2d.a', needed by 'bin/OPHD'. Stop.
sudo apt install libsdl2-dev
-CFLAGS = -g -Wall -I./API/NAS2D/include `sdl-config --cflags`
+CFLAGS = -std=c++11 -g -Wall -I./API/NAS2D/include `sdl-config --cflags`
make: *** No rule to make target 'API/NAS2D/lib/libnas2d.a', needed by 'bin/OPHD'. Stop.
Also, leeor_net, you should have a look at line 436 in src/States/GameState.cpp, I think you have a bug : the string sLevel becomes SLevels at one point without any new declaration.
new makefile: make 6.31s user 0.44s system 99% cpu 6.747 total
old makefile: make -f Makefile.old 32.60s user 2.31s system 99% cpu 34.920 total
I also needed to add the "-std=c++11" flag to CFLAGS in the Makefile:Thank you for the tip, I didn't really focus on reducing the volume of warnings ^^Code: [Select]That removed a ton of errors and warnings about "nullptr".-CFLAGS = -g -Wall -I./API/NAS2D/include `sdl-config --cflags`
+CFLAGS = -std=c++11 -g -Wall -I./API/NAS2D/include `sdl-config --cflags`
Also, leeor_net, you should have a look at line 436 in src/States/GameState.cpp, I think you have a bug : the string sLevel becomes SLevels at one point without any new declaration.
Seems to be an artifact of merging some changes. Have to admit, I'm finding Git to be far better at merging than SVN.
I'm also seeing that the code itself is wrong, again probably due to changes made between several commits between me and Goof.
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libphysfs-dev libglew-dev
- typedef int ERROR_CantUseHorrible_cast[sizeof(InputClass) == sizeof(u) && sizeof(InputClass) == sizeof(OutputClass) ? 1 : -1];
+ static_assert(sizeof(InputClass) != sizeof(u) || sizeof(InputClass) != sizeof(OutputClass), "Can't use horrible cast");
- typedef char ERROR_Unsupported_member_function_pointer_on_this_compiler[N-100];
+ static_assert(N < 100, "Unsupported member function pointer on this compiler");
AiVoiceNotifier() {}; // Explicitely Declared Private
AiVoiceNotifier(const AiVoiceNotifier&) {}; // Explicitely Declared Private
AiVoiceNotifier& operator=(const AiVoiceNotifier&) {}; // Explicitely Declared Private
int incrementFuelCellAge() { mFuelCellAge++; }
sudo apt install glee-dev
-#include "SDL_image.h"
+#include "SDL2/SDL_image.h"
src/Renderer/OGL_Renderer.cpp: In member function ‘virtual void NAS2D::OGL_Renderer::fullscreen(bool, bool)’:
src/Renderer/OGL_Renderer.cpp:494:44: error: ‘SDL_SetWindowResizable’ was not declared in this scope
SDL_SetWindowResizable(_WINDOW, SDL_FALSE);
^
src/Renderer/OGL_Renderer.cpp: In member function ‘virtual void NAS2D::OGL_Renderer::resizeable(bool)’:
src/Renderer/OGL_Renderer.cpp:518:59: error: ‘SDL_SetWindowResizable’ was not declared in this scope
SDL_SetWindowResizable(_WINDOW, static_cast<SDL_bool>(_r));
^
Makefile:22: recipe for target 'obj/Renderer/OGL_Renderer.o' failed
This function is available since SDL 2.0.5.
libsdl2-dev is already the newest version (2.0.4+dfsg1-2ubuntu2).
As for the include in NAS2D/src/Renderer/OGL_Renderer.cpp, I didn't get any issue with it.
It might have something to do with the fact I have both versions of the SDL installed on my machine though.
Sorry about the dependency, I didn't write them down anywhere, and it wouldn't have been usefull to you anyway as I'm running archlinux.I was wondering what version of Linux you used.
However, I don't think that adding the dependency install to the makefile is a good practice or even a good idea. You would need to support
all the different packet managers that are out there (apt, pacman, yum to cite just a few of them).
I reckon a better idea would be mentionning that in the README.
We're going to be restructuring the SDK area of www.opengl.org and, since glee is listed there, wanted to ask what the current state of the project is, and if it should continue to be listed as a current resource. The sourceforge project seems pretty dead by casual inspection.
$(DEPDIR)/%.d: ;
.PRECIOUS: $(DEPDIR)/%.d
.PRECIOUS
The targets which .PRECIOUS depends on are given the following special treatment: if make is killed or interrupted during the execution of their recipes, the target is not deleted. See Interrupting or Killing make. Also, if the target is an intermediate file, it will not be deleted after it is no longer needed, as is normally done. See Chains of Implicit Rules. In this latter respect it overlaps with the .SECONDARY special target.
You can also list the target pattern of an implicit rule (such as ‘%.o’) as a prerequisite file of the special target .PRECIOUS to preserve intermediate files created by rules whose target patterns match that file’s name.
...
.SECONDARY
The targets which .SECONDARY depends on are treated as intermediate files, except that they are never automatically deleted. See Chains of Implicit Rules.
.SECONDARY with no prerequisites causes all targets to be treated as secondary (i.e., no target is removed because it is considered intermediate).
Just wanted to say a huge THANK YOU to you for developing OutpostHD!!! I signed up for this forum specifically to express this. :D
I'm especially glad that you're making OutpostHD fully open source, this is essential for ensuring its historical heritage and for others to learn from and build on it. BTW what's its license? GPLv3?
Anyway, in addition to the huge thank you, what are some ways to support OutpostHD's development? Unfortunately I'm not a programmer. Do you accept donations or have other ways to help? Let's make this work. Thanks!!
User Interface
I’m terrible at UI design. I can do the programming but the design itself is not my strong suit. I really need help designing a good UI that’s functional, looks good and is intuitive. Any help here would be much appreciated.
Effectively what I need are UI mockups with details about how the different elements work. The basic UI in the game right now is functional but pretty bare.
Donations would be nice but I'm not sure I'd feel comfortable accepting them as I'm not the only developer.
No, no no no! I do not like the GPL! I have it under a much more permissive BSD 3-Clause license. See LICENSE.txt in the distributions.
And that's why I made it open source. I could have kept it closed source but the only projects along these lines that seem to survive and progress into anything (OpenTTD, CorsixTH, Caesaria and many others) are all open source. The closed source ones seem to fizzle out and die over time.
Donations would be nice but I'm not sure I'd feel comfortable accepting them as I'm not the only developer.
QuoteUser Interface
I’m terrible at UI design. I can do the programming but the design itself is not my strong suit. I really need help designing a good UI that’s functional, looks good and is intuitive. Any help here would be much appreciated.
Effectively what I need are UI mockups with details about how the different elements work. The basic UI in the game right now is functional but pretty bare.
If you're up for some wireframing I'd be grateful. I'm just genuinely bad when it comes to UI design -- the few windows you see in game are mostly my doing though Goof and others have helped in developing other parts of the UI (e.g., the bottom ribbon). So any thoughts there are most welcome -- though in a separate thread! :D
Good point. I'll download and try to play around a bit more. I already have some thoughts on UI so will make a list and let you know with suggestions! And I'll do my best to mock up some things though I only know Inkscape and not professional wireframing... Is that still useful????
Thanks a lot again for making this game. I'll do my best to give constructive feedback, and please keep up the amazing work!! :D
Good point. I'll download and try to play around a bit more. I already have some thoughts on UI so will make a list and let you know with suggestions! And I'll do my best to mock up some things though I only know Inkscape and not professional wireframing... Is that still useful?
It's all about discussion. That's the only way to make a game fun if you ask me. :)I get it. No feelings hurt here, it sucks being sick. Besides, redesigning a game from the ground up is enough of a challenge without trying to incorporate crazy new ideas into the version 1.0 of said rewrite. Since it's been a while from my last postings, I hope that the new job is going well and that you're feeling better. Can't wait to see the newest data and graphics.
Also, forgive my curtness. I've been dealing with flu this week on top of work and a load of other stuff. I'm usually more articulate.
White Claw, what's your other project? Anything worth starting a new thread about?
I just checked out the PVS-Studio Analyzer website. Neat little tool. Looks to do the same sort of thing as Coverity Scan.
Huh, that's much more of an attempt than I expected. Indeed, there is a makefile, though there are 2 projects that need to be compiled together, NAS2D and OutpostHD. I'll have to dig up some of my old notes.
Hey, first off I wanted to say thanks for undertaking such a huge amount of work, the game is coming along nicely and the thought of playing Outpost in a less broken state is really appealing to me. I've got a bunch of questions and suggestions, but please know that I raise these because I like what you're doing and want to see it get better, it's not a criticism by any means.
On the first page, the "how to play" link should point to https://wiki.outpost2.net/doku.php?id=outposthd:how_to_play
As far as the game itself, I'm a little lost on the interface.
I think it might be a good idea to add a "tips" feature to help give the player some in-game tutorial on the basics, just things like "land the seed factory here" and "build an agridome and CHAP before you bring down colonists" or whatever. The lack of clear direction on getting the basics was a problem for me in the original, putting in a little bit of handholding for new players will go a long way here.
Does the lab have any research options yet? I see no menu to do anything there.
I'm not sure where to find the Master Reports, if it's not implemented no worries but if it is you may want to document how to do access them on the wiki.
For the Morale, it would be nice if the game gave me an indication of why my morale is changing (i.e. +2 from residential, +2 from park, -3 from police).
For population, it would be good to have an indication or tip on how to get more workers or scientists, and a little bit of context as to what the classes of colonist are.
With Factories, I get an indication that it's on "Turn 5/5" for a long time. Is that because I don't have enough materials, or another reason?
For resources, having a dialog showing me where they are being consumed would be great, I'm having resources seemingly disappear and have no idea where to.
I also got "you have failed, your colony is dead" without any clear reason why. I had enough food, energy, housing, and materials, morale was around 300, and game over. Having some sort of alert like "your people are dying fast" or "morale is too low, people are air locking themselves to escape this existence" would be great.
I'm also a developer, usually FPS stuff but I've worked on a number of different mod teams all over. I'm not a C++ guy, but I can give you some time around doing documentation and other non-coding non-artistic stuff.
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?
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).
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 ==========
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
Mixer.h
MixerNull.h
MixerSDL.h
<structure age="8" crime_rate="0" depth="1" direction="1" disabled_reason="0" forced_idle="false" idle_reason="0" integrity="95" pop0="2" pop1="0" state="1" type="18" x="53" y="96">
<waste accumulated="966440236" overflow="-2147471807" />
</structure>
But there's a wonderful forum right here!To each his own, but really we're all here for a niche cult hit from the 90's RTS, itself a genre that's even more abandoned than Arena FPS is now. Let's not pretend as if QuakeNet IRC was any better though. :P