Google Summer of Code 2010: Difference between revisions

From Spring
Jump to navigationJump to search
Argh (talk | contribs)
m Reverted edits by Argh (Talk); changed back to last version by Babbles
Line 6: Line 6:




== Proposal:  Limited Play Area ==
== Limited play area ==


'''Why:'''  Spring uses a finite-world model, where the scene has distinct bounds that all actors must obey.  Currently, this system uses a rectangular definition of the bounds, which is not sufficiently flexible for some types of simulation or game designs.
Estimated difficulty: medium


'''What:'''  The new system should allow the map's developer to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.
Current Spring map formats have a hardcoded rectangle geometry; also they provide very limited support for defining aesthetics of the surrounding environment outside the play area.


The restriction shapes should be readable and changeable mid-game through the engine's Lua API. Proper handling of Units which are suddenly off-map needs to be implemented.
The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.


'''Requirements:'''  Understanding of C++ / Lua.
The restriction shapes should be readable and changeable mid-game through the engine's Lua API. Proper handling of units which are suddenly off-map needs to be implemented.


[[GSoC_Limited_play_area]]
[[GSoC_Limited_play_area]]


== Proposal:  Sensor System Redesign ==


'''Why:'''  The Spring Engine is currently capable of significant real-world applications in the area of simulation of certain types of events or situations; a better sensor system could greatly improve Spring's applicability to an even wider range of projects.
== Sensor handling redesign / simplification ==


'''What:'''  Currently there are a number of different "sensor" systems in the engine: LineOfSight, Radar, Sonar, and Seismic.  Some can be "jammed", some cannot. Some use a LineOfSight algorithm to determine coverage, and some are circular in area.
Estimated difficulty: hard


A new sensor system should integrate the current systems into a streamlined codebase, to reduce amount of code per function, and it should add additional features which would be then available for all types, while improving efficiency where possible.
Currently there are a number of different "sensor" systems in the engine: LineOfSight, Radar, Sonar, and Seismic, some can be jammed, some cannot. Some respect terrain, and some are always circular.


'''Requirements:''' Understanding of C++ / Lua
A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features which would be then available for all types.
 
Preferably this all should also be faster than the current system or a compelling argument/experiment should be made that shows there cannot be a faster system with the same features.


[[GSoC_Sensor_handling_redesign]]
[[GSoC_Sensor_handling_redesign]]


== Proposal: Abstraction of Resource System ==


'''Why:'''  The Spring engine has its roots in an older Real-Time Strategy title, where only two major resources ("metal" and "energy") were incorporated into the game design.
== Engine level abstraction of resources ==


This model has proven to be too inflexible to support certain types of gameplay, and is an obvious disadvantage to the Spring Engine when it is compared to other available software for constructing certain types of simulations.  Furthermore, the use of Lua to support alternative models has not always proven satisfactory to game developers, who may lack the programming experience to build a resource-distribution system from scratch.
Estimated difficulty: medium to hard


'''What:'''  Therefore, we propose to write a new, more-flexible system that will support more than two resources, and possibly implement new behavioral models.  
The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.


'''Requirements:'''  Understanding of C++
The old system needs to be replaced, the new one should be flexible enough to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.
 
The engine's Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.


[[GSoC_Engine_resource_abstraction]]
[[GSoC_Engine_resource_abstraction]]


== Proposal: Ingame Lobby ==


'''Why:'''  All existing Spring online player match-making systems ('lobbies') are either difficult to customize for game developers or have a different look and feel from the games which are expected to operate with them.  While they are Open Source, and are being actively maintained, they do not provide the same end-user experience one finds in commercial titles.
== Basic ingame lobby ==
 
Estimated difficulty: hard


'''What:'''  An in-game Lobby, leveraging the Spring Engine's strong Lua scripting support, should be implemented with customization and control in mind.  This may possibly be integrated with Spring's codebase, or it may be designed as a separate process overlaying to the game's UI.
All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look 'n feel from the game itself and require focus switch from the game itself to operate.


This could also serve as a practical "front end" for the Spring Engine, giving all games developed on the engine a standardized, yet flexible, system to support their players.
A new, Lua scriptable lobby should be implemented with customization and control in mind, possibly integrated with Spring codebase and/or running as a separate process overlaying to the game's UI.


'''Requirements:'''  Understanding of C++ / Lua
Optionally, the engine's start screen should be replaced and integrated with it.


[[GSoC_Ingame_lobby]]
[[GSoC_Ingame_lobby]]


== Proposal: Smarter Pathfinder ==


'''Why:'''  Given the Spring Engine's need to routinely handle responsive and bug-free pathfinding and path-following for large numbers of actors, this project could become a useful showcase and useful codebase for projects needing pathfinders, and could expand the world's understanding of pathfinding and path-following in realtime systems.
== Smarter pathfinder ==
 
Estimated difficulty: hard


'''What:'''  Spring's current pathfinder uses a 2d grid and is somewhat limited in functionality.
Spring's pathfinder uses a 2d grid and is somewhat limited in functionality.
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.
A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.


Line 64: Line 68:


Preferably this should all be faster than the current system, or a compelling argument/experiment should be made that shows there cannot be a faster system with the same features.
Preferably this should all be faster than the current system, or a compelling argument/experiment should be made that shows there cannot be a faster system with the same features.
'''Requirements:'''  Understanding of C++; moderate understanding of pathfinding / following concepts and coding strategies


[[GSoC_Smarter_pathfinder]]
[[GSoC_Smarter_pathfinder]]


== Proposal:  More AI interfaces ==


'''Why:'''  The Spring Engine is already a popular engine for academic projects to study Artificial Intelligence, given the Open Source model of development and strong support within the A.I. community.  This project could enhance Spring's attractiveness to developers and teachers wanting to explore or teach about A.I.
== More AI interfaces ==


'''What:'''  The Spring engine's A.I. interface supports bindings for multiple languages. Currently C++, C and java are supported, and AIs may be constructed using Lua.
Estimated difficulty: medium


We propose to add more bindings for more languages and/or virtual machines would be added, to allow broader AI developing audience (for example: Ruby, Perl, JavaScript, Python, D, Go, Mono, LLVM, Parrot).
The Spring engine's AI interface supports bindings for multiple languages, currently legacy C++, C and java are supported.


'''Requirements:'''  Understanding of C++; understanding of the languages to be binded to
Bindings for more languages and/or virtual machines should be added to allow broader AI developing audience (for example: Ruby, Perl, JavaScript, Python, D, Go, Mono, LLVM, Parrot).


[[GSoC_More_AI_interfaces]]
[[GSoC_More_AI_interfaces]]


== Proposal: Improved Rendering System ==


'''Why:'''  The Spring Engine's rendering system remains near the cutting edge of practical, functional OpenGL in a realtime environment, and is certainly notable amongst free, Open Source projects for its realism and flexibility.  While it is not as advanced as the latest commercial engines, Spring's developers have made great strides in the last year, adding significant new features to the engine.
== New Rendering System ==
 
Estimated difficulty: medium


However, the core Spring rendering engine still includes many fixed function pipeline OpenGL functions. This rendering system is becoming deprecated and is generally slower and less flexible than more modern approaches.
The Spring rendering engine uses a lot of FFP (fixed function pipeline) OpenGL functions. This model is becoming deprecated and is generally slower and less flexible than shader usage.


'''What:'''  Under this proposal, the rendering pipeline would be given a complete overhaul using modern graphic programming techniques, including shaders, standardised model formats that are easier for new artists to adapt to, and other enhancements, such as bump mapping, normal mapping, and multiple textures per Unit, while utilizing code that adheres to the OpenGL ES 2.0 specification.
The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardised model formats (backwards compatibility with current available formats is mandatory either through direct load or automatic conversion to the new types) and eventually introduce some graphic enhancing features (bump mapping, normal mapping, multitexturing, etc.).


'''Requirements:'''  Understanding of C++ and some experience with modern rendering concepts.
OpenGL ES 2.0 compatibility should be aimed at where possible.


[[GSoC_New_rendering_system]]
[[GSoC_New_rendering_system]]


== Proposal:  Resumption of Desynchronised Client States ==


'''Why:'''  Spring's network model implies the existence of a server to host a battle. For various reasons the network link between host and clients can be interrupted, or "desync".  This causes an end-user to lose the true state of the simulation, and is a significant problem for players.
== Reconnect / Host change during a match ==


'''What:'''  Our proposal is that a new system should be designed to allow manual and/or automatic switching of the game's host (possibly using an existing player's state, after testing load handling capabilities) and manual and/or automatic reconnection from client side if host remains the same.
Estimated difficulty: medium to hard


'''Requirements:'''  Understanding of C++; some expertise of networking concepts is required
Spring's network model implies the existence of a server to host a battle. For various reasons the network link between host and clients can die, so a system should be designed to allow manual and/or automatic switching of the game's host (possibly using an existing player after testing load handling capabilities) and manual and/or automatic reconnection from client side if host remains the same.


[[GSoC_Reconnect_Host_change]]
[[GSoC_Reconnect_Host_change]]

Revision as of 15:22, 12 March 2010

Project proposals

This is the list of project ideas for students willing to work on the Spring engine during the Google Summer of Code 2010. If you wish, you may read our student application.


Limited play area

Estimated difficulty: medium

Current Spring map formats have a hardcoded rectangle geometry; also they provide very limited support for defining aesthetics of the surrounding environment outside the play area.

The new system should allow the map to restrict the playable area to a subset of the global area, possibly adding support for multiple shapes and/or non rectangular shape restrictions.

The restriction shapes should be readable and changeable mid-game through the engine's Lua API. Proper handling of units which are suddenly off-map needs to be implemented.

GSoC_Limited_play_area


Sensor handling redesign / simplification

Estimated difficulty: hard

Currently there are a number of different "sensor" systems in the engine: LineOfSight, Radar, Sonar, and Seismic, some can be jammed, some cannot. Some respect terrain, and some are always circular.

A new sensor system should integrate the current LOS, Radar, Sonar, Seismic systems, to reduce amount of code per functionality, and eventually add additional features which would be then available for all types.

Preferably this all should also be faster than the current system or a compelling argument/experiment should be made that shows there cannot be a faster system with the same features.

GSoC_Sensor_handling_redesign


Engine level abstraction of resources

Estimated difficulty: medium to hard

The Spring engine has its roots in being a Total Annihilation clone; even if such intent has been dropped since quite some time, the TA resource system is largely present in the codebase being hardcoded in a lot of critical places.

The old system needs to be replaced, the new one should be flexible enough to reproduce everything that the old system did and be able to imitate the behaviour of most common RTS game titles.

The engine's Lua API to fetch resources will have to be adapted to the new system, and new calls will have to be added to edit it.

GSoC_Engine_resource_abstraction


Basic ingame lobby

Estimated difficulty: hard

All existing Spring interfaces (lobbies) are either difficult to customize for game developers or have a different look 'n feel from the game itself and require focus switch from the game itself to operate.

A new, Lua scriptable lobby should be implemented with customization and control in mind, possibly integrated with Spring codebase and/or running as a separate process overlaying to the game's UI.

Optionally, the engine's start screen should be replaced and integrated with it.

GSoC_Ingame_lobby


Smarter pathfinder

Estimated difficulty: hard

Spring's pathfinder uses a 2d grid and is somewhat limited in functionality. A partial/full rewrite should be introduced to add support for navigating using more than 8 primary directions and selectively ignore certain unit types for performance reasons.

Spring's Lua API should be extended to allow game developers to push new nodes/links and be able to alter or delete existing ones (for pathfinder-aware tunnels/teleporting/etc.).

Preferably this should all be faster than the current system, or a compelling argument/experiment should be made that shows there cannot be a faster system with the same features.

GSoC_Smarter_pathfinder


More AI interfaces

Estimated difficulty: medium

The Spring engine's AI interface supports bindings for multiple languages, currently legacy C++, C and java are supported.

Bindings for more languages and/or virtual machines should be added to allow broader AI developing audience (for example: Ruby, Perl, JavaScript, Python, D, Go, Mono, LLVM, Parrot).

GSoC_More_AI_interfaces


New Rendering System

Estimated difficulty: medium

The Spring rendering engine uses a lot of FFP (fixed function pipeline) OpenGL functions. This model is becoming deprecated and is generally slower and less flexible than shader usage.

The rendering code should get a complete overhaul using modern graphic programming techniques such as shaders, implement load support for more standardised model formats (backwards compatibility with current available formats is mandatory either through direct load or automatic conversion to the new types) and eventually introduce some graphic enhancing features (bump mapping, normal mapping, multitexturing, etc.).

OpenGL ES 2.0 compatibility should be aimed at where possible.

GSoC_New_rendering_system


Reconnect / Host change during a match

Estimated difficulty: medium to hard

Spring's network model implies the existence of a server to host a battle. For various reasons the network link between host and clients can die, so a system should be designed to allow manual and/or automatic switching of the game's host (possibly using an existing player after testing load handling capabilities) and manual and/or automatic reconnection from client side if host remains the same.

GSoC_Reconnect_Host_change