• Pre-Release 0.1.1-pre-alpha 217917706a

    Liblast 0.1.1-pre-alpha

    unfa released this 1 year ago | 0 commits to main since this release

    This is a first groundwork version of the game rewritten in Godot 4.

    Download for Linux + Windows

    https://unfa.xyz/liblast/Liblast_0.1.1-pre-alpha.zip (ZIP - 506 MB)
    https://unfa.xyz/liblast/Liblast_0.1.1-pre-alpha.7z (7-zip - 325 MB)

    Both downloads contain the exact same data. If you can handle a 7-zip archive - please choose that to save bandwidth.

    How to run the game

    Extract the downloaded archive and run the executable suitable to your operating system (Linux or Windows).

    How to run a dedicated server

    You can start a dedicated server on Linux using the Liblast Linux dedicated server.sh script. Due to current issues in Godot it's impossible to run the game in a headless mode, so you need a display and usable Vulkan graphics to run the dedicated server. It's optimized to use as little GPU as possible and also show you a nice overview of what is going on in the game.

    You can start a dedicated server on Windows by (1) running the game executable from commandline with --dedicated-server argument, or (2) by creating a shortcut to the Liblast Windows.exe file that will add this argument. I wanted to make a BAT file, but I have no Windows to test this so I failed. Contributions are welcome :)


    • The damage system has been redesigned and rewritten (using Excalidraw, here's the archive of the document I've created). This is not a visible change, but it's a necessary restructuring for further development down the road. Before - nearly all the logic was placed on the Gun (Weapon.gd). This meant that the handgun checked what did the bullet hit, it decided if the victim should die, it sent info to trigger shooter's hit confirmation (crosshair and sound), and als owhat kind of article effects, decals and sounds to play. Now the logic is clearly separated. All damagable objects must have a take_damage() method that provides a clear unified path to communicate:
      • who deals damage
      • how much damage
      • what type of damage (so far there's just one, but in the future this will be important)
      • where does the damage come from physically (is now useful for bullets, but will be even more useful for explosions)
      • What point in space did the damage was applied to and under what angle to teh hit surface (useful for placing decals and particle effects)
      • what push force should be applied (this will be necessary for explosions)

    This will let every player class, shootable switch, or a decorative object to react in different ways to any type of damage the game throws at it. There should probably be some feedback if the collision has stopped the damage (bullet) - not sure how we'd implement water effects with shooting bullets or projectiles that can travel under water. This may need to be considered in the future design changes and adjusted.

    • The weapon model is now moving according to player movement. There's up/down movement when walking, There's a jolt when jumping and up/down, sway based on vertical velocity (hopefully this'll give players a bit more feel for what is their vertical velocity, especially when using the jetpack). There's aso extremely faint breathing bob, it should probably by made stronger as it's almost invisible.
    • The blood particles have been replaced with a dedicated texture that finaly isn't terribly ugly. The material Maker source file is in Asset Sources;
    • Dying Players now leave gibs behind - these are GPU Particles and use SDF collision with the level geometry. It's nice to see this working!
    • Player's camera is moved and rotated when they die to make it clear what's going on
    • Players have now clear visual feedback of taking damage (non-directional though). The "bleeding eyes" effect is done with a shader that generates the "vignette-like" shape with CleverMaths™. The shader is animated based on recieved damage and time. Dying players have a full blood-o-vision turned on and decay disabled.
    • Players spawning now shoud be unified across peers, as it's handled by a spawn() method in the Player.gd script, rather than in Main.gd. It seems that's not perfect yet, but well...
    • Players leaving the game was hopefully hardened against ghosts, but that proven to not be the case during playtesting with the team. The game needs to be tested more across unreliable networks or introduce artifical packet loss and ping to reproduce these bugs.
    • The crosshair now turns black if on a very bright background to make it clearly visible at all times. There's nothing mroe frustrating in a game that requires precise aim when the crosshair is not visible! (I've recenly played Half-Life: Opposing Force and that that was an issue with one of the weapons).
    • There's now a game version, FPS counter and Ping display in the bottom left corner. I've programmed a ping measuring feature, that pings the server every second. It's in ping() method in Main.gd. I think the code is pretty clever. Pings are sent with random tokens and the server sends the pings back with the same token, this ensures that pings are not mistakenly counted when they did not really arrive on time. This however limits the ping meter to 1 second, as there is no list of pings sent - there's only one token stored so if a ping does not arrive in 1 second, then another ping is sent, overwriting the stored token and invalidaing the previous ping entirely. This is obviously flawed, but that's the first implementation.
    • The map's lighting was tweaked to provide better shadows look (less blur) and take advantage of the newly added angle size for directional lights.

    Enjoy the game!

    • unfa