Difference between revisions of "ExtendingMultiplayerServer"

From The Battle for Wesnoth Wiki
(IRC style Room(Hall) System)
(Tips from the Wesnoth community)
Line 149: Line 149:
 
My ideas are very fundamental to say the least, and may have many flaws which I am oblivious to at the moment.  All constructive criticism from the devs , or anyone for that matter is more than welcome ! I shall be available on IRC most of the time, but if I'm not, please list your tips in this section of the page if you want to. Emailing me would be appreciated, but I can understand the trouble one has to go through for that!  
 
My ideas are very fundamental to say the least, and may have many flaws which I am oblivious to at the moment.  All constructive criticism from the devs , or anyone for that matter is more than welcome ! I shall be available on IRC most of the time, but if I'm not, please list your tips in this section of the page if you want to. Emailing me would be appreciated, but I can understand the trouble one has to go through for that!  
  
Tips from others……….
+
I received some valuable tips from Mordante as an application comment , here are the proposed solutions:
 +
 
 +
How do grouping and halls work together?
 +
 
 +
Grouping would be done for the main lobby , which would have the games in a grid layout with similar types of games having the same level in the grid .A Hall would probably be a copy of the main lobby containing only the players who join a respective hall. So a hall would have a similar grouped layout of games created by players in the respective hall( These games would not be visible to players who have not joined the hall). When a player enters the server, he would be in the main lobby where all public games would be visible to him. If he then joins a hall, he would be redirected to the hall and would then be able to view the games created in that particular hall. Now , the halls may be in a tabbed view similar to multiple IRC chat rooms . If it were so , a player would be able to join multiple halls and view them by clicking on their respective tabs. This is how I would want to implement the halls ideally.
 +
 
 +
Player Profiles(Controvertial ?) after discussion with MP devs / others , data storage solution ?
 +
 
 +
Discussing with devs /others in the multiplayer IRC room, I found that people are inclined towards having a profile which would have:
 +
*Public information (Visible to all players):
 +
**Nick
 +
**Last Login time
 +
**Game type preference
 +
**Idle time (For current session)
 +
*Private information (visible to the player only):
 +
**List of buddies
 +
**Some sort of game statistics
 +
 
 +
Sirp mentioned that Mist and himself are working towards integrating the forum profiles with the wesnothd profiles. I would be happy to assist with that in any way possible, or perhaps even implement components of it if assigned to the task.
 +
I intend to keep controversy out of the profile system if I get to implement it. This means that either, player stats from a current popular ladder website are imported into the profiles, or not making the win/loss stats in the profiles public. The profiles I intend on making are primarily to maintain buddy lists and give online status indication (idle or not) which I think would be very useful.
 +
 
 +
As far as storing data goes, I haven’t thought about it explicitly yet.  Another couple of days of exploring wesnoth code would give me a better idea of efficient data structures commonly used. Please check back here in 3 days to get more info on this issue.
 +
 
 +
TimeLine Update ?
 +
 
 +
Timeline has been updated as of today !
 +
 
 +
Patches ?
 +
 
 +
Unfortunately I haven’t been able to supply any patches as yet , but am working on delivering one by the 21st if its possible .
 +
 
  
  
 
[[Category:Summer of Code]]
 
[[Category:Summer of Code]]

Revision as of 22:17, 11 April 2008

Me

Hi, my name is Gaurav Mitra. I am 21 years old and a 3rd year Software Engineering/Science student at the Australian National University, Canberra. I have been playing Wesnoth for about 2 years now, and its about time I contributed to its development!

Coding Experience

I am proficient in the following programming languages :

  • C
  • C++
  • Java
  • Haskell
  • ADA

I am familiar with Linux environments which is where most of my coding is done. However, one of my home pc's has windows on it where I use Cygwin to compile programs. But I prefer Eclipse for Java and C++ projects. My favourite code editors other than Eclipse are Kate on Linux and Notepad++ on Windows. I have used SVN extensively for coursework and use the Tortoise SVN shell extension in windows for version control. I am also familiar with basic Networking concepts

My teamwork experience is as follows:

  • In my 1st year I worked on a Java version of BlockOut in a team of 4 people
  • I am currently working in a team of 6 on a year long project to develop a Linux Robotic Framework (in C)
  • I have worked in groups of 2-4 for numerous presentations on topics such as AJAX etc

My preferred method of development is Agile and I like working in small groups (eg 2-3 people).

As far as GSoC participation goes, this is my first time! My motivation for participating is mainly to gain experience in developing a professional project and I get to develop Wesnoth which is great! But i intend on going through with Wesnoth development even after its over.

Gaming Experience

I started playing games about 10 years back when I got my first pc. I prefer strategy war games rather than first person ones, hence my interest in wesnoth. My personal favourite game though is Age Of Empires II Conquerors, in which I have a fair bit of multiplayer gaming experience. I also enjoy Rome: Total War. In general I do not favour the AI as an opponent because its moves can be predicted. I find human opponents more unpredictable and hence exciting to fight, which makes me play multiplayer games more often! I also prefer more of gameplay rather than storyline. I'm also very much in contact with a big wesnoth playing community here on ANU campus so I am in constant competition with them via LAN games!

Communication Skills

I speak fluent English , Bengali and Hindi!

Contact Info

> IRC nick: dudegaurav

> Wesnoth Forum : dudegaurav

> Gna : dudegaurav

> Email: dude.gaurav@gmail.com

> Skype name: dude.gaurav, available for voip anytime!

The times that i am awake are generally very flexible, usually I sleep from 15:00 to 21:00 UTC and am available the rest of the time. I will be logged into IRC most of the time but may not be checking it frequently so feel free to email me as i check mail every 30 mins !

Motivation

My motivation for choosing this project comes from the fact that I am a fan of multiplayer games and believe that Wesnoth would become more popular with more advanced multiplayer capabilities. I also believe that Wesnoth despite its origins as an adventure game , makes an excellent human vs. human game , as an AI can only do so much when it comes to tactics in battle !

My Ideas for Extending the Multiplayer Server

Here are some thoughts that may be interesting enough to implement .....

Game Grouping and Layout

The games are currently grouped in a simple list format with a scrollbar. It would be pretty inconvenient for a new player entering the server to choose a game of his liking with the current interface. What I propose is to create a Grid Layout , having separate levels for separate types of games . More elaborately, types of games could be categorized in the following ways :

  • Unlimited/Limited turn games
  • Epic games (eg. 100x100 maps)
  • Moderate games (eg. 50x50 maps)
  • Quick games (eg. 20x20 maps)
  • Games with turn timers , as in turns would have time limits
  • Custom games with mod patches to be downloaded i.e. if players have their own versions that they want to play with.

These are the types that come to mind at the moment, but obviously there can be many more depending on player inputs I receive during the project. For each type of game I propose to have a level in the grid interface, with lines clearly demarcating each level. In each level, the games with the most amount of free slots would be displayed first and so on in a horizontal scrolling manner. Players would then be able to choose easily what sort of game they are interested in and join them.


IRC style Room(Hall) System

The current server has a single room interface. Players have the following options that may be disadvantageous in some ways:

  • All chat before a match is public
  • Have to wait for random players to join into a match for it to start
  • Have limited options for challenging other players into matches if they aren’t reading the public chats
  • Players have no way of understanding whether their opponent(s) have left their computer(gone idle) or not in games which do not have turn timers ( This problem is addressed in the "Player profile" section )

As solutions to some of these problems, I propose to make a Hall (Room) system which may have the following options:

  • Players can create their own rooms (Halls) , similar to IRC , which would enable them to chat with players of their choice about the matches they want to play within the hall.
  • The Halls would appear in a separate section, “The Halls” section, maybe to the left hand corner of the screen. The exact position of this section in the startup interface is variable.
  • In the Halls section, players could create/delete their own Halls or join other Halls. Probably, buttons for these actions will have to be provided, or maybe a command line “\join” style may be used.
  • A default “Challengers” Hall may be a good idea to start with where players who want a quick random challenge may dwell!
  • Upon creating a Hall, it would appear as another tab with the main room , having similar traits such as the main room. Upon joining a hall , a similar tab would appear containing the hall’s current members and their games
  • Players would be able to create and play games within a Hall. The game might/might not be displayed in the main room, depending on the options specified by the players as they may want a private game with known friends only!

With a Hall system like this, it would be possible for players to:

  • Chat with known friends privately before a game , and then create the game accordingly
  • Have the ability to create halls that may be grouping players with similar common attributes or interests . For example , a Player could create a Hall called “CanberraWarriors” where players from Canberra might join and compete.
  • The scalability of wesnoth to a much larger multiplayer community may be a reality
  • Thinking ambitiously , inter Hall tournaments could be organized where the best players from a hall would compete ! The best players would obviously be chosen from the hall with criteria determined by members of the hall , so no controversies arise from ranking !
  • Possibly in the future , some Halls may even keep a criteria on entry ( this is really thinking way ahead ! ) , such as a player would be granted entry if he played a match with one of the members of the Hall and fared well !

Well , I agree the last 2 points were very far fetched but who knows , anything is possible !

Player Profiles

Any multiplayer game server would have to incorporate player profiles to be popular. At the moment there are various external websites that provide a ladder format for wesnoth players to have profiles and possibly be ranked , for example , ladder.subversiva.org . However, an internal server database containing basic player statistics would be pretty handy in a lot of ways , mainly :

  • Players could have a real time indicator on their profiles if they are online of not , and maybe also have an indicator if they have been inactive(idle) for a certain period of time. This would reflect even while playing a game , so if an opponent(after almost being brutally defeated !) is idle for 10 mins and does not reply to chat , the player in his good judgement can leave the game .
  • Players could maintain list of friends(buddies) on their profile and could check quickly whether any buddies are online at the moment
  • Other players could look at fellow competitor’s stats and challenge them to a match maybe


While there is a contention in the fact that people who have been playing for a while and have won many games, will have to start afresh on their profile stats, I feel this problem may have a solution.The current stats from the ladder websites could be ported in to the profiles and players could continue from where they left off on the ladder. This process may be achieved in many ways, either by correspondence with the admins of the ladder websites, or by the players themselves, whichever is feasible.

Login authentication similar to IRC

Speaking to devs in IRC , I heard that login authentication was already under construction . I would be happy to contribute to its development if permitted. One of my own problems with the authentication system that i have encountered is :

  • Often when a player logs out of the server, and if he wants to log back in immediately , he has do so with a different ID because the server still has the player nick as active.

More ambitious goals

  • Game Search system based on criteria - This may only be needed by players if the number of games is seriously large .
  • Player ranking system ( **Controvertial!** ) – depends heavily on feedback from players and devs !

Scalability of ideas

The ideas mentioned here , I feel are very much scalable. Mainly ,

  • The Hall system , could support many times the current number of players , without much confusion , as it would be properly categorized. A vast number of player groups would be able to communicate amongst themselves in their private halls , avoiding public chat mayhem .
  • Player profiles could start simply as a statistical database but could grow into a future ranking system which is agreeable to a multitude of players
  • The proposed grid layout could support many more games in an organized fashion than the current layout. Having such a layout in each hall(by default) would make individual halls capable of hosting a large number of games
  • The proposed system of game grouping into types may be extended according to player input

Admin & Moderation

By introducing the ability for players to define their own Halls , a certain moderation factor should also introduce itself. If these ideas are implemented, it would be natural for the devs to assign mods for the server. Mods would have privileges to remove any offensive groups which might have been created. By my initial study of other multiplayer communities, I would possibly discover many more moderation issues involved in my design.

Overview and Estimated Timeline

Overall , my ideas are a starting point upon which I hope to build extensively by further research. Even after GSoC is over I hope to continue to be a Wesnoth developer. By participating in GSoC I hope to contribute to open source development , and more importantly , contribute to Wesnoth ! In the process , I would also significantly develop my coding skills ,my knowledge of networks and possibly my abilty to work in a virtual team environment ! I'm proficient in C++ and am a quick learner of concepts . I'm very open to criticism and reasonable arguments , hence can only be on the trail of improvement !

For the last week and a half I was completely unable to work on my wiki and proposal details as I had quite a few assignments due and a mid semester exam ! This timeline has now been organized into periods of dates , with varying period sizes. Breaks , exams , assignments have been indicated clearly and details of work to be done in every time period has been included. Whenever assignments are due or exams are present my work habits will be affected for one or two days before the due date , sorry ! But during breaks , I shall be working full time and there will be no disturbances in work habits .

TimeLine as of April 12th :

Mid Sem Break Begins 11/04 
  • 12/04 – 21/04 : Understand and familiarize with Wesnoth Code i.e. class dependencies etc
  • 21/04 – 28/04 : Research on other Multiplayer Lobbies , put up discussions on the forum , take opinions on IRC on finer details of my ideas . Also , by the 28th , I hope to have familiarized myself with wesnoth code entirely. (~~ Assignment due on 28/04 ~~)
Mid Sem Break Ends 28/04 
  • 29/04 – 10/05 : Design proposed interface (i.e. Class diagrams , dependencies , finer details etc) Prepare presentation on my proposed interface of the mp server. I would probably present this to the mentors around the 11th. (~~ Assignment due on 04/05 , exam on 05/05 ~~)
  • 11/05 – 14/05 : Finalize design after incorporating changes suggested by mentors
  • 15/05 – 11/06 : Develop/Code first prototype of intended interface and deliver to mentors for evaluation. (~~ Assignments due on 18/05 , 28/05 , 01/06 ~~)
Semester Exam period begins 12/06  ( 3 actual exam days  for me which haven’t been announced yet ) 
  • 12/06 – 28/06 : Fix bugs , try to improve code performance etc ( light jobs due to exams :)
Semester Exam period ends 28/06 , Semester Break Begins 29/06
  • 29/06 – 07/07 : Incorporate changes suggested by mentors to first prototype , generate 2nd prototype . Try to fix preliminary bugs , generate some meaningful documentation
  • 08/07 – 14/07 : Prepare and submit mid-term evaluation , fix more bugs , finish incorporating changes
  • 15/07 – 31/07 : Improve performance of 2nd prototype , fix most bugs , submit code to mentors again to evaluate.
Semester break ends 29/07 , 2nd Semester begins 
  • 01/08 –07/08 : Finalize 2nd prototype to 3rd and Final prototype and ask mentors for comments
  • 08/08 – 18/08 : Write tests , beautify code , improve documentation
  • 19/08 – 31/08 : Prepare Final evaluation and finalize code to be submitted.
  • 01/09 – Submit Final evaluation
  • 03/09 – Submit Code to google.

Tips from the Wesnoth community

My ideas are very fundamental to say the least, and may have many flaws which I am oblivious to at the moment. All constructive criticism from the devs , or anyone for that matter is more than welcome ! I shall be available on IRC most of the time, but if I'm not, please list your tips in this section of the page if you want to. Emailing me would be appreciated, but I can understand the trouble one has to go through for that!

I received some valuable tips from Mordante as an application comment , here are the proposed solutions:

How do grouping and halls work together?

Grouping would be done for the main lobby , which would have the games in a grid layout with similar types of games having the same level in the grid .A Hall would probably be a copy of the main lobby containing only the players who join a respective hall. So a hall would have a similar grouped layout of games created by players in the respective hall( These games would not be visible to players who have not joined the hall). When a player enters the server, he would be in the main lobby where all public games would be visible to him. If he then joins a hall, he would be redirected to the hall and would then be able to view the games created in that particular hall. Now , the halls may be in a tabbed view similar to multiple IRC chat rooms . If it were so , a player would be able to join multiple halls and view them by clicking on their respective tabs. This is how I would want to implement the halls ideally.

Player Profiles(Controvertial ?) after discussion with MP devs / others , data storage solution ?

Discussing with devs /others in the multiplayer IRC room, I found that people are inclined towards having a profile which would have:

  • Public information (Visible to all players):
    • Nick
    • Last Login time
    • Game type preference
    • Idle time (For current session)
  • Private information (visible to the player only):
    • List of buddies
    • Some sort of game statistics

Sirp mentioned that Mist and himself are working towards integrating the forum profiles with the wesnothd profiles. I would be happy to assist with that in any way possible, or perhaps even implement components of it if assigned to the task. I intend to keep controversy out of the profile system if I get to implement it. This means that either, player stats from a current popular ladder website are imported into the profiles, or not making the win/loss stats in the profiles public. The profiles I intend on making are primarily to maintain buddy lists and give online status indication (idle or not) which I think would be very useful.

As far as storing data goes, I haven’t thought about it explicitly yet. Another couple of days of exploring wesnoth code would give me a better idea of efficient data structures commonly used. Please check back here in 3 days to get more info on this issue.

TimeLine Update ?

Timeline has been updated as of today !

Patches ?

Unfortunately I haven’t been able to supply any patches as yet , but am working on delivering one by the 21st if its possible .