Releases: RedpointArchive/Protogame
Version 6.0.4
This is a minor patch release, which updates Protogame code for changes made in external libraries.
Changes
This updates internal Protogame code for changes made in the MonoGame and Protoinject libraries. There are no changes to the Protogame APIs that impact developers, and no bug fixes in this release.
Upgrading
If you are using Protobuild, you can upgrade Protogame by editing the version specified in Module.xml
and then running:
Protobuild.exe --upgrade-all
If you are using NuGet, you can use the NuGet package manager to update Protogame.
Installation
All packages both as dependencies of this package, and Protogame's available in general are now on NuGet. If you are using the latest version of Protobuild, you can install the package like so:
Protobuild.exe --install [email protected]
If you are not using Protobuild, just search for Protogame
in the NuGet package manager. You will need to install the dependencies manually, which are listed below:
- Jitter.Redpoint
- protobuf-net.Redpoint
- MonoGame.Framework.Redpoint
- NDesk.Options.Redpoint
- Prototest
- AStarPathFinder
- Protoinject
- Newtonsoft.Json
- HiveMP.TemporarySession
- HiveMP.NATPunchthrough
- HiveMP.Lobby
- HiveMP.Attribute
In a future version these will be pulled in automatically, but this is dependent on new features in Protobuild.
Version 6.0.3
This release arrives soon after the Global Game Jam 2017, and includes multiple improvements that were made during the creation of Super Ball Brawlers at the event.
Changes
This release primarily contains startup performance improvements, and expands the APIs available for controlling the physics system. A detailed changelog is listed below.
Features
- The performance of launching games has been greatly improved.
- Protogame now supports showing loading screens during the initial game load. This makes the game feel more responsive on launch. You can change how the loading screen is rendered by implementing and rebinding
ILoadingScreen
. Because of these changes, some of the overridable methods onGame
now occur before theIGameContext
, the world or the world manager is available. In particular, engine hooks now need to check ifgameContext.World
is null before attempting to access it, as it may not yet be available. To show loading screens, you must append a fixed render pass of typeI2DBatchedLoadingScreenRenderPass
, e.g.pipeline.AddFixedRenderPass(kernel.Get<I2DBatchedLoadingScreenRenderPass>());
. - An assembly-level
ConfigurationAttribute
attribute has been created. When at least one assembly contains this attribute, game startup will use game configuration classes specified by this attribute. You can add as manyConfigurationAttribute
s as you like, to as many assemblies as you like. UsingConfigurationAttribute
is much faster than the previous method, as Protogame no longer needs to scan for all implementations ofIGameConfiguration
andIServerConfiguration
. You can use this attribute by placing the following directive after a using block but before a namespace block:[assembly: Configuration(typeof(NameOfYourGameConfiguration))]
. If no attributes are found, Protogame falls back to the more expensive type scanning method to locate implementations. - There is a new virtual method on
CoreGame
calledPrepareGameWindow
which allows you to center, reposition or resize the game window during game start. - Audio instances now make a
Volume
property available, which allows you to change the volume of a sound before, during or after playback. - Many properties and behaviours of the physics system can now be controlled by the
IPhysicsWorldControl
interface. You can use this interface to change the gravity of the world and set custom callbacks for determining restitution and friction during collisions. You can also disable speculative contacts in the physics system, or tell it to ignore angular velocity during collisions. - 3D deferred render passes can now be configured such that they can be layered on top of 2D render passes. This allows for cheap skybox techniques where you render a 2D skybox in a batched or direct 2D render pass, and then render your world in a 3D deferred render pass after that. To do this, set the
ClearDepthBuffer
property totrue
and theGBufferBlendState
property toBlendState.AlphaBlend
on the 3D deferred render pass. - The alpha value in colors within a 3D deferred render pass are now used correctly, providing the blend state is configured such that alpha values are used. This allows for rendering of semi-transparent 3D worlds in a 3D deferred render pass.
PhysicalBaseRigidBodyComponent
can now be derived by your own classes, making the implementation of custom physics shapes much easier.- The
Material
class now has a cloning constructor, which makes modifying existing materials or materials loaded from models easier.
Bug Fixes
- An issue was fixed where
Render3DModelComponent
would not pick the correct shader when there is no normal map on a material. - The direction of directional lights placed in the ATF level editor is now honored by
DefaultDirectionalLightEntity
. - An issue where the ATF level loader would incorrectly parse color values has been fixed. This issue led to scenes being rendered with blue lights, even when the lights were configured for a different color.
- Fixed an issue where
GamePadIndex
was not set correctly onGamePadThumbstickActiveEvent
events. - Fixed an issue where calling
Loop
on an audio instance would not result in the audio instance starting playback. - An issue where execution of scheduled coroutines occurred immediately instead of being delayed until the next update has been fixed.
Other Notes
- Explicitly loading
ProtogameCoroutineModule
is no longer needed. Support for coroutines and coroutine scheduling is now done in the core module, so calls to loadProtogameCoroutineModule
can be safely removed. AssemblyLoadStrategy
is now no longer bound by default inProtogameAssetModule
. This load strategy was prohibitively expensive when loading the first asset in the game, as it would perform reflection to scan all types in all loaded assemblies. If you still need this load strategy (for example, when usingAIAsset
), you should bind it in your game module like so:kernel.Bind<ILoadStrategy>().To<AssemblyLoadStrategy>().InSingletonScope();
.- Startup logs are no longer automatically emitted to the debug window in Visual Studio. These logs caused a noticeable increase in load time. If you need to diagnose game startup (in particular, determining what game and server configurations it is loading), pass the
--debug-startup
as an argument to your game executable.
Upgrading
If you are using Protobuild, you can upgrade Protogame by editing the version specified in Module.xml
and then running:
Protobuild.exe --upgrade-all
If you are using NuGet, you can use the NuGet package manager to update Protogame.
Installation
All packages both as dependencies of this package, and Protogame's available in general are now on NuGet. If you are using the latest version of Protobuild, you can install the package like so:
Protobuild.exe --install [email protected]
If you are not using Protobuild, just search for Protogame
in the NuGet package manager. You will need to install the dependencies manually, which are listed below:
- Jitter.Redpoint
- protobuf-net.Redpoint
- MonoGame.Framework.Redpoint
- NDesk.Options.Redpoint
- Prototest
- AStarPathFinder
- Protoinject
- Newtonsoft.Json
- HiveMP.TemporarySession
- HiveMP.NATPunchthrough
- HiveMP.Lobby
- HiveMP.Attribute
In a future version these will be pulled in automatically, but this is dependent on new features in Protobuild.
Version 6.0.2
This marks one of the first releases under the new semantic versioning scheme. We're marking this as a pre-release since it's the first 6.0 release, and we want to perform some additional testing in the future to make sure we have a stable version across desktop platforms.
Changes
Prior to this release, Protogame used a rolling release model, where we did not explicitly version releases (instead developers often just used master). This makes it difficult to build a changelog for the first semantically versioned release.
Future releases will contain a more detailed changelog; for now please refer to the README for details on engine features.
Installation
All packages both as dependencies of this package, and Protogame's available in general are now on NuGet. If you are using the latest version of Protobuild, you can install the package like so:
Protobuild.exe --install [email protected]
If you are not using Protobuild, just search for Protogame
in the NuGet package manager. You will need to install the dependencies manually, which are listed below:
- Jitter.Redpoint
- protobuf-net.Redpoint
- MonoGame.Framework.Redpoint
- NDesk.Options.Redpoint
- Prototest
- AStarPathFinder
- Protoinject
- Newtonsoft.Json
- HiveMP.TemporarySession
- HiveMP.NATPunchthrough
- HiveMP.Lobby
- HiveMP.Attribute
In a future version these will be pulled in automatically, but this is dependent on new features in Protobuild.
Version 2.0
This is a reasonably stable version of Protogame 2.0. We do however, recommend using Protogame in a Git submodule if you're using Git as your version control system, as you will be able to receive updates much more frequently.
Version 1.0
This is the original version of Protogame. It only supports Windows and doesn't have many of the infrastructure improvements present in version 2.