Skip to content

Latest commit

 

History

History
354 lines (265 loc) · 31.2 KB

HISTORY.md

File metadata and controls

354 lines (265 loc) · 31.2 KB

PRooFPS-dd Version History

NOT all versions have the ALP label, be careful! Meaning of "Latest ALP": that is the latest "Approofed für Lan Party" version that was actually tested on a LAN Party with at least 6 players.

v0.5.0 Private Beta (TODO, 2025)

A compressed build for Windows is available for TODO.

!!! WIP !!!

This version brings the following new features:

  • respawn countdown can be speeden up by mouse clicks.
  • frag table has new columns: player ranking based on K/D ratio, aim accuracy, etc.

This version brings the following bug fixes:

  • crash due to integer overflow when system uptime exceeded 49.71 days.

This version brings the following behavior changes:

  • auto-crouching for mid-air somersault is now enabled by default in the server settings. The reason is because the jump-crouch-jump key-combo is too difficult to be pressed on notebook keyboards.

v0.4.3 Private Beta (Dec 07, 2024, Latest ALP)

A compressed build for Windows is available for download here.

This version finally introduces footstep sounds during running.

The following bugs have been also fixed:

  • a connecting client terminated if it received a MapItemUpdate message before actually loading the map;
  • crash or unspecified behavior could happen in the following situation: a player picking up a weapon, scheduled for auto-switching to, while the game window is inactive, and then map change happens, and game window becomes active again, the previously scheduled auto-switch is executed, with invalid Weapon pointer.

v0.4.2 Private Beta (Nov 17, 2024)

A compressed build for Windows is available for download here.

This version does not change anything related to gameplay.
This version brings improvements to the map file format:

  • texture UV coordinates can be defined for each block, good for using texture atlas;
  • introduced decal assignment which creates decal/poster in defined position with defined size.

v0.4.1 Private Beta (Nov 11, 2024)

A compressed build for Windows is available for download here.

This version introduces an essential performance optimization, by implementing a generalized Object Pool.
This pool can be used to manage objects that are frequently created/deleted during gameplay, e.g. bullets.
The aim of this optimization is to reduce the time required to create or delete such object.
For bullets, when tested with a modified machine gun with 25 bullets/second firing rate, it resulted in 35x speed gain for creating bullet at the moment of shooting, but also in updating existing bullets there was a 2x speed gain noticed.

In this version, not only bullets but also a new kind of object is also managed by object pool: smoke!
Smoke is emitted in air by fired rockets.
Smoke amount can be configured in settings.

This version brings another optimization, related to the EventLister memory handling which now keeps entries in preallocated FIFO array instead of std::deque, even though std::deque is also very efficient.
Added also benchmark test for this. It shows ~50% speedup in both debug and release builds for the addEvent() function of EventLister.
EventLister class is used for: listing recently picked up items, listing recent player kills, listing recent AP/HP and ammo changes.

Performance testing has also been introduced with the EventLister benchmark to be the first kind of such.

Finally I split the Settings menu into 2 tabs so it looks cleaner.

I also added an About menu into the main menu where some credits are made.

v0.3.0 Private Beta (Sep 29, 2024)

A compressed build for Windows is available for download here.

This version brings 2 new weapons:

  • Knife: the first melee weapon in the game, always available for the player.
  • Pusha: a pistol-style, annoying weapon, which basically just pushes the hit player without doing much damage.

A background music has been also added to the main menu.

v0.2.8.0 Private Beta (Aug 26, 2024)

A compressed build for Windows is available for download here.

This version brings the following new features:

  • Weapon Auto-Switch: now ammo/weapon pickup can also trigger auto-switch. This pickup-induced auto-switch behavior can be also fine-tuned in configuration, distinguishing between picking up new or already owned weapon. CVARs: cl_wpn_auto_switch_when_picked_up_new_wpn, cl_wpn_auto_switch_when_picked_up_any_ammo_empty_mag.
  • Weapon Aim Accuracy: weapons now have their specific aim accuracy properties (base accuracy and recoil factor). The final aim accuracy also depends on player movement and pose. The server can be configured (CVAR: sv_moving_affects_aim) to include or exclude player movement in the final aim accuracy calculations. This can change between a more Counter-Strike-style or a more Quake-style aim accuracy model.
  • HUD: XHair: xhair size is now dynamically scaled to the momentary weapon aim accuracy.
  • HUD: XHair: xhair size is now scaled based on display resolution.
  • HUD: XHair: the color of the xhair changes to gray during firing cooldown (the minimum time needed to elapse between 2 shots).
  • HUD: XHair: when xhair is moved, it is highlighted on the screen for easier tracking in an intense fight scene.
  • HUD: HP/AP/Ammo Changes: the last 3-3 HP/AP/Ammo change is also visible next to the current HP/AP/Ammo values. For example, if player is injured by falling damage or by being shot, the amount of HP decrease is explicitly showed.
  • Weapon Sounds: all weapons have reload sounds now. An attempt to fire an empty weapon will trigger a dry fire sound.

v0.2.7.0 Private Beta (Aug 01, 2024)

A compressed build for Windows is available for download here.

This version brings the following 3 new features:

  • Armor: player can now pick up a new item called Armor which gives some AP to the player. Armor gives protection over HP.
  • Weapon Auto-Reload: current weapon is automatically reloaded if spare ammo is available.
  • Weapon Auto-Switch: if current weapon runs out of ammo, the game auto-switches to the next best weapon. Based on config, can switch to loaded or reloadable weapon.

Note that weapon auto-switch does not work yet when we pick up a better weapon, currently it just switches when the current weapon goes empty.

v0.2.6.0 Private Beta (Jul 14, 2024)

A compressed build for Windows is available for download here.

This version brings the following new features:

  • Maps: Jump pad: this is a new map element that can launch the player into the air. Added to WARhouse and WARena to show how it works, but in the future more fun maps can be built with it;
  • HUD: picked up items are now displayed on the right side of the screen;
  • HUD: text size is adjusted to screen resolution / window client size, and from now on fullscreen mode is officially supported;
  • Physics: Fall damage: now player can take damage from falling off from too high. The amount of damage can be configured on server-side (CVAR: sv_fall_damage_multiplier);
  • Physics: Smoother Strafe Start;
  • Audio: Some new sounds are added to the game: map item pickup sounds, high fall yelling sounds (The Howie Scream and Wilhelm Scream), landing on ground sounds;
  • Audio: Now players can hear sounds generated by other players, e.g. yelling, firing weapons, etc;
  • Audio: All sound effects are now 3D positional;
  • Audio: can be turned off in Settings menu (CVAR: sfx_enabled).

This version fixes the following issues:

  • Audio: no sound effects when the game was restarted in fullscreen mode;
  • Physics: jump-induced forces were not reset when player fell out of map bounds, resulting in being pushed again by the same force after respawn;
  • Physics: respawn sometimes resulted in mispositioning the player from the selected spawn point.

v0.2.5.0 Private Beta (Jun 18, 2024)

A compressed build for Windows is available for download here.

This version brings the following new features, all related to the HUD (Heads Up Display):

  • Minimap: a small rectangular area in the top left of the screen representing the map, with a smaller rectangle representing our viewport, and dots representing all players' position on the map (enable/disable by CVAR gui_minimap_show);
  • Player's HP and AP is now displayed in the bottom left corner of the screen, above the current weapon;
  • Death/Kill events finally appear in the top right corner of the screen;
  • when player is killed by another player, the killer's name, HP and AP saved at the moment of kill is displayed under the respawn countdown timer so no need to ask "how much HP left?";
  • XHair: when the xhair is hovering over another player, the targeted player's name, HP and AP is displayed under the xhair (enable/disable by CVAR gui_xhair_identifies_players, transparency CVAR gui_minimap_transparent);
  • XHair: when our weapon runs out of loaded bullets, xhair changes its color to red;
  • XHair: blinking during reloading our weapon;
  • Frag Table: finally rendered by Dear ImGui instead of the legacy text rendering method, using the Table API of Dear ImGui, where oversized contents within table cells are not overlapping other cells, player name column is dynamically sized to player names, and in case of oversized name, it is displayed in an intelligent shortened way. Because of this, finally I could remove the 10-chars player name restriction as well (changed it to 44).

This version fixes the following bugs:

  • When a client player's weapon received state update from server, and the player was dead, the weapon could re-appear during the respawn countdown.

v0.2.4.0 Private Beta (May 22, 2024)

A compressed build for Windows is available for download here.

This version brings the following new features:

  • Frag Limit (CVAR: sv_dm_fraglimit) and Time Limit (CVAR: sv_dm_timelimit_secs) can now be set in GUI when creating new server;
  • Frag Limit, Time Limit and Remaining Time in seconds are now displayed on client-side too above the Frag Table;
  • Clients with only matching game version can connect to the server, other clients are rejected by server.

This version fixes the following bugs:

  • When a player died at a map item location and the item respawned during the player's respawn countdown, the player immediately picked that item up after respawning at a DIFFERENT location;
  • When a player died during reloading a weapon, the weapon after respawn could had illegal amount of unmag bullets;
  • Frag Table was showing default 0 values for all camping (not moving) players on a client who just recently connected to the server (updates came only when players made any input);
  • After a played died, "Waiting for Respawn" countdown was still visible when the game has already ended and restart is expected;
  • Bullets were not deleted when game ended, instead they continued their travel after game restart, causing potential damage to players.

v0.2.3.0 Private Beta (May 06, 2024)

A compressed build for Windows is available for download here.

All changes in this version are related to player respawn functionality.

This version brings a new feature called player invulnerability:

  • when a player is invulnerable, their player object is blinking so everyone knows the player is invulnerable;
  • when a player is invulnerable, cannot be killed by bullet or explosion, but can still die if falling out of map boundaries;
  • when a client connects to the server, its player object becomes visible to all other players even though the client is still loading resources thus unable to move. In previous versions other players could already kill the connecting player during this small time window, this is not possible anymore. All players are now always invulnerable until fully loading everything.
  • based on server configuration, any respawning player is invulnerable for a very short period of time, so they cannot be killed right at the moment of respawn. This respawn invulnerability config is stored in CVAR sv_dm_respawn_invulnerability_delay and independent of the abovementioned default invulnerability of connecting players. Can be changed from menu GUI as well.
  • in the future a new special map item type could be also added, giving the player invulnerability for a short period of time.

Another small feature is the configurable respawn timer:

  • server can configure the number of seconds a player needs to wait to respawn in the new CVAR called sv_dm_respawn_delay which can be also set in the menu GUI.
  • As stated for the previous version, the possibility of using the new GUI library for In-Game GUI/HUD has been added. Now the first actual visible change has been done: after the player dies, a progress bar is shown as a respawn countdown.

Some under-the-hood changes:

  • FTR: Server Config Sent to Clients: a new message type is added serving for sending relevant server configuration to the clients. For now this is used by the client to properly display the respawn countdown progress bar because the respawn delay is configured on server side. In the future this message type can be used when listing servers with their basic config values.
  • FTR: Sounds in Weapon File: previously hardcoded file names were used for playing weapon sound effects, now these are specified in the weapon text files.
  • FTR: Replicating Weapon State to Clients: in previous versions clients did not know about the state of their current weapon, now server replicates it to them. This is a prerequisite to some upcoming feature such as visualizing weapon reload on client side (currently weapon reload does not have any visible effect).
  • FTR: CVAR for Max Framerate: a new CVAR gfx_fps_max is added to the configuration which controls the maximum framerate. Previously 60 was hardcoded, now it is possible to change it from the config file. This is still serving development benchmarking purposes only, so this config is not accessible from the menu GUI.

v0.2.2.0 Private Beta (Mar 26, 2024)

A compressed build for Windows is available for download here.

This version brings a new feature and a bug fix:

  • FTR: Salto/Somersault: the player is now able to perform on-the-ground or in-air somersault/salto which greatly improves the agility and mobility since not only movements become faster but jump altitude also increases. The somersault-induced jumping force multiplier and way of triggering the in-air somersault are configurable on server-side for more flexibility.
  • FIX: Illegal Jump Height: since the introduction of crouching in v0.1.6, there was a way to reach illegal high altitude by crouching in the air at the proper moment during jumping up. The reason was identified and the bug has been fixed. As of today there is no known corner case when reaching illegal altitudes is possible (rocket jumping is always a legal way).

Some under-the-hood changes just to mention that are fulfilling prerequisites of some upcoming new features:

  • FTR: Death/Kill Notification: in previous versions there was no explicit way for the clients to learn about death of other players, even though there was an implicit way, it was not useful for clearly communicating who killed who. In this new version the server explicitly sends this information to clients as a new type of message, which is a prerequisite of upcoming feature of showing this info on screen.
  • FTR: Fall Duration and Height: the duration and height of falling down are now calculated on server-side, which is needed by adding fall-damage, temporal firing inaccuracy and yelling sound in the near future.
  • FTR: In-Game GUI/HUD: since v0.2.0.0 a GUI library is used for implementing the Main Menu, but during a game session that was unavailable for displaying GUI elements. In this new version the GUI library can be used also during a game session, which will enable adding UI elements and also replacing the current legacy text rendering implementation that has been around in the graphics engine since 2014 (and probably slower than the library's implementation).

v0.2.1.0 Private Beta (Mar 17, 2024, ALP)

A compressed build for Windows is available for download here.

This version brings 4 major improvements:

  • GUI/Menu: the game starts with a graphical user interface, a main menu where settings can be changed, server can be created or joining to a server is possible without the need of editing the config file!
    No need to start the game in explicit server- or client mode, everything is available from a single place!
    The Mapcycle is also easily modifiable without manually editing the file.
    A new CVAR gui_mainmenu has been added just in case someone wants to turn this feature off (regression tests also turn it off from command-line).
  • Config File and Mapcycle Save: the game automatically saves the changes to the config file and to mapcycle.txt so modifications stay persistent.
  • Bazooka: from the original PR00FPS, an easy-to-use rocket launcher has been added to the game! This is the first weapon that brings fascinating explosions to this game! And it not only shoots explosive rockets but also features per-bullet reload, a property that was not used for the previous weapons. It which means 2 things:
    • the first thing is obvious: reloading rockets is done one-by-one, unlike with other weapons where 1 magazine is loaded at once;
    • reloading can be interrupted anytime by shooting a rocket. This behavior is same as with the shotguns in CS 1.6!
  • New Map: Mutans: the 3rd official map of the game is finally here, created by the mighty elmisto! This map is a tribute to the legendary Mutáns-Klán, a team of PRO Starcraft playerz.

v0.1.6.1 Private Beta (Dec 29, 2023)

A compressed build for Windows is available for download here.

This version addresses 2 issues:

  • FIX: clients could not reconnect to server after map change due to player name collision resulted in terminating the server;
  • FIX: V-Sync was always enabled even when gfx_vsync CVAR was false.

A regression test has been also added that is triggering map change in loop with 3 players.

v0.1.6 Private Beta (Dec 16, 2023)

A compressed build for Windows is available for download here.

The major improvements in this version are related to gameplay:

  • Map Change with Mapcycle Support: in gamedata/maps/mapcycle.txt a list of maps can be made, and the server instance can easily initiate map change to the next map in the list by the 'M' key;
    Connected clients are automatically notified and load the requested map, and connect back to the server;
  • Players with custom names: you can specify your name in default.cfg by changing the cl_name CVAR. In case of name collision, the server will assign a unique number to your name;
  • Crouch/Duck: players can now crouch/duck by pressing the left CTRL key, this way they can go into small tunnels or hide behind a box easily;
  • Loading Screen: during map loading, a loading screen with the game logo and progress of loading in percentage is shown.

v0.1.5 Private Beta (Nov 15, 2023)

A compressed build for Windows is available for download here.

The major improvements in this version are related to gameplay:

  • Player control is easier and feels much more natural due to the changes related to jumping and falling;
  • Player is able to control the mid-air strafing similar to CS 1.6 and QIII, for that 2 new CVARs are created:
    • sv_allow_strafe_mid_air: for CS 1.6/QIII-style mid-air control;
    • sv_allow_strafe_mid_air_full: for Super Mario style mid-air control.
  • Camera:
    • Immediately repositioned when player respawns;
    • Kept within map bounds, so players know earlier when they reach an edge of the map;
    • Follows the player much closer, this is an improvement to the pre-v0.1.5 behavior;
    • Follows both the player AND the crosshair, which is a change and the default behavior from now on;
    • Tilts when repositioned, this gives a bit more feeling of being in a 3D environment;
    • Created 2 new CVARs for configuring the abovementioned behaviors:
      • gfx_cam_follows_xhair: true/false to control camera following crosshair;
      • gfx_cam_tilting: true/false to control camera tilting.
  • Crosshair is kept within window area;

The following bugs have been fixed:

The following bugs got RCA and scheduled to be fixed later:

Major under-the-hood changes:

  • FTR: from now server doesn't need to send user updates to clients in every tick. This is for having higher tickrate for more precise physics while keeping server->client traffic low. For this a new CVAR is introduced: cl_updaterate;
  • FTR: from now multiple physics iterations can be run within a single tick. This is for having more precise physics when a lower tickrate is configured. For this a new CVAR is introduced: physics_rate_min.

Debug/Convenience changes:

  • FTR: Server instance shows per-client network stats in the frag table;
  • a PRooFPS-dd-as-client.sh is added for Linux, similar to PRooFPS-dd-as-client.bat for Windows.

v0.1.4 Private Beta (Oct 13, 2023)

A compressed build for Windows is available for download here.

The major improvements in this version are the networking improvements that solved all the networking-related problems experienced with v0.1.0:

  • client side rate limit: sending packets are limited so a single client is not be able to flood the server with too many packets;
  • server side rate limit 1: as a protection, server also ignores packets arriving from a client with higher rate than a predefined rate limit;
  • server side rate limit 2: server sends out updates to clients also in rate limited fashion, to avoid too much load on the network, and causing unnecessary big load on clients;
  • don't send unnecessary info: bullet travel updates are no longer sent by server to clients as from now clients also simulate bullet travel.
  • variable packet size: packets had unreasonably fixed big sizes in previous versions, from now their sizes are much smaller and variable as actually required.

Comparison of packet rates and used bandwidth between previous and this version, considering 8 players @ 60 FPS in a worst-case scenario described on the PGE Networking wiki page (every player is shooting and picking up items and many bullets are travelling at the same time):

  • in server -> client direction:
    • v0.1.0: 30 240 PKT/s with 8 104 320 Byte/s used bandwidth;
    • v0.4.0:
      • 20 Hz tickrate: 3 626 PKT/s resulting 88% decrease with 189 574 Byte/s used bandwidth resulting 98% decrease;
      • 60 Hz tickrate: 10 626 PKT/s resulting 65% decrease with 548 814 Byte/s used bandwidth resulting 93% decrease.
  • in client -> server direction:
    • v0.1.0: summarized 480 PKT/s from all clients with 128 640 Byte/s data rate;
    • v0.4.0: summarized 128 PKT/s from all clients resulting 73% decrease with 3 968 Byte/s data rate resulting 97% decrease.

This version was tested with 9 players with 20 and 60 Hz tickrate configs and didn't have any problem with either of them.
Contains NO changes to gameplay compared to the previous version except fixing bug of removed players after the first round.

v0.1.3 Private Beta (Aug 20, 2023)

This version contains no changes to gameplay compared to the previous version except that the movement of the player might have a slightly different feeling.
This version introduces a lot of changes to overcome network- and physics related issues experienced with v0.1 Private Beta during the LAN Party event last December: lost packets between server and clients and occasional huge jumps of players.

Under-the-hood changes:

  • Hardening Physics Calculations: results are now calculated in fixed timesteps, have become almost rate-independent i.e. updating physics with lower rate still generate same results;
  • Introduce Tickrate: physics calculations and updating clients are now tied to a new rate called tickrate that is independent of framerate, that is usually lower than framerate;
  • CVAR "tickrate" added for configuring tickrate: currently values between 20 and 60 Hz are supported. Value of 20 Hz reduces packet rate in server->client direction to 1/3 of original tickrate 60 Hz;
  • Regression Test Update: now regression test runs with 2 different tickrate configs: 60 and 20 Hz and expect the same result;
  • FPS-independent camera movement.

Expected changes in upcoming v0.1.4 Private Beta:

  • decrease packet rate in client->server direction by aligning input processing to tickrate;
  • further decrease packet rate in server->client direction by reducing bullet travel updates by doing bullet movement simulation in clients (in the form of prediction, still server remains the authoritive).

v0.1.2 Private Beta (May 13, 2023)

This version contains no changes to gameplay compared to the previous version, only massive code refactoring.

v0.1.1 Private Beta (March 10, 2023)

This version contains no changes to gameplay compared to the previous version, only changes that make testing for regression easier:

  • FTR: user profile config support: each user can have their own config files. Currently the config file of the first found user profile is loaded automatically. With this change, there is no more need for gyorsan.txt and server.txt. The following cvars (config variables) are supported so far: cl_name, cl_server_ip, gfx_windowed, gfx_vsync, net_server, sv_map.
  • FTR: command line support: cvars (config variables) can be also defined now in command line arguments. These override values loaded from user profile config file (except cl_name). Example command line to start up a client: PRooFPS-dd.exe --net_server=false --cl_server_ip=127.0.0.1
  • FTR: regression test: a simple regression test is added that starts up 2 instances of the game: 1 server and 1 client. User input (running, jumping, shooting) is simulated for both instances, and then some values (player data, frag table data, packet statistics) are checked to decide the result of the test.
  • FTR: testing mode: to support regression test, a testing mode has been introduced that can be enabled by setting CVAR testing to true. In such case, the game saves data to be evaluated by regression test to either RegTestDumpServer.txt or RegTestDumpClient.txt.
  • RFR: OPT: for creating map blocks and items, the PureObject3DManager::createCloned() of the graphics engine is now utilized to clone same-looking objects instead of creating them one by one from scratch. This way the memory usage and loading time decreases in both debug and release modes the following way, using map_warhouse.txt: system memory usage decreases by 30% (-16 MByte), video memory usage decreases by 25% (-2 MByte), map loading time decreases by 40% (-1-2 secs).
  • RFR: OPT: when loading a map and creating blocks, instead of reallocating array every time we are creating a new block, now we count the number of blocks and allocate array with the proper size only once, before actually creating blocks. This also supposed to speed up the loading.

v0.1 Private Beta (Dec 16, 2022)

On Dec 16, 2022, the game reached v0.1 private beta version, and a compressed build for Windows is available for download here.

The Visual C++ Redistributable Package installer is also included in the zip, it might be needed to be installed before running the game (use the x86 version).