GSoc2011Ideas

Version 2 (sfb, 02/18/2011 03:06 pm) → Version 3/4 (sfb, 02/18/2011 03:07 pm)

{{toc}} {{>toc}}

h1. Ryzom Core GSoC 2011 Ideas

h2. Tools Related Ideas

h3. OVQT Translation Plugin

*Summary:* Implemenent basic Translation Tool frontend in Object Viewer Qt
*Description:* This tool will be a GUI replacement of the existing translation_tool process. In addition to the extraction, diff and merge functionality the tools should also provide basic _wk_ worksheet editing capabilities. The tool should be able to provide a map of phrases to other plugins.
*Technical Details:* This task will be using components in NeL (NLMISC, STRING_MAPPER), reusing two existing tools (words_dic_qt and translation_tool) and will be written as a plugin to Object Viewer Qt.
*Specification:* _TBD_
*Difficulty:* Medium
*Required Skills:* C++, Qt
*Mentor:* Matt Raykowski (sfb)

h3. Web-Based Translation Tool

*Summary:* Implement a web-frontend for providing translations to Ryzom Core phrase files.
*Description:* This tool will provide a web-based frontend to the translation words dictionary (.uxt) and phrases (words_LN.txt). It should allow users to signup and provide translations to a variety of languages as well as suggestions for better translations on existing translations. It should provide admins with the ability to push and pull changes from this to the .txt/uxt files and vice versa. The desired language of development for this tool is PHP but reasonable justifications can be made for other languages. The ultimate goal is to provide an easy and secure way of 'crowd-sourcing' translations for Ryzom Core based projects.
*Technical Details:* This task will require both a frontend that provides an interface for users to edit/update translations but also a backend that merges the approved translation information into the actual phrase files. This backend process will also need to pull diffs from the phrase files (see translation_tool) to know what additional phrases need to be translated.
*Specification:* TBD
*Difficulty:* Medium
*Required Skills:* PHP
*Mentor:* Matt Raykowski (sfb)

h3. World Editor Conversion

*Summary:* Convert the legacy World Editor to Qt as an Object Viewer Qt Plugin
*Description:* Our current World Editor tool is developed using Microsoft's MFC framework for its GUI. The primary goal of this task is to convert the World Editor to Qt and load it into OVQT as a plugin. In addition to the primary goal the various World Editor plugins should be converted to OVQT plugins as well.
*Technical Details:* The new World Editor UI will be developed in Qt and loaded using OVQT's plugin architecture. World Editor-specific configuration information should be available as a separate page in the configuration settings dialog but should use global configuration where possible (e.g. search paths.)
*Specification:* TBD
*Difficulty:* Very Difficult
*Required Skills:* C++, Qt
*Mentor:* Matt Raykowski (sfb)

h3. BNP Tools

*Summary:* Implement tools for managing BNP files.
*Description:* Create a WinZip-style tool for managing BNP files. Optimally it would integrate into GNOME and Windows.
*Technical Details:* The tool must be written in Qt and must contain the logic internally to accomplish this. It should be two parts: an executable with shell extensions and a DLL/SO containing the core logic and dialogs. The DLL/SO should also be able to be loaded as an OVQT plugin and dock as normal.
*Specification:* TBD
*Difficulty:* Easy
*Required Skills:* C++, Qt
*Mentor:* Matt Raykowski (sfb)

h3. 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:* Matt Raykowski (sfb)

h3. 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:* Matt Raykowski (sfb)

h3. 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:* Matt Raykowski (sfb)

h3. 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:* Matt Raykowski (sfb)

h3. 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:* Matt Raykowski (sfb)

h2. Ryzom Game Functionality

h3. Implement Guild Missions

*Summary:* Implement missions which can be accepted by specific guild roles and completed by any guild member.
*Description:* Ryzom Core current provides individual and team missions. Guild missions will function similar to team missions: a guild officer can approach a mission giver and accept missions on behalf of the guild. Guild members may complete that guild mission. The mission dialog box should differentiate between mission types (guild vs individual.) At a minimum two additional mission actions will need to be added to grant the guild money in reward for completing the mission or mission step, rather than granting money to the individual and to remove money from the guild as a penalty for failing a mission.
*Technical Details:* Much of the hard work is already accomplished through the team/group missions. Looking at CGuildMemberModule there's already a _pickMission_ method which is defaulted to false (preventing any guild members from picking up missions.) Implementing this in one of the higher grade classes such as CGuildHighOfficerModule will allow that grade of officer to pick missions. CMissionGuild already exists but is more or less a copy of CMissionTeam and will need to be cleaned up, uncommented and updated for guilds rather than teams. In order to demonstrate the new guild missions and mission actions a new mission will have to be created for Open Shard which requires a high officer to pick a guild mission from an NPC and then some member to complete the mission in a given amount of time. A thorough knowledge of mission_editor will not be required for this task.
*Specification:* TBD
*Difficulty:* Medium
*Required Skills:* C++
*Mentor:* Matt Raykowski (sfb)

h3. 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:* Matt Raykowski (sfb)