Cosmoteer: A starship design, simulation, and battle game
cosmoteer.net
cosmoteer.net
I'm working on a game that is a little more "Space Factory" and a little less "Space Combat" oriented because I'm always the guy building the asteroid mining ships. So it's really great to see space games like ours getting some love on HN.
https://twitter.com/RecallSingular1/
Pretty early days yet. Using Godot and Rust for game dev, it's good fun so far. Hit me up if you have any questions.
Be sure to wishlist Cosmoteer on steam. Lets help our fellow indie devs.
https://store.steampowered.com/app/799600/Cosmoteer_Starship...
I switch between developing a pure simulation framework and working in Godot. The sim is 100% rust and then I have another crate which binds with Godot. There I can concentrate on updating the scene tree based on the simulation. Since only the simulation needs to be synchronized for multiplayer I expect this will work better long term.
I use these opensource bindings https://github.com/GodotNativeTools/godot-rust - Godot supports dynamically loading your game code in a DLL - Called "GDNative" - so you can use any compiled language.
For an old discussion of my Godot pros/cons see this post on Reddit. The community stepped forward and was very supportive, so I have decided to stay.
https://www.reddit.com/r/godot/comments/ch1xsx/i_might_switc...
I have also tried unity, I wrote a Rust chess AI against it for the "four kings one war" variant. My experience with Rust in Unity was more painful. For instance you need to restart the unity editor to reload the DLL. It crashes painfully often. Loading and switching targets can be very slow, etc.
https://www.reddit.com/r/rust/comments/c0e5yf/i_created_a_ru...
However, the Unity game itself works very well now and the rust story was very very good. Building on Mac after building on PC was trivial - it just worked. Setting up a new dev machine was just checkout, rustup, cargo test - it just worked.
Getting things to look nice in Godot is trivial. I really just set up basic lighting, ticked some boxes and imported some basic meshes from Blender. I'm only getting started and I think my screenshots look quite nice :D
It might also be because I was loading the DLL "manually" from C# - a fully fledged plugin might work better.
Mining outposts are small ships, which are automated to carry or transfer resources.
Your main factory is a space station. Or perhaps a mother-ship.
Internally each ship is kind of like a small factory, similar but different from Factorio. Hopefully I can achieve similar depth.
Ships can be piloted, controlled like an RTS or automated.
10,000 x One tile of engine, one tile of gun, zero life support, zero crew. Allow the swarm to overtake you.
Few games could tempt me to create and maintain a Windows VM, but I'm already running the Steam client on my Linux boxes.
I'm a huge fan of Lutris these days; community participants wrap the above advice into install scripts, and it's surprisingly common for things to magically Just Work (tm).
Personally I found Starship Corporation (no relation) to be the best ship design "game" I've yet seen.
Does the network protocol pass unsized integers or data pointers between clients? What other CPU architecture dependency might prevent 32-bit and 64-bit clients from playing together?
Perhaps you need to either switch to a deterministic physics approach with fixed point math or do some research on float determinism (which is much harder).
Or, give up on lockstep and move to client-server replication with prediction on your own ships?
https://store.steampowered.com/hwsurvey/Steam-Hardware-Softw...
But I'd be OK with this limitation :)
- Making C#/.NET floating point deterministic across x86/x64 is not possible, there's no way for force the JIT to output a specific instruction set.
- Client/server with prediction works for games that have relatively low numbers of objects that need to be synced (i.e. most first-person shooters). It doesn't work well when a game has thousands (or in Cosmoteer's case, tens of thousands) of individual objects that need to be synced, the bandwidth and CPU costs of keeping those synced is astronomical. Originally that's how Cosmoteer's multiplayer used to work, and it was a disaster, plus the code to keep everything in sync was insanely complicated.
- Switching to fixed-point is the only remotely-viable option you suggest, and I've strongly considered it in the past. But it'd be a huge amount of work to port all of the floating-point code to fixed-point, and there would likely be a significant performance loss in doing so. Since 32-bit users are only about 2% of all Steam users, I think it's not worth doing.
4 bits per object - Reload / capacity status (This is mostly visual for other player's ships)
2 bits - number of people manning module
Damage (4 bit?)
Location (x y), current orders (move, direction, orbit) per Ship
For bullets:
Bullet / missile location, velocity / goal.
Most ships have 20-200 modules? So one packet (~400 bytes) per ship? Plus a "Ship came into visual range" packet with ship layout data.
All the little people, treat them like a client-side effect. Completely predicted for other people's ships. Run the same logic on both based on the network synced capacity status.
Either change your model to predict X time to move resource from A .. B (carried by a person) or have each client claim time spent. It is highly unlikely that a player will observe another player's ship and say "But that person just carried X to Y but the levels didn't move!" So it's a case of each client saying "My ship's module's levels (based on crew) are currently XYZ" and the server / other client going "Hmmm, yep, seems feasible. OK"
It can be done, it's not impossible. Just work - it's a design choice.
I would argue that as long as the ship (as a whole) is controllable but still fully customizable people won't worry about faithful sync of other player's ships. And they will only care about accurate people in the ONE ship they are currently editing (fully zoomed in, no roof).
Though I guess the errors might be too small to notice for most object in this game.
To be more specific, some CPUs will increase or decrease the accuracy of floats in some situations.
Different CPU instructions will do different things. For instance a "multiply and add" instruction might store a high resolution float, where a different approach would suffer an expected rounding error.
If two computers get different answers in the maths, their simulation of the world drifts apart over time. Then they start to disagree on what is happening.
When you change compiler settings, platforms (32/64/windows/mac/linux) the compiler is likely to make different choices about which instructions to use where.
On the site, I see a Steam link on the bottom of the page. And on the Steam page it says "download demo". Maybe this is just a way to get feedback + build a community before rolling out a paid version?
Even if that is just in the sense of "right, current version is the demo from now on, and all future versions are the paid version"
I suggest you gate some key upcoming features and hold on to those until you have a few to "launch" into paid mode.
I'd happily chuck $10 at something like this.
Just be transparent about where you are and what your plans are.
That said, it may be hard to switch now without garnering those negative reviews you are talking about.
Also, I love your game :D
https://store.steampowered.com/app/758930/Captain_Forever_Tr...
It's specifically saddening because we're all so trained to think about these problems and tend to suck at considering them in higher dimensions, and getting better at things like that is fun and helps promote good thinking skills.
But the lack of 3d is a hard one to solve from a game design standpoint. It's hard to build an intricate 3D object using a 2D monitor and they are more complex to visualize and change.
Bear in mind that circuit boards are actually 2.5D - they have up to 8 layers and have tracks inside, connected by either parts holes or "vias."
When it comes to diagrams, I think that is just because we use 2D paper, so we make 2d diagrams. If we had a nice 3D representation I think more people would use that.
Then again, it seems like overkill since you can split a circuit diagram into submodules: power supply, microcontroller, peripherals, ...
The difficulty in most spaceship games is that you create a "border" of hull, engines, etc. You then put in the "filler" for instance crew space, corridors, chairs, guns. What to do when you have so much "filler" that the "border" becomes too small? In Space Engineers I find this problem hard to solve as a player. It's less so in the 2D Cosmoteer.
* I really enjoyed it.
* It took me a bit to get out of the mindset of games where you slot your upgrades into predefined places on a ships body. Until I got past that, I didn't properly appreciate how cool the game was.
* I found it hard to actually view battles and see what was going on. At a range where I could see the ships, I couldn't really see anything about them. I often wanted to track a ship or to track-with-offset a ship (if I had ships chasing it down), but I couldn't really get the hang of setting my viewport very well. After a while, I got used to speeding up time and then dropping it down to 1/4 as soon as my ships made contact, and that helped a bit, but it was still difficult for me. I feel like having a ship selector of all ships in radar range that I could page between could be good, and maybe make it easier to chase ships down with the viewport.
* While it's pretty easy to know if you need more crew, or power (because of the indicators), it's a lot harder to know if your ship is suffering because of insufficient maneuverability.
* There were a lot more friendly fire events and collisions with my small formation of ships than I thought was really reasonable. I love the possibility of it, but in ships crewed by reasonably intelligent crew, it should be obvious to stay out of the huge plasma beam firing at the other ship.
* I did enjoy discovering that due to my placement, if one of my missile launcher bays fired during a particular maneuver, the maneuvering thruster would blow my missile up.
I wonder how the AI behaves... Dwarf Fortress is such a gem of a game.
https://web.archive.org/web/20190917180019/https://cosmoteer...
If you can't download the standalone version, try downloading the "demo" on Steam, which despite being called a demo is really just the same version as the standalone.
https://store.steampowered.com/app/799600/Cosmoteer_Starship...
Fun game but it had no progression or activities. Very repetitive and not enough reason to differentiate your builds. Hopefully this game adds more content.
Do you control your movements and shooting in this game? Looks pretty fun
You can totally control your ship (as long as you activate the 'advanced controls' over settings/finish the tutorial), focus certain guns to shoot somewhere on the enemy ship while others target elsewhere, or manually drive and aim your ship with Direct Mode!
Ended up blowing eight hours building spinning laser death platforms. 10/10
I am curious. I was an early web app developer who missed the migration to mobile. I have always regretted it and am playing catch up.
Source: https://newzoo.com/insights/articles/global-games-market-rea...
There is a significant difference in the market and experience of mobile and PC gaming.
You may as well ask why people still develop for console, when they’re basically just stripped down computers.
Also, a complex game like this is not well suited for a mobile game. The mobile interface is just too limited. The constant CPU demands are just too great.
Quote: Will there be a Mac and/or Linux version? Eventually I plan to release Mac and Linux versions of Cosmoteer. But right now, I'm just trying to make Cosmoteer as stable as possible on Windows before working on other platforms.
Why is this game free? Will it always be free? It's free because, right now, getting a lot of feedback from players and building a strong community is more important for the game's long-term success than making a small income. Eventually, Cosmoteer will become a paid game, no longer available for free.
I understand why indy devs get crushed ;)
I wish games had better cross platform support, but the motivation just isn't there monetarily and these guys tend to be financially strained as is.
The fact that windows-only is a poor business decision isn't obvious to me.
This is the tragedy of the commons.
We all have our own trade-offs to make. I don't blame anyone for focusing on where the money is. In the long run though, we'd all be better off with a competitive market than stuck with a single dominant platform.