StendhalRefactoringRP: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>Tottiwagner
Adding Tactic Slider suggestion
imported>Kymara
 
(111 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{Navigation for Stendhal Top|Developing}}
{{Navigation for Stendhal Developers}}

{{Likely Outdated}}
{{Ideas for Stendhal}}

We need a rebalance of the RP system so it is playable and fun for both newbiews and high levels.
We need a rebalance of the RP system so it is playable and fun for both newbiews and high levels.
We have to talk about several things here:
We have to talk about several things here:
Line 10: Line 16:
* range
* range
* shield
* shield
ChadF also suggested another type of weapon skill system that you can review [[Ideas:chad3f|here]]
<br>
<br>


We want to avoid the situation of having to add items to monsters for them in order to combat, so we need to find a way of making compatible both systems ( the above one with the actual ATK/DEF one ).
We want to avoid the situation of having to add items to monsters for them in order to combat, so we need to find a way of making compatible both systems ( the above one with the actual ATK/DEF one ).


We need to design the system to avoid campers:<br>
We need to design the system to avoid campers:<br>
[[File:Stendhal 0.39 campers.jpg]]
http://arianne.sourceforge.net/wiki_images/stendhal_0.39_campers.jpg
<br><small>Image: Campers training in Stendhal 0.39</small>
<br><small>Image: Campers training in Stendhal 0.39</small>


Line 36: Line 45:
Combat right now works as follows:
Combat right now works as follows:
# We compute the ''risk'' to hit the target, using their ATK and DEF attributes-
# We compute the ''risk'' to hit the target, using their ATK and DEF attributes-
# If risk>0 then we compute if the target blocks the attack, or how much damage the target recieved.
# If risk>0 then we compute if the target blocks the attack, or how much damage the target received.


The formula looks like:
The formula looks like:
<pre>
<pre>
risk_to_hit = 2 * source[ATK] - target[DEF]+ roll[1D20] - 10
risk_to_hit = 20 * source[ATK] - roll[1D20] * target[DEF]


if risk_to_hit > 0:
if risk_to_hit > 0:
attacker_part = 0.8 * (roll[1D100] / 100) * source[ATK]^2 + 4 * source[ATK] * weapon
max_defence = √(target[DEF] * (10 + target[ARMOR])) * (10 + 0.03 * (target[LEVEL] + 5));
maxdamage = 0.8 * source[ATK]^2 + 4 * weapon
max_attack = source[ATK] * (1 + source[WEAPON])* (1 + 0.03 * (source[LEVEL + 5)) * speed_effect;
where: speed_effect = 1.0 - 0.5 * speed_part * level_part^2;
defender_part = 0.6 * (roll[1D100] / 100) * target[DEF]^2 + 4 * target[DEF] * shield + 2 * target[DEF] *
where: speed_part = 8 / (source[ATTACK_RATE] + 3.0);
armor + target[DEF]* helmet + target[DEF] * legs + target[DEF] * boots
level_part = 1.0 - (target[LEVEL] + 5) / (1.2 * (source[LEVEL] + 5));


damage = ((attacker_part - defender_part) / maxdamage) * (maxdamage / source[ATK])
damage = (8 * max_attack * random[0..1] - max_defence * random[0..1]) / max_defence;
</pre>
</pre>
There's also small karma effect for both the hitting chance and damage.


See that it is very important the ATK and DEF value, but that you can also get big improvements using weapons, armors, shields, etc...
See that it is very important the ATK and DEF value, but that you can also get big improvements using weapons, armors, shields, etc...
The beneficts you get from weapons and armors are directly proportional to your level.
The benefits you get from your items and skills are directly proportional to your level. The <code>speed_part</code> is responsible for making slow weapons more effective against strong enemies, and fast weapons better against weak enemies.


Creatures are balanced without items, and have constant item DEF of 0 and item ATK 5.
The formula is nicer than previous one because it gives a good range of damages and it adds lineal damage increase for using weapons and lineal damage absortion for using armors. Now the point is to give values to monsters that will always lack of equipment ( to simplify everything ).


===Range Combat===
===Range Combat===
Should be based on the above formula but:
Damage from ranged attacks is based on the above formula, but:
* We have a maximun range
* We have a maximum range
* Weapon is only effective on middle-long range
* Weapon is most effective on middle range
* Damage also depends of the arrow
* Item ATK is the sum of the bow and arrow ATK values


So a nice formula would be:
<pre>
<pre>
ranged_damage = distance_modifier * normal_damage
range_damage = damage * ( actual_distance / max range of weapon )
where:

if range = 0
if actual_distance < min_range:
range_damage = damage / 20
distance_modifier = 0.8
else
if actual_distance > max_range:
distance_modifier = 4 * (distance / out_of_range - distance^2 / out_of_range^2)
range_damage = 0
where:
out_of_range = max_range + 1,
</pre>
</pre>
Thus <code>ranged_damage</code> reaches the normal maximum damage at middle range, and drops to 0 at maximum range + 1. The point blank case is treated specially to avoid archers being completely helpless at melee.


Here is some improved formulas for ranged combat, they also use arrow damage.

<pre>
attacker_part = 0.8 * (roll[1D100] / 100) * source[ATK]^2 + 4 * source[ATK] * (weapon + arrow)
maxdamage = 0.8 * source[ATK]^2 + 4 * (weapon + arrow)

range_damage = damage * ( 1 - (actual_distance / max_range) ) + ( damage - damage * ( 1 - (min_range / max_range) ) ) *
( 1 - (actual_distance / max_range) )
</pre>
==Tactics slider==
==Tactics slider==
As a more or less easy to implement feature I (Zuse) suggest tactics sliders. A single (or more) slider(s) which can be adjusted by the player during the game.
As a more or less easy to implement feature I (Zuse) suggest tactics sliders. A single (or more) slider(s) which can be adjusted by the player during the game.
Line 116: Line 120:
==Magic==
==Magic==
{{TODO| update/replace with [[Ideas_for_Stendhal/Magic]] which is the current working document for magic ideas}}
Magic will be mana based, with each spell costing mana.
Magic will be mana based, with each spell costing mana.
Also you can have written spells that don't cost mana, but that vanish after they have been used.
Also you can have written spells that don't cost mana, but that vanish after they have been used.
Line 161: Line 166:
[[StendhalRefactoringClassBasics| Class Basics]]<br>
[[StendhalRefactoringClassBasics| Class Basics]]<br>


==Trading system==


Based on a idea suggested by '''Khesus'''

''Player1'' offers a trading deal with ''Player2'' by right-clicking on ''Player2'' and choosing ''Trade'':

''Player2'' is prompted with a window asking for accepting beginning a deal with ''Player1'' or not.

A bag window opens in the middle of the screen. The window is vertically splitted in two parts with a certain number of free slots in each part.
*Each part has the name of each Player on Top:
*The left part corresponds always to each Player, so the window that both players are looking is different because it is horizontally flipped from their view.
*Each part of the window has three buttons at the bottom: ''that's my offer'', ''deal!'' and ''no way!''. The ''deal!'' button is greyed at first.

GUI suggested by '''danter'''
<pre>
|------------------------------------------------------|
|Myself ||Other |
|--------------------------||--------------------------|
|ITEM ITEM ITEM ITEM ||ITEM//////////////////////|
| ||//////////////////////////|
|ITEM ||//////////////////////////|
| ||//////////////////////////|
|--------------------------||--------------------------|
|ICON || ICON|
|--------------------------||--------------------------|
|This is my offer!| | Deal! | | No way!|
|------------------------------------------------------|
</pre>

Each player can drag items from his respective bag and drop or remove them only in his part of the window.

Each player clicks on the ''that's my offer'' button at the bottom once he is satisfied with the items he has offered for the trade in his own part of the window.

Once a player has clicked on ''that's my offer'', the button is greyed and the background of the items he has offered for the deal appears greyed. If he tries to drop more items or remove any item, the ''that's my offer'' button is lightened again and the background too.

Once both players have clicked on ''that's my offer'' then their respective ''deal!'' buttons lighten.
They press it if they are satisfied with what the other player has dropped in the other part of window.

*If both players click on ''deal!'': the window is closed and the items are exchanged between them.
*If any of the players clicks on ''no way!'' at any time: the window is closed and the items return to their original owners.

(Idea suggested by ''Zuse'')
Trading offline: Storing an item or a fixed amount of money publicly somewhere to exchange for a fixed price or item. The interested player can drop the requested item in that place and receive the offered item.

==Shopping system==
It would be basically the same as the trading system but in this case one of the traders would be a NPC

(Idea suggested by ''kiheru'')

One could buy only what someone else has sold to the shop. Shop sellers naturally pay less than they take. If a player doesn't meet anyone willing to buy he can sell at the shop (for a poor price).

==Auctioning system==
It would be basically the same as the shopping system but in this case there are more than one shopping players competing for buying one item

==Party system==

A player types:

''/party nameofparty''

and automatically that party exists and this player is joined to that party.

To find out what parties a user belongs to (maybe this feature isn't desirable to keep privacy):

''/parties username''

To find out what players belong to a party:

''/members nameofparty''

A member of the party can invite a player to join the party

''/invite player nameofparty''

If ''nameofparty'' exists, the members of that party (that are online) are asked if they want to accept the new member. The decision with major number of votes wins. To join a party, at least one of the members has to be online.

The xp points obtained by every member of the party are showed like always but in a different color (possibly grey) and aren't added to the player experience.
The items dragged to the bag of every member are shown in a different color (possibly grey) and can't be used if they are consumable.

At one point, a player suggests:

''/share nameofparty''

This command only works if the player belongs to ''nameofparty''.
All of the members that have contributed to the loot since last sharing must be online and are asked if they want to share at that moment. The decision with major number of votes wins.

If the share is accepted a bag window opens in the middle of the screen.
Every item is assigned a value in points, the total is computed and every player is assigned a fraction of that total.

The sharing can be:
*equal for every player
*proportional to the sum of the given and received damage points by every player since last sharing.

Every player is prompted with a window to choose between equal or proportional sharing. The decision with major number of votes wins.

The xp points gathered by the group of members since last sharing is shared immediately

Each Player chooses the items he wants until:
*the amount of items' value:
**reaches the player's assigned points.
**surpasses the player's assigned points for the first time.
*The player clicks on ''No more'' button

Then he can't drag any more item.

If a player chooses an stackable item, the quantity is chosen so that it reaches the rest of the player's assigned points. Thus, users should drag stackable items only at the end

When any player can't drag more items from the bag the sharing process begins:
*if two players have chosen the same item:
**the item is randomly assigned to one of the players.
**the players that don't get the chosen item receive (if possible) part of the rest of the loot in equal parts (if possible)

If there's a part of the loot that hasn't been assigned to any of the players, it is dropped on the ground (at average distance of the group of players) and the faster player gets it.

When a player wants to abandon a party he simply types:

''/quit nameofparty''

If all the members of the party (except perhaps the affected player) are online and the number of party members is more than 2, a member can suggest expelling another member:

''/expel username nameofparty''

Every player (included the affected player) is prompted with a window to choose yes or no. The decision with major number of votes wins.

Note: the same user can belong (at least in theory) to many parties.(Maybe this feature is not possible)

There could be an analogue feature to the buddy list for parties so that every member would be notified any time other member logs in and out.


<br>
<br>
Line 295: Line 174:
[[StendhalRefactoring| Back to stendhal refactoring page]] <br>
[[StendhalRefactoring| Back to stendhal refactoring page]] <br>
[[Stendhal | Back to Stendhal main wiki page]] <br>
[[Stendhal | Back to Stendhal main wiki page]] <br>

[[Category:Development]]