StendhalDesign: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>Hendrik Brummermann
m Reverted edit of Eitdkesww, changed back to last version by Slady
 
(132 intermediate revisions by 6 users not shown)
Line 1: Line 1:
This small doc tries to create an agreement on what stendhal is about and what it needs to include. It considers the existing [[http://arianne.sourceforge.net/wiki/index.php/StendhalObjectives#Roadmap Roadmap]] and tries to give a coherent vision of what we are trying to create.
This small doc tries to create an agreement on what stendhal is about and what it needs to include. It considers the existing [[StendhalObjectives#Roadmap Roadmap|]] and tries to give a coherent vision of what we are trying to create.


Please use the Discussion tab (found in the menu at the top of the page) to query about things or make suggestions.
Please use the Discussion tab (found in the menu at the top of the page) to query about things or make suggestions.
Line 26: Line 26:
It is split in to 4 different areas to test the multizones feature of Arianne.<br>
It is split in to 4 different areas to test the multizones feature of Arianne.<br>
Players need to change zone in order to accomplish their task.
Players need to change zone in order to accomplish their task.

Our world is made of several entities: players, wolves, rats, sheeps, NPC. By describing each entity with use cases we will simplify later the coding stage.


== Use cases description ==
== Use cases description ==
We need to use several use cases to describe our game.
We need to use several use cases to describe our game.

===Player's user case===
===Player's user case===
Player is an entity that play the game, it can move, chat, attack, heal.
Player is an entity that play the game, it can move, chat, attack, heal.
Line 95: Line 98:
If listen "Sell Sheep" from Player:
If listen "Sell Sheep" from Player:
Estimate Sheep value related to Sheep weight
Estimate Sheep value related to Sheep weight
Seller says "Do you want to sell buy a Sheep for <estimated price> coins?"
Seller says "Do you want to sell your Sheep for <estimated price> coins?"
If listen "yes" from Player:
If listen "yes" from Player:
set Player money=Player money + <estimated price>
set Player money=Player money + <estimated price>
set Player XP=Player XP + 100 * Sheep Weight / 100
Destroy Sheep
Destroy Sheep
Line 132: Line 136:
Wolf attacks Attacker
Wolf attacks Attacker
</pre>
</pre>

===Rat's user case===
Rat and Cave rats are creatures that will attack player to make it harder to grow the sheep up.
<pre>
Rat moves
If Rat sees Player:
Rat attacks Player
If Rat is attacked:
Rat attacks Attacker
</pre>





Line 140: Line 156:
* Sheep buyer
* Sheep buyer
* Wolf
* Wolf
* Rat
* Cave rat
* Player
* Player
* Food
* Food
Line 154: Line 172:
* <b>dy</b> is the y-speed of the sheep
* <b>dy</b> is the y-speed of the sheep
* <b>hp</b> is the life indicator of the sheep, when it reach 0 the sheep dies.
* <b>hp</b> is the life indicator of the sheep, when it reach 0 the sheep dies.
* <b>atk</b> is the RP attack value. See [[StendhalDesign#RP|RP rules]]
* <b>def</b> is the RP defense value. See [[StendhalDesign#RP|RP rules]]
* <b>xp</b> is the RP experience value. See [[StendhalDesign#RP|RP rules]]
* <b>weight</b> is the weight indicator of the sheep, the more weight, the more expensive it is.
* <b>weight</b> is the weight indicator of the sheep, the more weight, the more expensive it is.


Line 162: Line 183:
The sheeps behaviour is mainly to follow its owner and look for food.<br>
The sheeps behaviour is mainly to follow its owner and look for food.<br>
If the Sheep finds food, it will eat.<br>
If the Sheep finds food, it will eat.<br>
Sheep will runaway if attacked by wolves.<br>
Sheep will runaway if attacked.<br>


=== Wolf ===
=== Creatures: Wolf, rat and Cave rat ===
Wolves have the following set of attributes:
Wolves, rats and cave rats have the following set of attributes:
* <b>x</b> is the x-position of the wolf
* <b>x</b> is the x-position of the wolf
* <b>y</b> is the y-position of the wolf
* <b>y</b> is the y-position of the wolf
Line 172: Line 193:
* <b>hp</b> is the life indicator of the wolf, when it reach 0 the wolf dies.
* <b>hp</b> is the life indicator of the wolf, when it reach 0 the wolf dies.
* <b>atk</b> is the RP attack value. See [[StendhalDesign#RP|RP rules]]
* <b>atk</b> is the RP attack value. See [[StendhalDesign#RP|RP rules]]
* <b>def</b> is the RP defense value. See [[StendhalDesign#RP|RP rules]]
* <b>xp</b> is the RP experience value. See [[StendhalDesign#RP|RP rules]]


Wolf tasks should be:
Wolf ( and rat and cave rat ) tasks should be:
* <b>follow</b> means that wolf follows an object using the shortest way to reach it.
* <b>follow</b> means that wolf follows an object using the shortest way to reach it.
* <b>attack</b> means that wolf will try to damage the attacked object until its hp reach 0<br>Another action will cancel attack task.
* <b>attack</b> means that wolf will try to damage the attacked object until its hp reach 0<br>Another action will cancel attack task.
Line 179: Line 202:
* <b>chat</b> means that wolf will start to shout 'auuuuuuu!'. Wolves will often understand this as a call.
* <b>chat</b> means that wolf will start to shout 'auuuuuuu!'. Wolves will often understand this as a call.


Wolf behaviour consists of patrolling some assigned areas.<br>
Wolf ( and rat and cave rat ) behaviour consists of patrolling some assigned areas.<br>
If the Wolf finds a Sheep, it will attack Sheep.<br>
If the Wolf finds a Sheep, it will attack Sheep.<br>
If the Wolf finds a Player, it will attack player.<br>
If the Wolf is attacked, the Wolf returns the attacks.<br>
If the Wolf is attacked, the Wolf returns the attacks.<br>
If the Wolf is injured, the Wolf will runaway.<br>
If the Wolf is severly injured, the Wolf will runaway.<br>


=== Sheep seller and Sheep buyer ===
=== Sheep seller, Sheep buyer, Beggar ===
The buyer and seller have the following set of attributes:
The buyer and seller have the following set of attributes:
* <b>x</b> is the x-position of the NPC
* <b>x</b> is the x-position of the NPC
Line 190: Line 214:
* <b>dx</b> is the x-speed of the NPC
* <b>dx</b> is the x-speed of the NPC
* <b>dy</b> is the y-speed of the NPC
* <b>dy</b> is the y-speed of the NPC
* <b>hp</b> is the life indicator of the NPC, when it reach 0 it is reset back to full.
* <b>atk</b> is the RP attack value. See [[StendhalDesign#RP|RP rules]]
* <b>def</b> is the RP defense value. See [[StendhalDesign#RP|RP rules]]
* <b>xp</b> is the RP experience value. See [[StendhalDesign#RP|RP rules]]
* <b>attending</b> is the object_id of the player that is actually attending.
* <b>attending</b> is the object_id of the player that is actually attending.


seller and buyer tasks would be:
seller, buyer and beggar tasks would be:
* <b>patrol</b> means that NPC will move around a specified path.
* <b>patrol</b> means that NPC will move around a specified path.


Line 204: Line 232:
* <b>dx</b> is the x-speed of the player
* <b>dx</b> is the x-speed of the player
* <b>dy</b> is the y-speed of the player
* <b>dy</b> is the y-speed of the player
* <b>hp</b> is the life indicator of the player, when it reach 0 the sheep dies.
* <b>hp</b> is the life indicator of the Player, when it reach 0 the player dies. See [[StendhalDesign#Dead|Dead]]
* <b>atk</b> is the RP attack value. See [[StendhalDesign#RP|RP rules]]
* <b>atk</b> is the RP attack value. See [[StendhalDesign#RP|RP rules]]
* <b>exp</b> is the experience of the player.
* <b>def</b> is the RP defense value. See [[StendhalDesign#RP|RP rules]]
* <b>xp</b> is the RP experience value. See [[StendhalDesign#RP|RP rules]]
* <b>money</b> is the quantity of money the player has.
* <b>money</b> is the quantity of money the player has.


Line 214: Line 243:
* right hand
* right hand
* backpack
* backpack
* flock


Player tasks should be:
Player tasks should be:
Line 260: Line 288:
The key on making Stendhal moving is to add actions.
The key on making Stendhal moving is to add actions.
As we have seen each entity has a list of actions that can do. Let's see them and study they interact.
As we have seen each entity has a list of actions that can do. Let's see them and study they interact.
===Player===

Our main entity is Player, it is gamer's avatar in stendhal world and as such, it is able to do the next set of actions:
Our main entity is Player, it is gamer's avatar in stendhal world and as such, it is able to do the next set of actions:

* Move<br>Move action can be understand as two actions:
====Move====
** Move to left,right,up or down while key is down<br>This action allows controlling gamer's avatar using our keyboard that is the arcade/adventure game style like Nintendo Zelda.
Move action can be understand as two actions:
Move to left,right,up or down while key is down<br>This action allows controlling gamer's avatar using our keyboard that is the arcade/adventure game style like Nintendo Zelda.


This action should have the next set of attributes:
This action should have the next set of attributes:
*** '''dx''' horizontal speed of the avatar
* '''dx''' horizontal speed of the avatar
*** '''dy''' vertical speed of the avatar
* '''dy''' vertical speed of the avatar


We can have as many as we want of this action. The last action executed will be the only one that alters really dx and dy.
We can have as many as we want of this action. The last action executed will be the only one that alters really dx and dy.


====Move to a position====
** Move to a position<br>This action allows controlling game's avatar using a mouse, so we can click ( or double click ) to move to the position where the mouse clicked. This mode is great for a more relaxed adventure game style like Bioware Baldur's Gate.
This action allows controlling game's avatar using a mouse, so we can click ( or double click ) to move to the position where the mouse clicked. This mode is great for a more relaxed adventure game style like Bioware Baldur's Gate.


This action should have the next set of attributes:
This action should have the next set of attributes:
*** '''x''' desired x coordinate of the avatar
* '''x''' desired x coordinate of the avatar
*** '''y''' desired y coordinate of the avatar
* '''y''' desired y coordinate of the avatar


We can only have ONE action of this type and only the latest one will be considered valid. This action is cancelled by any other action like Move, Attack, Face, ...
We can only have ONE action of this type and only the latest one will be considered valid. This action is cancelled by any other action like Move, Attack, Face, ...
Line 282: Line 313:
If avatar collides with something while moving, dx and dy will become 0.
If avatar collides with something while moving, dx and dy will become 0.


====Face====
* Face<br>This action is useful as a extra for the social side of the game; when you are talking it is often good to ''face'' the person you are talking too. So face action allows our character to look at the direction we tell it: left, right, up or down.
This action is useful as a extra for the social side of the game; when you are talking it is often good to ''face'' the person you are talking too. So face action allows our character to look at the direction we tell it: left, right, up or down.


====Chat====
* Chat<br>This action is the base of any social game like a MORPG.
This action is the base of any social game like a MORPG.


This action should have the next set of attributes:
This action should have the next set of attributes:
** '''text''' text that the player is going to say
* '''text''' text that the player is going to say


Due to Arianne framework it is not possible to create a yell or whisper action, when you talk, you talk for everybody in the area, that is why area design is *VERY* important to achieve a good gameplay.
Due to Arianne framework it is not possible to create a yell or whisper action, when you talk, you talk for everybody in the area, that is why area design is *VERY* important to achieve a good gameplay.


====Attack====
* Attack<br>This action is the core of the gameplay for lots of gamers to consider the game fun. All the combat is ruled by the RP game system explained in the RP section of this page.
This action is the core of the gameplay for lots of gamers to consider the game fun. All the combat is ruled by the RP game system explained in the RP section of this page.


There are some limitations for combat right now:
There are some limitations for combat right now:
* No PvP ( Player versus Player )
* No PvP ( Player versus Player )
* Can't attack sheeps
* Can't attack yourself
* Can't attack yourself
* Can't attack NPC
* Can't attack NPC
Line 303: Line 336:


This action should have the next set of attributes:
This action should have the next set of attributes:
** '''target''' the object.ID of the player that we are attacking.
* '''target''' the object.ID of the player that we are attacking.


This action require that the target of the action is ''near'' our avatar. Near means that target's avatar have to be colliding with our avatar.
This action require that the target of the action is ''near'' our avatar. Near means that target's avatar have to be colliding with our avatar.


The attack action has the implicit meaning of following the target.
The attack action has the implicit meaning of following the target.

====Equipment and Inventory====
This action is very important as it handles most of the complexity and the fun of a RPG: getting new stuff and use items to solve quests.

'''TODO'''


=RP=
=RP=
Line 330: Line 368:
* <b>level</b> - this starts off as zero when the character is created and will increase related to experience
* <b>level</b> - this starts off as zero when the character is created and will increase related to experience
* <b>experience</b> - this is the amount of experience gained at the current level
* <b>experience</b> - this is the amount of experience gained at the current level

===Entity Attribute values===
The hardest part of any RP is to give balance to the values different entities has.

We need to give RP(atk, def and hp) values to:
====Player====
Let's make our starting player to be:
* <b>ATK</b> - 2
* <b>DEF</b> - 2
* <b>HP</b> - 100

These values have been set randomly.

====Sheep====
A sheep can't attack, so it has to be weaker than player.
* <b>ATK</b> - 0
* <b>DEF</b> - 1
* <b>HP</b> - 30

These values have alse been set randomly according to player values.
Killing a sheep won't report you any experience.

====Rat====
A rat is the simplest enemy you can find in Stendhal, so it has to be simple enought for a Level 1 player to kill.
* <b>ATK</b> - 3
* <b>DEF</b> - 2
* <b>XP</b> - 5
* <b>HP</b> - 10

To set these values we have run a simulation until we have get the right look in the graphs.<br>
http://arianne.sourceforge.net/wiki_images/rat.gif

====Cave Rat====
A cave rat is a stronger version of a rat, so it has to be simple enought for a Level 2-3 player to kill.
* <b>ATK</b> - 6
* <b>DEF</b> - 2
* <b>XP</b> - 10
* <b>HP</b> - 20

To set these values we have run a simulation until we have get the right look in the graphs.<br>
http://arianne.sourceforge.net/wiki_images/caverat.gif

====Wolf====
A wolf is a common creature on plains and forest, it has to be simple enought for a Level 4-5 player to kill.
* <b>ATK</b> - 6
* <b>DEF</b> - 4
* <b>XP</b> - 18
* <b>HP</b> - 35

To set these values we have run a simulation until we have get the right look in the graphs.<br>
http://arianne.sourceforge.net/wiki_images/wolf.gif


== Experience and levels ==
== Experience and levels ==
Line 344: Line 433:


<table border=1 align=center>
<table border=1 align=center>
<tr bgcolor=black><td><font color=white>Level</font></td><td><font color=white>Experience needed</font></td></tr>
<tr bgcolor=black><td><font color=white>Level</font></td><td><font color=white>Experience needed</font></td><td>HP value</td></tr>
<tr><td>1</td><td>10</td></tr>
<tr><td>0</td><td>0</td><td>100</td></tr>
<tr><td>2</td><td>20</td></tr>
<tr><td>1</td><td>100</td><td>110</td></tr>
<tr><td>3</td><td>40</td></tr>
<tr><td>2</td><td>128</td><td>120</td></tr>
<tr><td>4</td><td>80</td></tr>
<tr><td>3</td><td>384</td><td>130</td></tr>
<tr><td>5</td><td>160</td></tr>
<tr><td>4</td><td>768</td><td>140</td></tr>
<tr><td>6</td><td>320</td></tr>
<tr><td>5</td><td>1408</td><td>150</td></tr>
<tr><td>7</td><td>previous*2</td></tr>
<tr><td>6</td><td>2432</td><td>160</td></tr>
<tr><td>7</td><td>3712</td><td>170</td></tr>
<tr><td>8</td><td>5504</td><td>180</td></tr>
<tr><td>9</td><td>7808</td><td>190</td></tr>
<tr><td>10</td><td>10624</td><td>200</td></tr>
</table>
</table>

As you can deduce the HP grows at a rate of 10 per level, and ATK and DEF values are increased one on each new level.
The formula to calculate XP is:
exp = (10*level+5*level^2+10*level^3+80)


== Combat ==
== Combat ==
Combat is a fight between two or more players.
Combat is a fight between two or more players.


The combat is round based. Each round takes 10 turns.
The combat is round based. Each round takes 5 turns.

To determine whose player start first choose the player who has the biggest value of:
<pre>
Player.Level + 1D6
</pre>


The risk to strike a player can be written as:
The risk to strike a player can be written as:
<pre>
<pre>
Attacker.attack + 1D6 VS Defender.defense + Defender.shield.rating + 1D6
Attacker.attack VS Defender.defense/6 + 1D6
</pre>
</pre>


If player is hit we need to compute the wound that has been done:
If player is hit we need to compute the wound that has been done:
<pre>
<pre>
result = Attacker.weapon.rating - Defender.armor.rating + 1D6 each 6 Attacker.level
result = Attacker.attack/6 + 1D6 VS Defender.defense
if result > 0:
if result > 0:
Defender.hp = Defender.hp - result
Defender.hp = Defender.hp - result
Line 379: Line 472:
Death happens when hp reachs 0.
Death happens when hp reachs 0.


A critical hit happens when both die rolls are 6. And the damage is equal to Attacker.attack
hp points are recovered at a natural rate of 1 HP point each 1000 turns.


===Shields===
===Shields===
Line 388: Line 481:
<tr><td>Small shield</td><td>+2</td></tr>
<tr><td>Small shield</td><td>+2</td></tr>
<tr><td>Medium shield</td><td>+3</td></tr>
<tr><td>Medium shield</td><td>+3</td></tr>
<tr><td>Large shield</td><td>+4</td></tr>
<tr><td>Tower shield</td><td>+5</td></tr>
<tr><td>Tower shield</td><td>+5</td></tr>
<tr><td>Green Scale shield</td><td>+6</td></tr>
<tr><td>Black Scale shield</td><td>+7</td></tr>
</table>
</table>
* black/green scale shields are dropped from the black/green dragon.


===Armour===
===Armour===
Line 402: Line 499:
<tr><td>Field plate armour</td><td>+6</td></tr>
<tr><td>Field plate armour</td><td>+6</td></tr>
<tr><td>Full plate armour</td><td>+7</td></tr>
<tr><td>Full plate armour</td><td>+7</td></tr>
<tr><td>Green Scaled armour</td><td>+8</td></tr>
<tr><td>Black Scaled armour</td><td>+9</td></tr>
</table>
</table>
* black/green scaled armour are dropped from the black/green dragon.


===Weapon===
===Weapon===
Line 414: Line 514:
<tr><td>Long sword</td><td>+6</td></tr>
<tr><td>Long sword</td><td>+6</td></tr>
<tr><td>Two hand sword</td><td>+7</td></tr>
<tr><td>Two hand sword</td><td>+7</td></tr>
<tr><td>Green Scaled sword</td><td>+8</td></tr>
<tr><td>Black Scaled sword</td><td>+9</td></tr>
</table>
</table>
* black/green scaled swords are dropped from the black/green dragon.

== Dead ==
The result of combat is usually dead.

When you kill a creature a corpse will appear. If you open it, you will be able to get whatever it has inside, usually food, gold, weapons, shields or armors.<br>
Each time you kill a monster you are rewarded XP.

When you are killed you reappear on city and you lose your sheep if you have one.<br>
Also to penalize dead, you are remove 10% of exp points and if it is the case you are removed HP, ATK and DEF increases because of level up.