This grant and support will help us continue to improve the user interface and unique gameplay of Adaptory as we get ready for our Early Access launch in 2025. (We will be releasing the first public screenshots of the new user interface in the next week or two!)
Over the last year, CODE’s support has levelled up every aspect of our game studio, from running a successful business, to marketing a product, pitching to publishers, and developing our international presence. We are honoured to be a recipient, and to be listed among these other incredible titles.
Thank you again so much, CODE <3
]]>TL;DR: We’re moving Early Access release to 2025, to add more content and polish.
Thank you all, so much, for all of your downloads, plays, and feedback over the last week! It’s been great to meet so many new fans and friends, and confirming that the game is heading in the right direction 😊
From the hundreds of comments & pieces of feedback, I’ve identified four main themes that Adaptory needs to focus on:
A more refined identity: Adaptory is an ambitious mix of ideas, and while I have been focusing on making sure the simulations are solid and that experienced base-building players feel at home, it would be helpful to focus on what makes Adaptory unique: the randomly generated world events, limited team size, quest/task systems, conversations, and other features not yet announced.
More content: The key systems of the game are working well, but there needs to be more content. More systems, more buildings, more art and conversations, a bigger and more interesting world to explore. The content schedule is already mapped out, it just needs to be put into the game!
Performance on lower-end machines: The game plays well but struggles on lower-end machines, especially laptops and integrated graphics. I think there’s still 1-2 orders of magnitude of performance tucked away, now that the game architecture has settled. Adaptory is not designed to be a casual game, but I want it to be playable on as many devices as possible – my goal is 30+ fps on a 2016 Macbook Pro.
Polished user interfaces: It would be nice to have a lot more polish and quality of life improvements to the UI. A lot of information is hidden away and could be exposed in better ways, with more tutorials and help getting started, and made more accessible to a wider range of screens. It can also be prettier!
Originally, the plan was to release the game in Early Access later this year, and then spend at least two years working on adding in a lot of these systems and content. However, I think if we push the EA release date back and focus on preloading this work before the release, the launch will have more of an impact, and we’ll build a bigger community. Therefore, as a team, we’ve decided:
We’re pushing back the Early Access date to 2025 (final date still to be announced). This will give us more time to add extra content, systems, and polish to really make the game shine at launch.
The Adaptory demo will remain on Steam, free to play. The demo will continue to be updated over the next year – particularly with UI, QOL, and performance improvements, so we can test things out and iron out bugs – but most new content will be exclusive to the Early Access release. EA is going to be huge!!
We’ll also continue to release demo updates on itch.io, if itch.io is more your thing. (Should we look at GOG or Epic too?) There’ll also be plenty more blog posts where we’ll tease out some of the new content as it’s added.
I’m also planning to run at least one closed beta test for Adaptory next year. This will be a focused, exclusive event where you’ll be able to play the new content before anyone else, and provide feedback before the game launches. If you’d like to be notified when the closed beta is open to signups, please join the Discord and/or the mailing list.
Select streamers and content creators will also be invited to a special preview build next year – so if you’d like to be part of that, please get in touch.
And of course, if you haven’t already, please wishlist Adaptory on Steam so that you can stay in the loop!
The last week has been incredible, so thank you for downloading and playing the demo, providing feedback and ideas, joining our community, and for all of your support. I’m really excited to show you what’s coming to Adaptory.
]]>Full patch notes are listed below.
This version has been heavily tested but there may still be bugs, crashes, and unexpected behaviour. Please continue sending through bug reports, feedback, and ideas as we’ll be working on polish and tweaks over the next week. A huge, huge thanks to everyone who has played an early build 🥰
As mentioned in the Steam Next Fest plan, the plan is to keep this demo up beyond the festival, but I might need to turn it off if something unexpected occurs. So download a copy today, and please let us know what you think!
In the demo, your explorers can now express themselves! They’ll make adorable noises when sleeping, digging, carrying, building, having conversations, or any other number of actions.
Adaptory is a complex game with multiple simulations all working together to create emergent gameplay. To see what’s going on, you can use overlays to show different views of your base, such as the new breathability overlay in the game:
The selection bar also shows some of the systems and layers that will be coming in future releases.
All powered buildings have been improved. Batteries last longer, lights use less power, and stored power is now measured in Wd (Watt-days). I’ve also fixed it so you can’t get infinite power from a light. 😉
As mentioned in an earlier post, we’ve added the oxygen generator, which turns liquid water into oxygen and hydrogen, using electricity. This gives you another way to create oxygen for your team, although it requires a bit of setup and infrastructure to get going.
There’s also dozens of bug fixes, tweaks, balance, simulation, and performance improvements since the last release, making the game feel and play better. These include:
Full patch notes below.
F1
shift-F11
to toggle visibility of all user interfaces, when debug info is also visible (F8
) - locked behind two keyboard shortcuts to prevent accidental togglingSteam Next Fest is a week-long celebration of upcoming games, and more importantly, it will be the first time Adaptory will be available on Steam. The goal is to get as much feedback and as many wishlists as possible, so please do join the party. The new demo build has new features, art, sound, gameplay, and a ton of bug fixes, and I can’t wait to share our hard work.
Here’s everything that’s going to be happen over the next two weeks! (You can also stay in the loop on Discord, Mastodon, or Twitter, where I’ll be posting updates.)
If you haven’t already seen the video, there’s a brand new trailer, just for Next Fest:
The Adaptory Steam page has also had an overhaul, with new text, GIFs, and screenshots. I’m in the process of getting the page translated to a number of different languages, as well. (The demo will only be available in English, but I want to make it clear the full game will be localised!)
Jevon is going to try her first ever dev livestream on Twitch!
This is going to be a real experiment, not exactly sure how this will go 😀
I plan to start the stream at
On stream, I’ll probably be tweaking art, adding content, fixing bugs, or maybe just hanging out with chat. Come hang out and I might add your ideas to the game, too. It’s been a long time since I last streamed 😅
Adaptory’s Demo will be released on Steam, and anyone can download a copy and play it for free! 🥳
The version we’ll be releasing next week has new systems, content, and heaps of bug fixes. There are no limitations in this demo; you can play for as long as you want, but this version will only be released on Steam.
Hopefully there won’t be any major issues once the game goes live, but I’ve got automated tests, builds, and release processes set up, so it should be easy to make last-minute changes!
Steam Next Fest launches at
We will also be livestreaming the game later that day at
We’ll also be doing another livestream this day, at
Steam Next Fest ends at
A huge, huge thank you to everyone who has played any version of Adaptory over the last two years, provided feedback, bug reports, and support – especially everyone in the Adaptory discord and friends from NZGDA. The game feels really polished compared to a year ago and I am nervous and excited to share it with the world 😊
]]>But in order to get there, the element simulation needed a bit of a minor rewrite…
(Warning: Technical gamedev post follows!)
In Adaptory, every instance of a building or explorer has its own mass and temperature. Some types of buildings and explorers can also absorb mass from the environment, convert it into another element using some conversion process, emit it back into the environment, and so on.
In the old data model, this was achieved by giving each instance a fixed number
of optional mass and temperature slots, for each type of stored mass input and output.
Slots that were not enabled had to be stored as zeros/null
s:
My design goal for the oxygen generator meant turning one element into two elements, either one of which could be prevented from emitting into the environment for whatever reason. In the previous data model, this would have meant adding an additional mass and temperature slot to every building, even though most buildings wouldn’t be using it. It was clear a new approach was needed.
In the new data model for Adaptory, every building type and explorer type now defines any number of input and output slots, with each slot defining how it works (absorption, emission, piped in, dropped into the world). Each mass packet is also stored immutably, reducing the amount of memory access we need between world simulation frames.
Having this extra layer of abstraction has some significant benefits:
If you find any bugs, issues, balance problems or suggestions, please let us know on Discord or by email so we can keep improving the game! 🙂
The focus of this release has been technology, to try get the game as stable as possible before adding all of the systems and content for Early Access. This release has been heavily tested but there may be some bugs, so please let us know.
We’ve replaced all of the raw resource pile art with brand new art, and it looks amazing. There’s different art for small and big piles, and whether the piles are falling through space or are settled on the ground. Explorers also show what they’re carrying – whether raw elements, or items such as oxygen candles.
There’s also new art and animations for the battery and light buildings.
We’re starting to add some tools for streamers to play the game with their community! To start off, you’re now able to rename your explorers. You can change their name at the start of the game, or in the middle of a game by clicking on their name:
Not sure if you’re running low on construction materials? Is your oxygen candle supply getting dangerously low? We’ve added a resource counter that automatically works out how many resources your crew is able to use. (It does not include resources that are buried, locked away behind doors, or otherwise inaccessible.)
You can now save and load your game in Adaptory, allowing for longer play sessions. This also means you can share save games with your friends, and perhaps collaborate on a base together!
Autosave has also been added (by default every ten minutes). Occasional game crashes should no longer be the end of your game. Save/load is experimental so please let us know if your save game doesn’t load properly.
Alpha 7 marks our first release with sound design contributed by Mika! We have been adding lots of extra clicks and sounds and adaptive audio throughout the game. There’s also three new music tracks in the game, including a music loop played in the main menu – I recommend listening to the music with headphones, if possible!
This release also switches our audio engine from OpenAL to FMOD (more information).
Full patch notes below.
We will be participating in Steam Next Fest Feb 2024 so most of the next few weeks we will be focusing on getting our demo and Steam page polished.
Shortly after Steam Next Fest, the plan is to officially enter Early Access! The EA version of Adaptory will include:
User Interface
levels slider%APPDATA%\Roaming\Adaptory
(Windows) or ~/Library/Application Support/Adaptory/
(Mac)1
), 2x (2
), 4x (3
), 0.1x (shift-1
) and 10x (shift-3
)--help
on the command line-Dprivacy=1
to --privacy
%TEMP%/Adaptory_*.log
AdaptoryConsole.exe
to Windows builds to still launch the game with a console--log-to-file=<path>
to print log messages directly to the specified file, unless --log-to-console
is specifiedenter
or space
Alpha 7 may be our last alpha before Early Access so the focus of the release is technology. We should then be able to focus entirely on content and systems over the summer break.
The release date is just one week away – 21 December 2023. This means you’ll have a brand new build to play in time for the break, but it also should mean I won’t end up fixing bugs on a public holiday 😅
]]>A long requested feature… you can now save and load games! And autosave is supported, too – by default there are four autosave slots and autosaves are triggered every 10 minutes.
Thanks to the internal data model, autosaving is done async, without needing to freeze the UI. Hopefully losing your base to a crash should be in the past, however serialization/deserialization is tricky so I am expecting bugs. If you find issues with your save files please do send them through.
I’m very excited to share that Mika Cornelius has joined the Adaptory team and they will be helping with sound design! Mika has most recently worked on the sound design for Black Salt Games’ internationally acclaimed fishing/horror video game Dredge.
FMOD integration seems to be working well
and it’s so much more powerful than what I’d written before.
FMOD supports all sorts of filters, parameters, triggers and buses.
I don’t know of any other Java project that uses FMOD, so we might be the first!
(EDIT: Wildermyth uses FMOD too!)
Getting third-party libraries (DLLs, SOs and DYLIBs) working well with Java, Steam, and Mac Gatekeeper has been a real learning experience but super interesting! Performance has not been an issue at all – the hardest part has been signing everything correctly.
I’ve also started work on getting the game onto Steam. The game is automatically being built by CI and uploaded for x64 Windows and Mac, and so far it seems to be working well. Make sure to wishlist the game to get a copy when it releases next year!
The Steam integration will also include Steam Cloud to save your games across platforms, and eventually there will be Steam Achievements and Steam Workshop support, too.
Finally, Adaptory is also a nominee in the 2023 Colors of Indie awards, which celebrates indie games being made by diverse teams around the world. Winner will be announced on 30 November!
Lots happening! I’m really excited to get Alpha 7 in your hands, I feel like the game is levelling up.
]]>Full patch notes below.
I’ve been prototyping an integration of FMOD (through lwjgl) and libgdx over the last day, and it looks like these are the steps you need to do to get FMOD working in Java:
lwjgl-fmod
3.3.2+ as a dependency, e.g. in your build.gradle
’s dependencies for desktop
, and rebuild with gradle.project(":desktop") {
apply plugin: "java-library"
dependencies {
implementation project(":core")
// ...
api "org.lwjgl:lwjgl-fmod:3.3.2"
}
Get a copy of fmod.dll
and fmodstudio.dll
– these cannot be redistributed.
It seems the best source for these are from the FMOD downloads
under FMOD for Unreal > FMODStudio/Binaries/Win64/*.dll
for Windows.
Put these .dll
s in the root of your desktop
project. (There’s probably a better place to put these.)
You can then use FMOD in your desktop application!
public class MyApplication {
static {
// all of this enables super memory debugging mode, that fails early if you're
// messing up memory allocation/deallocation
Configuration.DEBUG.set(true);
Configuration.DEBUG_FUNCTIONS.set(true);
Configuration.DEBUG_LOADER.set(true);
Configuration.DEBUG_STACK.set(true);
Configuration.DEBUG_MEMORY_ALLOCATOR.set(true);
Configuration.DISABLE_CHECKS.set(false);
Configuration.DISABLE_FUNCTION_CHECKS.set(false);
}
private static void check(int result) {
if (result != FMOD.FMOD_OK) {
throw new RuntimeException("unexpected error: " + result);
}
}
public void run() {
try ( MemoryStack stack = MemoryStack.stackPush() ) {
int result;
// create a new FMOD Studio System
long system;
{
PointerBuffer buf = stack.mallocPointer(1);
result = FMODStudio.FMOD_Studio_System_Create(buf /* out */, FMOD.FMOD_VERSION);
check(result);
system = buf.get(0); /* get the location of system */
}
System.out.println("system = " + system);
int maxchannels = 32;
int studioflags = FMODStudio.FMOD_STUDIO_INIT_NORMAL | FMODStudio.FMOD_STUDIO_INIT_LIVEUPDATE;
int flags = FMOD.FMOD_INIT_NORMAL;
result = FMODStudio.FMOD_Studio_System_Initialize(system, maxchannels, studioflags, flags, 0 /* null */);
check(result);
// load Banks from files
System.out.println("loading banks...");
for (String path : new String[] { "Master.bank", "Master.strings.bank", "Vehicles.bank", "SFX.bank" }) {
PointerBuffer buf = stack.mallocPointer(1);
result = FMODStudio.FMOD_Studio_System_LoadBankFile(system, path, FMODStudio.FMOD_STUDIO_LOAD_BANK_NORMAL, buf);
check(result);
System.out.println("loaded " + path);
}
// select an Event
long event;
{
PointerBuffer buf = stack.mallocPointer(1);
result = FMODStudio.FMOD_Studio_System_GetEvent(system, "event:/Vehicles/Car Engine", buf);
check(result);
event = buf.get(0);
}
// create a new Event instance
long eventInstance;
{
PointerBuffer buf = stack.mallocPointer(1);
result = FMODStudio.FMOD_Studio_EventDescription_CreateInstance(event, buf);
check(result);
eventInstance = buf.get(0);
}
// start playing the instance of the event
result = FMODStudio.FMOD_Studio_EventInstance_Start(eventInstance);
check(result);
// set a parameter on the instance
int ignoreseekspeed = 0;
result = FMODStudio.FMOD_Studio_EventInstance_SetParameterByName(eventInstance, "RPM", 2400, ignoreseekspeed);
check(result);
FMOD_3D_ATTRIBUTES attr3d = FMOD_3D_ATTRIBUTES.malloc(stack);
FMOD_VECTOR v = FMOD_VECTOR.malloc().set(0, 0, 0);
FMOD_VECTOR vListener = FMOD_VECTOR.malloc().set(0, 0, 0);
FMOD_VECTOR vVelocity = FMOD_VECTOR.malloc().set(0, 0, 0);
// Forwards orientation, must be of unit length (1.0) and perpendicular to up.
FMOD_VECTOR vForward = FMOD_VECTOR.malloc().set(0, 0, -1);
// Upwards orientation, must be of unit length (1.0) and perpendicular to forward.
FMOD_VECTOR vUp = FMOD_VECTOR.malloc().set(0, 1, 0);
float f = 0;
FMOD_3D_ATTRIBUTES attr3dListener = FMOD_3D_ATTRIBUTES.malloc(stack);
boolean running = true;
while (running) {
// update location of event instance to (x, 0, 0)
f = (f + 0.1f) % 5;
v.set(f, 0, 0);
attr3d.set(v, vVelocity, vForward, vUp);
result = FMODStudio.FMOD_Studio_EventInstance_Set3DAttributes(eventInstance, attr3d);
check(result);
// update location of listener to (0, 0, 0)
attr3dListener.set(vListener, vVelocity, vForward, vUp);
int listener = 0;
FMOD_VECTOR attenuation = null; // no idea what attenuation is
result = FMODStudio.FMOD_Studio_System_SetListenerAttributes(system, listener, attr3dListener, attenuation);
check(result);
// key call, should be called once per render frame
result = FMODStudio.FMOD_Studio_System_Update(system);
check(result);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// "The Studio System is shut down and released by calling Studio::System::release,
// make sure to call this before your game is exited."
result = FMODStudio.FMOD_Studio_System_Release(system);
check(result);
}
}
public static void main(String[] args) {
new MyApplication().run();
}
}
I haven’t yet tested how to correctly build and integrate this into the application, and how best to distribute an actual playable build to players – so this is still a work in progress.
]]>