With so little time (and so little Godot programming knowledge), I want to make a solid list of doable project objectives for Uncontrollable Spaceship.
I have a lot of ideas for Uncontrollable Spaceship and my original intent was that it would have many or all of these as game modes – it could be a:
- puzzle game
- “precision” flying game
- fight the aliens game
- destroy stuff game
- 2 player racing game
The demo I did was with two players with the idea it could be a racing game. I think that works best and is most doable – I don’t have to invent puzzles or come up with any kind of AI logic.
So the first scope decision is to limit the game to a two player racing game.
Scope decisions based on what I can do:
The game needs to have different screens
It needs a title screen and each game level needs to have its own screen. I have not done this yet in Godot and my guess is that I do it by making each screen its own scene and then have some game logic that instances whichever scene is appropriate. I will have to find some reference on this because I don’t understand exactly where a Godot program “starts”. At least to me, it isn’t as straightforward as say “Line 10” in a BASIC program.
I think this might be reference I need:
Godot 101 – Part 4: Instancing Scenes
The game will not have any scrolling
I had found a great tutorial on making a multi-camera game (so each player has their own independently scrolling screen showing the area around their spaceship). However, that seems like more than I’m going to get working in a weekend – especially since it will take more time to design an even larger gameworld.
However, this would be my go-to reference for split-screen scrolling:
Godot 3.0: Splitscreen Demo (Using Viewports)
I’ve had some difficulties with figuring out how to set up multiple screen resolutions for the same project in Godot. This comes up when I’m trying to make a browser playable version of something and also make it compile to a stand-alone. I think a stand-alone end product is better as a final product (and my laptop is not powerful enough to run browser based games well). However, I’d like to be able to post web-playable updates as I make progress.
The current demo is set up as 600×600 for playing in the browser. My laptop has a screen resolution of 1600×900 so this works for playing in-browser.
I think for this game jam I’m going to make it 800×450 for playing in the browser and 1600×900 for playing as a stand-alone. I’m hoping that by making it a simple multiply-by-2 that I’ll be able to get that to work.
The space ships in the current demo are actually SVG graphics I drew in CorelDraw and then imported into Godot. I couldn’t set the color in CorelDraw, it just imports as black. And I couldn’t change the color in Godot.
I don’t know why. In the post I made about the Blob generator, it exports SVG files in color that Godot imports just fine.
What I like about the SVG spaceships is that they rotate nicely and don’t show any weird pixel artifacts when they rotate. I don’t know how well that will work with bitmap graphics, but I think I’m going to have to try.
For the other objects, I’m going to need to find something better than colored rectangles.
I need to create zones and some way to inform the player where the zones are and which one they have to race to next. I also need to figure out collision detection so that the game knows when the player has reached a zone.
So far I haven’t dealt with collision detection at all — the physics system handles all the collisions and bouncing automagically.
I know there are flags for all kinds of collision detection that are built in.
I’ll need to have a “start your engines” and countdown timer that appears in the beginning of each race before any action happens.
I’ll need a way for players to get out of a “stuck” situation. For example, if a player falls to the ground with the ship lying on its side then it is usually impossible to get the ship back off the ground. There are too many ways a player can get stuck — caught on the ground, with objects fallen on them, stuck between objects, or even stuck under the other player’s ship. My solution for now will be a self-destruct button that the player can press to blow up their ship and restart at the starting grid. If this were a scrolling game that involved travelling over a larger map, I’d need a better solution — but I think that the small maps dictated by the screen size make it OK to restart the player from the beginning. So players will now have 2 control buttons — a THRUST button and a SELF-DESTRUCT button.
I think I have a better grasp of the scope of what I’m trying to accomplish in a weekend. Now to get working.
Interesting note on Godot: I am very accustomed to programming in a language and not with game objects and scripts. I don’t have any idea how to copy useful pieces from one Godot project to another – I don’t even know if I can have 2 projects open simultaneously.