As usual, my github can be found here: https://github.com/thebracket/bgame
It’s been a pretty productive week, and it’s starting to feel like more of a game and less of a tech-demo. On the back-end,
I implemented a message-bus system to complement the ECS. It uses a similar system (templated, so you instantiate it with
a list of message-types to support, and it makes one contiguous vector per message-type), and has tombstoning (mark a message
as deleted, and it will be culled on the next mark/sweep tick) and time-to-live (so you can indicate how long a message should
stick around before being read - or being read and not marked as deleted). I really like working with the templated systems that
provide their own tuple of vectors; it makes it easy to provide an interface to systems such as
ecs->get_components_of_type<renderable_component>() and receive a pointer directly to the vector, no copying involved.
On the game side of things:
The user-interface is much cleaner, now. Instead of panels with a console and options, almost all of the screen is dedicated to the
game view. I think it looks a lot cleaner, and (along with the other improvements) conveys the same amount of information. New UI Screenshot
Cordex (the AI you play) requires power. At the start, with your trashed escape pod, you have some functional solar panels and batteries - but
barely enough to get through some nights. This is now tracked, and displayed. Solar generation takes into account time-of-day.
Settlers require sleep, food, and water. I haven’t implemented beds, yet - so the settlers will fall asleep wherever they happen to be
standing when their sleep-timer goes off. The escape pod includes a water purifier, and a small food replicator (it produces NutraGunk, a perfectly
nutritional but really quite revolting super-food). Both systems require power to use, so hungry/thirsty settlers are your initial major source of
power drain. I ended up spending quite a bit of time tweaking values to ensure that you make it through the night!
In order to support pathing to food/drink, I found myself with a choice: I could do a search for food sources, followed by an A* navigation run (which
needs to be supported anyway, and A* isn’t too hard to write), or I could use __flow maps__. I opted for the latter, because eventually I want there to
be a LOT of settlers running around, and many sources of food and water. It’s really nice to work with - it simply recursively floods out from each
source of food or water, marking distance (which simply goes up by 1 each time) and the entity ID # of the source (and skipping tiles that haven’t
been revealed yet). This makes the settler’s path-finding a simple “compare the distances of the available exit tiles, follow the lowest” calculation,
and still guarantees an optimal path to the source.
Emotes/unimportant speech can be emitted by any component with a position_component, and can be color coded. These appear in a little pop-up
pointing to the location from which they originated, and gradually fade out. Right now, they are used to announce some settler state changes. For
example, when a settler wakes up they give a yawn, and there’s announcements when they eat/drink.
In order to better interact with the world, I setup tooltips. Right now, they are mouse triggered only - but a “look at” key is coming very
soon. When you hover the mouse over a tile, a tool-tip shows you all about it: what entities are there, terrain and climate. This will serve as
a basis for a contextual options menu (things like “build here” with a list of buildings, “view” for creatures, etc.). A Tooltip Screenshot
I’d like stealth to be part of the game (which lead to some of the lighting work I did early on), so I added a facing-direction and field-of-view
to each settler. It looks a bit silly when they are in random movement mode, but works well when they have a destination. A field of view in action
I’ve started implementing items, but it’ll be next week before there’s anything to show for it.
I’m pretty happy with how the result looks. Here’s a screenshot, showing lighting, tool-tips, emote pop-ups and randomly wandering settlers