This article collects information regarding the conceptualisation of the gameplay of The Mana World
This article contains information for Programmers working or interested in working for The Mana World
This article is currently only a proposal
The features or design guidelines described in this article are only a proposal made by one or some persons. It has not been evaluated or accepted by the core development team yet. Feel free to add your personal opinion about them or make counter proposals.
Party system
A character can create a party at any time by inviting another player to join. The character that created the party becomes the party leader. If the party leader leaves the party, the first character who joined the party afterwards becomes party leader. If this character already left, the next who joined becomes the leader, and so on.
Party members can fight monsters together and share the combat skill experience reward of the monsters they fight, because the killsteal protection time (the time after an attack in which attacks of other characters don't qualify them for a share of the experience of the monster) is ignored between party members. For further details regarding experience distribution see skill system.
If a monster that was killed by a party drops loot, any member of the party may pick up the loot immediately.
A party is temporary and dies when the last party member leaves. A player can choose to leave their party at any time, or the party leader can remove them from the party. Players leave their party automatically when disconnected from the server.
When the party is created a chat channel for the party is automatically created and all party members automatically join it. Non party members cannot join, and party members cannot leave. In the game this channel is simply called the "Party" channel, and it is identified by a special color (say, purple).
Implementation
Introduction
Since parties members can be on different maps at the same time, either the account or the chat server needs to keep track of parties. Since parties are mainly temporary social gatherings, interested in each other's status and being able to communicate, the chat server seems the most logical place for the authority on parties.
Responsibility of each peer
Client
Needs to be able to:
- Display whether other players on the screen are part of your party
- Display the list of party members and their health status
- Display potentially their current map and their position on the minimap (even when they are not visible on the screen)
- Display an invite to a party from another player
- Allow party leaders to invite others to a party
- Allow party leaders to remove others from a party
Information needed:
- Either party ID of each player on screen (would allow identification of other parties) or boolean saying whether they are in your party
- List of party members (with their name, map, position and health)
- Party channel ID of local player (may be derivable from or same as party ID)
Game server
- The party affects combat mechanics
- The party affects potentially whether map location is sent to another player
Information needed:
- The party ID for each player on the server
Chat server
- Creates/removes parties and keeps track of their leader
- Has authority on players joining/leaving parties
- The party is able to chat in private
- Party members are potentially aware of the map of the other members
- Party members know each other's health
- Party members get notified when others leave/join the party
Information needed:
- The list of members for each party
- The list of invited members for each party
- The party ID for all players
- Potentially the name of the map each player occupies
- Health information for all players
Messaging (semi-chronological)
A player invites another player
client A -- PARTY_INVITE -----> chat server (id) "checks location and authority" chat server ----- INVITE ----------> client B (name) chat server <---- INVITE_RESPONSE -- client B "either remove invitation or add member" client A <- INVITE_RESPONSE --- chat server clients <-- PARTY_JOIN -------- chat server (id, name, map, health) chat server -- PLAYER_PARTY_ID --> game server (id, party_id)
A player removes another player (or himself)
client A -- PARTY_REMOVE -----> chat server (id) "checks authority" client A <-- REMOVE_RESPONSE -- chat server clients <-- PARTY_LEAVE ------- chat server (id) chat server -- PLAYER_PARTY_ID --> game server (id, party_id)
The game server sends new player information
chat server <-- PLAYER_INFO ------ game server (id, map, health) clients <-- PARTY_MEMBER ------ chat server (id, map, health)
Players chat
Chat messages are the same as on regular chat channels.