After a series of iterations, the prototype of the "space" jrpg, developed on the Godot engine, has finally grown to the first demo version. Win64 and linux options are available. Below are the details of what was, what was and where the little starship flies.
Frame
The basic gameplay sketches took shape pretty quickly when I moved from thinking through the basic concepts to putting together a game prototype inside the game engine. First appeared the start screen, the scene of the global map with movement and the ability to call the inventory. At the same time, some initial architecture was thought out - how exactly to load individual modules and exchange information between them.
Then the battle screen appeared, launched first by a separate button, and later tied to a collision with enemies. Later, the planet screen was added, the planets by that time had an informant on the global map, where the visit button was added. Other types of interactive objects spun off from the informant, for example, a station that does not imply an entrance to its internal screen, but sometimes has some kind of external functionality with the ability to click or select something. Or the resources being picked up - cosmic pollen.
Next, it was required to realize the maximum possible batch of heroes (choosing between 3 or 4, I still chose the concept of a batch of 3), which was done. In the process, the display of damage was added, the choice of targets for the attack, some music.
At this stage, it was already possible to upload a mini-demo, but I decided to first finalize the project to a more complex state, so that it would be better understood what it was and how it should work approximately. Along the way, adding some content and some embellishments, such as voice acting, animations.
You can read more about the concept and basic implementation in these articles:
Microspace project
Iterative game design, Godot and the world of small planets
Prototype development
Let's take a look at the different areas in which this development took place:
Combat The
number of available ships gradually increased, as did the number of available enemies, so I rewrote their combat representation and control logic step by step into a more universal version. Which was not so difficult, due to the fact that such a course of events was foreseen and something in the code was optimized in advance.
For winning a battle, the party receives a certain amount of one of the 4 types of resources (essence, mana, dna or matter), depending on the type of enemy. The group of enemies also has a common type. Characters who contributed to the damage gain experience (although this does not give them anything yet).
The damage display was initially implemented through a 3D view - displaying a viewport with a damage line on a polygon facing the camera. This worked more or less, although the implementation was technically not very pleasant to me, since everything is a little confused with the viewport - you need to hang it closer to the root of the scene so that there are no failures and it is a little more difficult to check how the effect looks like than with a simple 2D-line output. Therefore, I did not want to start many viewports, I did just one, moving the polygon that displays it where necessary, simultaneously increasing / decreasing. But one must also think that someday there will be abilities that cause massive damage and it will be necessary to display at least three icons with damage at the same time (although even here you can contrive by making a kind of animation wave from the same object or even a couple more viewports).
However, when I added a full screen mode to the prototype, the damage numbers there began to noticeably blur so much, so I wanted to consider other options for displaying damage even more. In principle, I could just fix the camera in battle, but for some reason I continue to retain the ability to turn it all the way in between waiting for an action.
So I ended up rewriting the damage output. Now the 2D lines cling to the projection of the position of the 3D object. Although there are also some nuances here, for example, if you turn the camera away, they will continue to be displayed, or if they are displayed continuously in each frame, that is, it is possible to hang the current camera in one position, but this is already solvable.
To speed up the testing process, a special, as if non-playable, button for automatic victory was made long ago if it was required to leave the battle. Also for a long time there was no way to lose. Then I added "freezing" of the ships when their stripe was reset to zero, and then a full-fledged implementation of losing the battle suggested itself. To do this, I first transferred the auto-win button to the category of full-fledged game options, with the only difference that now it has become an emergency auto-play button that starts the exit dialog. And then he added some flaws to automatically end the battle with zero durability of all ships, which also caused this dialogue.
After being defeated in a battle, the enemy disappears, and the durability of each ship of the party in the next battle will be equal to 10. By the way, there is no upper limit of durability yet and various treatments can be used to increase durability beyond the base values.
Ships and enemies
Everything is simple - it was three, now it is ten. Each had to set parameters and its own icon, as well as gradually include them in the gameplay and options related to the choice of ships. At first, new ships became available on the global map and in search on planets, then they were gradually integrated into the battle.
Opponents were also added, moreover, with different approaches. One enemy, a couple of different enemies, a pair of the same, a larger enemy with two attacks, a mini-boss consisting of several parts.
Starships in battle have the ability to make their standard attack. Her damage is meant to be fixed and tied to the possible future tiers of the ships. Also, a standard attack can be enhanced by a bonus to damage and / or a healing effect, then this is displayed next to the ship's indicators with small purple and green numbers.
The damage of ships and enemies is also additionally affected by the combination of their types. Representatives of the same types deal more damage to each other, while antagonists (pairs: magic / technology, divine / evolutionary) - less.
The four ships have personal abilities that can be used in battle. These are the Drifter (the ability deals damage and gives an increase to the next attack), Spira (flies into the future, one turn forward, receiving bonus damage to the next attack upon return), Trinity (just deals damage) and Otomo (spreads healing increases to next attacks).
A certain percentage of the ship's energy is spent on the use of abilities (at the moment this energy is not restored by anything). Other ships have the Shield stub ability installed in place of their personal ability, which plays an animation but has no effect.
Abilities and characters
If the ships are a kind of analogue of the main characters, then the characters they carry are a kind of analogue of the weapons of these heroes. One of the important points that I wanted to reflect in the project is the use of a system of identifiers, which give the effect of non-random chance, and with wider use, they can work to generate a psvedo plot. In simple terms, characters, ships and enemies have special IDs that allow you to calculate the result of the interaction of any of these objects and somehow use it.
At the moment, the use of this result is as follows. Firstly, every character and ship has a compatibility effect. That is, once on board the ship, the character may, for example, start to panic, fall asleep, or not understand how to handle his systems. Now the result of the "ship-passenger" connection and the possible additional effect it imposes is simply displayed in the inventory window. But this is not yet reflected in the participation of the character in battle.
Characters can be βattackedβ directly in battle through the βCrewβ option. This is not just a character performing a specific action, such as a specific magic spell or a shot from a weapon. This is a certain situation that entailed a certain amount of losses from the enemy. The connection "passenger-enemy" is already working here, which is interpreted by the outside world (in this case, the space sector) into one of nine consequences: # LIGHT, # DARKNESS, # MUSIC, # THEORY and so on. That is, the player can associatively imagine what the character did, what the result was with such a formulation (or maybe not - associations are optional, especially since they still work by themselves somewhere in the background).
Each enemy, respectively, has vulnerabilities or resistance to certain types of consequences. The damage from the actions of the crew is not affected by the combination of ship types, it is a separate alternative effect. If the consequences resulted in zero damage, then the ship receives a small bonus to its next normal attack.
Perhaps, in the future, the use of the identifier system will grow even more. For example, on the same planets, their own auras of meanings can operate, modifying the table of interpretations, but first you need to implement there some events in which identifiers would participate.
Some rare characters have active abilities for ships of a certain type. By the way, so far not all such characters have signed that they give some kind of ability (this mainly concerns those that are not currently in the main game mode).
Be that as it may, at the moment, the abilities gained from the transported characters are just losing the dummy effect (like most items). But one hero, Leto, has a passive ability, not tied to the type of ship, and it is already working.
Spira and the Drifter can also learn the abilities of characters of their types (although they do not have an effect yet), having fought with them once.
Items
It was always a matter of second priority to cargo, after the implementation for the characters was already ready. Basically, it all boiled down to showing their cells and moving item stubs between them. But later an activated item appeared, Alive, which restores 100 durability to the ship. By that time, I had just started making the "Hold" combat option, and I needed at least one item with some real effect.
As for the healing item itself, it was originally planned that it might have some charges and they could be replenished somewhere. In the end, I left one charge and made it so that this item can discharge when used and recharge again from the collected cosmic pollen.
Planet screen and missions
On the planets, you can find various processes and events taking place there. Some go under their own power from the very beginning, some are launched when the previous one is fulfilled or appear on a certain daylight hours. Among these events, there are already a couple of tasks launched with the help of the player, if he has the required amount of resources.
From the information on planetary events, you can switch to the ships tab, where you can view their hold and crew, and also take from one to three selected starships to the active party. There is also a small space on the planets for characters and objects, from where they can be moved inside ships or, on the contrary, dropped onto the planet.
Other
The "compass" option has been added to the inventory that is opened during space flights, which helps to fly to the selected point. A special pointer appears with the distance to the destination. This navigator only works in the main game mode.
In addition, in the inventory, you can turn on / off sounds and music, change the main boat in the current party, turn on / off the full screen, and also exit the game to the start menu.
The information about the crew and crew members and cargo in the inventory is simplified and cannot be moved during the flight. Actually, these are not time restrictions, but a game-mechanical feature - you need to change something, which means you have to visit the planet.
Special notifications now appear on certain light days. These days themselves are wasted by visiting any planet (in the future, you will need to fly between different ones to change the day).
The fonts of some elements have been gradually improved. A number of sounds have appeared - for battle, for the planet screen, for inventory. Naturally, I omit various little things, like adding a cancel button, but this, too, is not taken out of thin air and requires attention. As well as a large amount of completely invisible work to improve code or rewrite structures that visually change nothing.
Also, a blank was made for special zones, with a "realistic" flight and the scale of objects. You can find yourself in it during the game by touching a special object. Inside, you can fly a little on the Trinity boat with a slightly changed control, and to get out it is enough to fly to the border of this area.
Demo version
Just before the appearance of the demo, a sequential development mode was created for it, as the main version of the game - here the player receives one starting ship (Drifter) and begins to explore the sector, opening new starships to join the party. Thus, in this mode, you can open two more ships (Spira and Vanguard). There are three planets in the starting sector that can be visited. Having repaired a special station, you can move to the second sector and find another available planet there.
An early test version of the location, where various planets and enemies are placed more densely, is available in an alternative, less debugged game mode - all ships test. There, a choice of 10 existing ships is immediately available (up to three can be taken into the active party), there are more heroes / cargo and they are distributed differently. There may be some overlap of in-game parameters after exiting one mode and switching to another.
The innovations of the latest update are shown in a new video, where, in addition to the gameplay, elements of a teaser are added.
Video cuts of some previous updates
You can download the demo archive here (dropbox):
Win64 version (50 Mb)
Linux version (52 Mb)
Controls:
WASD - flight, mouse - camera rotation
Enter - open / close inventory while flying in space
Ships: 1 - Wanderer, 2 - Spira, 3 - Vanguard, 4 - Virgo Yaga, 5 - Muhh, 6 - Stella, 7 - Trinity, 8 - Otomo, 9 - Aquamarine, 10 - Giybel.