Ryzom Core GSoC 2012 Ideas

Tools Related Ideas

Ryzom GUI Editor

Summary: Create a GUI editor for Ryzom's Interface Library
Description: Ryzom Core has a robust GUI system which is driven through XML files. This means that it is easy to layout new dialogs and modify existing ones provided you understand the elements in the XML dialogs. To make modifying and adding new dialogs easier we want to add a GUI Editor plugin to OVQT. For examples you could look at CEGUILayoutEditor or MyGUI Layout Editor.
Technical Details: The tool should be written as an OVQT plugin. Before the actual editor is written the interface code (interface_v3) will need to be modularized into a library that the plugin can utilize independent of the client source code. This may also mean modularizing the CDB system. The GUI Editor does not need the ability to read the CDB system, the stand-in labels would be sufficient.
Specification: TBD
Difficulty: Very Difficult
Required Skills: C++, Qt
Mentor: TBD

NeLNS Qt Displayer and Services Dashboard

Summary: Create a Qt UI for Ryzom Core Serivces and a Dashboard organizing all services.
Description: This task has two parts. The first step is to implement a Qt-based viewer that NLNET::IService can be set to use individually. This displayer should function equivalent to the existing Windows displayer for network services. The second step is to build a "services dashboard" application in which each NeL network service displayer can be attached as a tab.
Technical Details: The application cannot be run in the QApplication::run loop due to the fact that IService has its own main loop. Optimally the design will allow each service to remain running as an independent process and map into the dashboard through some other mechanism such as IPC.
Specification: TODO
Difficulty: Medium
Required Skills: C++, Qt
Mentor: TBD

Ryzom Core Blender Exporter

Summary: Create a GUI editor for Ryzom's Interface Library
Description: Ryzom Core has one fully functional exporter for its game data pipeline: 3DSMAX. We greatly wish to enable FOSS users to create content completely independent of proprietary tools. This exporter will need to be functionally identical to the 3DSMAX exporter. This task may also require modifications to NeL in order to enable additional functionality (such as animation tracks keyed with a different algorithm.) Finally the exporter should provide a method for build_gamedata to procedurally execute the export functions (see the 3DSMAX MAXScripts called to export shapes, etc.)
Technical Details: At a bare minimum we need the ability to export shapes, animations, skeletons and other objects out from Blender. The process should as closely match the 3DSMAX plugins capabilities as possible so that object creation between the packages is consistent and that the resulting exported data can uniformly be processed by build_gamedata regardless of the modeling package. Liberty can be taken on the presentation of the plugin information as is appropriate with Blender. The NeL builder classes are all in C++ but wrapping them in Python in order to use Blender Python API is acceptable.
Specification: TBD
Difficulty: Medium
Required Skills: Python, C++, 3D Algorithms
Mentor: TBD

Ryzom Core Landscape Editor Plugin

Summary: Create a landscape editor plugin for Object Viewer Qt
Description: Landscape editing and painting is one of the more sophisticated components of the 3DSMAX plugins. This plugin will combine four major components: Tile Editor, Landscape Sculptor and Landscape Painter, Ligoscape Editor. We envision the tool being something similar to EasyGen or the Torque Terrain Editor.
Technical Details: The Tile Editor plugin will need to rewrite the Tile Edit Qt tool's presentation so that it is more flexible (implemented as re-sizable and dock widgets.) The process will also require the elimination of the PIC library - use CBitmap where edges need to be saved into the tile bank and QBitmap or QPixmap otherwise.

The Landscape Sculpting tool should use bezier patches as the underlying topology (since that is the native topology of NeL landscape zones.) A basic ability to edit sub-objects on the patch and to add sub-objects (cut to add more segments and points) is an essential. The ability to "sculpt" with brushes is the second task required. Finally an option to deform the topology using a heightmap. This tool should output a ".zone" file which is a binary serialization of CZone.

Landscape Painter should be based on the 3DSMAX Patch Painter plugin (nel_patch_paint.) Nearly all of the underlying logic already directly manipulated the NeL CZone object - only the 3DSAMX driven presentation needs to be replaced.

The Ligoscape Editor will need to be able to define various zones created by the previous modules as ligobricks and define their purposes (ligozone, ligomat, ligotrans or special.) It will need to be able to export all of this information in a form that is usable by World Editor.
Specification: TBD
Difficulty: Very Difficult
Required Skills: C++, Qt, 3D Algorithms
Mentor: TBD

OVQT Build Gamedata Frontend Plugin

Summary: Create an OVQT plugin allowing execution and monitoring of build_gamedata.
Description: build_gamedata is a Python-based tool that automatically exports and builds gamedata. The purpose of this task is to create a plugin for Object Viewer Qt that provides a way to execute the various stages of the pipeline, to view the logging/debugging and provide basic workflow status. In addition to this the build_gamedata workflow should be represented in some form - either tree view or graphical - and allow certain stages to be run directly. This will require modifying the build_gamedata tool so both C++ and limited Python will be required.
Technical Details: TBD
Specification: TBD
Difficulty: Medium
Required Skills: C++, Qt, Python
Mentor: TBD

Accounts Management Tool

Summary: Create a web-based account management tool.
Description: The tool will provide a way to sign up properly, recover a lost password, manage the personal data (change the password, etc). It will provide a back office to manage the accounts (statistics, account temporary ban, etc).
Technical Details: TBD
Specification: TBD
Difficulty: Medium
Required Skills: C++, Qt, Python
Mentor: TBD

Ryzom Game Functionality

Implement Additional Sound Triggers

Summary: Implement additional sound triggers such as impulses and phrase mapping.
Description: We would like to add the ability to do things such as send "play sound" impulses from mission scripts and the ability to map a phrases to a sound samples. The idea is to provide mission creators more depth and control over their events and dialog.
Technical Details: The "play sound" impulse should be fairly easy. We will need to implement a mission action similar to CMissionActionPopupMsg which in simple terms uses the PlayerManager to send a "USER:POPUP" impulse to the client. The phrase mapping will be more difficult but could be done fairly simply by combining the locale name (e.g. EN or FR) to the end of the phrase (e.g. WELCOME_TO_RYZOM) creating a new sample named "WELCOME_TO_RYZOM_EN" - if such a sample exists in the sample bank play the sound from a source located at the speaker. This will allow us to have limited verbal dialog.
Specification: TBD
Difficulty: Medium
Required Skills: C++
Mentor: TBD

Dynamic Ranks for Guilds

Summary Create an end-user defined, dynamic rank structure within the guild manager.
Description Ryzom already has a Guild Manager with predefined Grades. I would be adding to the existing structure a way for Guild leaders to create their own rank structure with custom names.
Technical Details The Guild Manager already has a way to set permissions through the grades, and that would remain the same. I would be creating an interface for the player to actually create the rank, allowing for multiple ranks to be assigned to one grade e.g. Private and Private 1st Class are Members, Corporal and Lance Corporal are Bearers and Sergeant and Staff Sergeant are Recruiters. I also will create a method that grabs the rank from a log and puts it either next to or on top of their name in game. There will be a need for an on/off toggle for both players and the system. For everything to work I will need to change the chat, guildmanager and EGS::PD.
Specification TBD
Difficulty Medium
Required Skills C++
Mentor TBD