Difference between revisions of "User:Xudojnik"

From The Battle for Wesnoth Wiki
m (this doesn't belong in Category:WML_Reference, nor does it need the sidebar of Template:WML_Tags)
 
(65 intermediate revisions by one other user not shown)
Line 3: Line 3:
 
===WesMMO===
 
===WesMMO===
 
To play it (now only in theory):
 
To play it (now only in theory):
#Design new character.
 
 
#*Download WesMMO era.
 
#*Download WesMMO era.
#*Download beginner's map, designed for WesMMO.
+
#*Download any map, designed for WesMMO.
 
#*Create game in lobby.
 
#*Create game in lobby.
#*Create an "account" and character on it.
+
#*WesMMO era will automatically use your account.
#*Win beginner's scenario.
+
#*Now choose any three units from your account or create new and play.
#Get fun.
+
#*Persistent data will be stored at the end of each turn
#*Download some other playable map, designed for WesMMO.
+
 
#*Create game in lobby.
+
Character is a "team" of three units. Each unit have own stats and small inventory
#*Map will automatically use your account. Now choose any existed character and play.
+
;Stats:
 +
:Stamina - increases your hitpoints. ''Each point of stamina should increase survivalalibity of unit for an average amount of damage, given by 1 strength or agility, multiplied by 6.
 +
:Strength - increases your melee damage and armor contribution from items.
 +
:Speed - increases your movement points.
 +
:Agility - increase your ranged damage and defense on each type of terrain.
 +
::100 * A / (A + 30) 60% Defence at 45 agility
 +
::100 * A / (A + 20) 60% Defence at 30 agility
 +
::100 * A / (A + 10) 60% Defence at 15 agility
 +
:Intellect - increase magical potence of unit in some ways
 +
 
 +
;Inventory:
 +
:Melee Weapon - affects melee combat: multiplies damage from strength and number of strikes.
 +
:Ranged Weapon - affects ranged combat: multiplies damage from agility and number of strikes.
 +
:Amulet - affects base stats, magical resistances and magical potency of unit
 +
:Body Armor - affects base stats, all resistances and defenses.
 +
:Boots - affects base stats and multiplies speed of unit.
 +
:Helm - affects melee resistances and magical potence of unit.
 +
 
 +
Each item have it's own stats.
  
 
;Spell system:
 
;Spell system:
Line 19: Line 36:
 
:There are no limit of uses through whole scenario.
 
:There are no limit of uses through whole scenario.
  
Character is a "team" of three units. Each unit have own stats, small inventory and spellbook.
+
Each item has it own's id. This ID is the key to macro what will apply effect of item stats to unit structure. Data about it will be stored inside WesMMO era. That allows me to implement 'inventory slots'. Players will carry unused items in them.
;Stats should be simple:
+
 
:Stamina - increases your hitpoints by 5 per point.
+
 
:Strength - increases your melee damage.
+
 
:Speed - increases your movement points.
+
Ideas:
:Agility - increase your defense on each type of terrain by 1% per point and ranged damage.
+
#situation: players A,B,C,D starts the game. player B leaves game before it ends. spectator E (player A) takes control of units B. players A,E,C,D ends the game and information about their units is stored to persistent. player E gets units of player B.
:Intellect ''or Spell Power (or both)''- increase magical potence of unit
+
#suggestion: Best items should kill much time before player get them, but players should get something each time they play this game. Ways to reach this objective:
 +
#*1) Add "random stats" to items. Then item drops, RNG choose stats on them between predefined sets. 1/4 of randem stat set (RaSS) should be awesome and 1/4 should be real crap.
 +
#*2) Add "crafted items". Players should collect some resourses and get to place where they can craft this item.
 +
#Itemisation(1). WesMMO will be published by patches. In each patch I will add some new items and functions to players. Items added in new patch should be better than items added in previous patch. But difference should not be enormous.
 +
#levelling(1). I would not change standart mechanic of XP colection of BfW. Each player have 3 unit, what allows them to prapare and perform last-hit for any unit. Levelling shouldn't make items of this patch worster.
 +
#Levelling(2). Data, stored in unit.class[], should contain multipliers of stats. Later this will be used to recalculate stats of unit.
 +
#Itemisation(2). There are three items: A(require 1-3 of X), B(require 2-5 of X), C(require 4-8 of X). While player have 3 X, he can't share A and B to others if he get them and can not use C. But when he collect 4 X, he can share A, can't share B and can use C.
 +
#Crafted items++. If craft of new items will require resourses from old patch, old maps will become outdated only if I will want this.
 +
#Itemisation(3). Items should have requirments by level.
 +
#Levelling(3). There should be a level cap in each patch.
 +
#Itemisation(4). Items can have no requirements by level, but stats on item can be influensed by level.
 +
#Itemisation(5). Add "mantle". It will have +int, +stam and magical resistances. Body no longer affect magical resistences and stam.
 +
#Development(1). Add various "count" functions to collect statistical data about each option in dialogs. This data should be stored in special namespace. Then this will be done, I should add to feedback thread request to put file with this data to the forum.
 +
#UI(1). Frankensteining. Each equipped item will have it's own overlay on unit. During the fights overlays aren't shown. Thats why I should create attack and defend animations what will look like cloud with "Ouch" messages jumped out of it.
 +
#UI(2). Fast backpack browser
 +
+-----------------------------+
 +
|  Backpack browser
 +
| +-------------------------+ |
 +
| | Back
 +
| +-------------------------+ |
 +
| +-------------------------+ |
 +
| | Next 10(5?)
 +
| +-------------------------+ |
 +
| +-------------------------+ |
 +
| | Previous 10(5?)
 +
| +-------------------------+ |
 +
| +-------------------------+ |
 +
| | item_slot) item_name id | |
 +
| +-------------------------+ |
 +
| +-------------------------+ |
 +
| | 2) Cracked Bow <id>
 +
| +-------------------------+ |
 +
+-----------------------------+
 +
 
 +
#UI(3). Resourse browser
  
;Inventory contains:
+
===WesMMO. Theorycraft===
:Healing Potion - number of them.
+
;Main questions:
:''Mana Potions - number of them.''
+
:1) I have some 'slots' of equipped items. Why player should fill all this slots?
:Melee Weapon - affects melee combat: strength_multiplier and number_of_strikes and possibly defenses.
+
:2) I have some 'stats' on items. Why player should concentrate on some stats and ignore other?
:Ranged Weapon - affects ranged combat: damage_from_agility_multiplier and number_of_strikes.
+
:3) There are some 'classes' of characters. How to make real difference between any two classes?
:Amulet - affects base stats, magical resistances and magical potency of unit
+
:4) How to make class system where anticlasses will exists.
:Body Armor - affects base stats, all resistances and defenses.
 
:Boots - affects base stats and have movement_multipier.
 
:Helm - affects melee resistances and magical potence of unit.
 
Each item has it own's id. This ID is the key to macro what will apply effect of item stats to unit structure. Data about it will be stored inside WesMMO era. That allows me to implement 'inventory slots'. Players will carry unused items in them.
 
  
;Classes of units:
+
;Base statements:
:Stalwart ''tank''.
+
:Player control 3 units.
{| border="1"
+
:Units have around 5 equipment 'slots' and few stats.
!Class
+
:Any damage dealing should be based on stadart battle system.
!Name
+
:There are around 5-10 different classes.
!Description
+
:Each class have at least 2 good, 2 worst and 2 average attack types and defenses.
!Type
+
:Item can not affect 2 good or 2 worst stats for any class at once.
|-
+
:Bonuses from items should not break class balance.
|rowspan="4"|Stalwart<br>''tank''
+
:Items are not able to affect all stats.
|Whirlwind
+
:All characters have same movement cost and base defence at any type of terrain.
|Damages all nearby enemies.
+
:Any character is able to wear any item he gets.
|Spell
 
|-
 
|Stun
 
|Temporary stun nearby enemy.
 
|Spell
 
|-
 
|Circle defense
 
|Increase resistances of nearby allies by 50% of caster's resistance. Cancels when caster moves.
 
|Aura
 
|-
 
|Last Stand
 
|Increase caster's agility for amount of nearby allies agility. Cancels when caster moves.
 
|Self-aura
 
|-
 
|rowspan="4"|Berserker<br>''melee damage-dealer''
 
|Reklesness
 
|Temporary increase damage by 25% and decrease all resistances by 1/2.
 
|Spell
 
|-
 
|Inspire
 
|Increase damage of all nearby allies by 25% and decrease own damage by 50%. Cancels when caster moves.
 
|Aura
 
|-
 
|Berserker's strike
 
|Damage nearby enemy for 2x of weapon damage.
 
|Spell
 
|-
 
|Cleave attack
 
|Damage three nearby enemies for weapon damage.(targeted and two nearby to it and caster)
 
|Spell
 
|-
 
|rowspan="4"|Poacher<br>''ranged damage-dealer''
 
|Piercing shot
 
|Damage enemy and unit behind it.
 
|Spell
 
|-
 
|Way Guidance
 
|Temporary gives to nearby allied units an ability to ignore ZoC and terrain cost.
 
|Spell
 
|-
 
|Throw net
 
|Decrease movement costs of three nearby enemies.(targeted and two nearby to it and caster)
 
|Spell
 
|-
 
|Camouflage
 
|Hides nearby allied units if they are on the same terrain as a caster. Cancels when caster moves.
 
|Aura
 
|-
 
|rowspan="4"|Cleric<br>''healer, spell damage-dealer''
 
|Medicine
 
|Heal full and cure nearby allied unit.
 
|Spell
 
|-
 
|Lightbeam
 
|Channels the pure beam of light to burn caster's enemy.
 
|Spell
 
|-
 
|Inner light
 
|Gives nearby units an ability to ignore ToD. Cancels when caster moves.
 
|Aura
 
|-
 
|Anti-magic Shield
 
|Increases resistances of all nearby allies by 50% of caster's resistances. Cancel when caster moves.
 
|Aura
 
|-
 
|}
 
Spells
 
:
 
:
 
  
;How does this work
+
;Stat system
There should be macro to refresh visible stats of hero (hp, damage e.t.c.) It should be called when unit change it's base stats.
+
Handling good/average/worst stats for any class.
 +
Each class will have set of modifiers, what will affect resistances. It can be equal to 1 (good), 2 (average), 4 (worst).
 +
''main formula of effect diminishing'':
 +
y = x / (a * x + 20) * 100%, where
 +
x - value from gear,
 +
a - class modifier.
 +
According to this formula, there are 3 tier of armor exists:
 +
1 tier: gear give 1-20 value (5-50;5-33;5-20)
 +
2 tier: gear give 20-40 value (50-66;33-40;20-22)
 +
3 tier: gear give 40-80 value (66-80;40-45;22-23)
 +
The following stats are good for any class:
 +
:hitpoint amount. ''Even mages with ranged combat should stand face-to-face to it's current opponent. Noone can one-shot any other class with full hp. Thats why mage surely will get some amount of damage from counterattack.
 +
:movepoints amount. ''Difference in 1 point of movement make one unit unreachable by other.
  
Database is a ton of functions what changes values of equipped items in "unit.inv".
+
There are 5 equippable slots:
 +
:1 - affects magical combat
 +
:2 - affects defences
 +
:3 - affects melee combat
 +
:4 - affects ranged combat
 +
:5 - affects movement
  
struct unit{
+
If item affects combat, it always says how many strikes you have and how much damage you will deal with this item. This should also be influenced by class, in some way, to make sure, what character A can not be owerpowered just because enemy have wrong and this class - right weapon.
  struct inv{
 
  int body_item_id;
 
  int boots_item_id;
 
  int head_item_id;
 
  int melee_item_id;
 
  int ranged_item_id;
 
  int healing_potions;
 
  struct free_slot[6]{
 
    int item_id;
 
    string item_type;
 
  };
 
  struct body{
 
    int stamina;
 
    int strength;
 
    int agility;
 
    int pierce;
 
    int blade;
 
    int blow;
 
    int arcane;
 
    int fire;
 
    int cold;
 
  };
 
  struct boots{
 
    int speed;
 
    int speed_multiplier;
 
    int stamina;
 
    int strength;
 
    int agility;
 
  };
 
  struct head{
 
    int pierce;
 
    int blade;
 
    int blow;
 
    int intellect;
 
  };
 
  struct amulet{
 
    int arcane;
 
    int fire;
 
    int cold;
 
    int intellect;
 
    int stamina;
 
  };
 
  struct melee{
 
    int strength_multiplier;
 
    string type;
 
    int speed;
 
    int defense;
 
  };
 
  struct ranged
 
    int agility_multiplier;
 
    string type;
 
    int speed;
 
  };
 
  };
 
  struct buffed{
 
  int stamina;
 
  int strength;
 
  int agility;
 
  int speed;
 
  int pierce;
 
  int blade;
 
  int blow;
 
  int arcane;
 
  int fire;
 
  int cold;
 
  int hitpoints_multiplier; //NOTE: There is no stamina_multiplier.
 
  int strength_multiplier;
 
  int agility_multiplier;
 
  int speed_multiplier;
 
  };
 
  struct class{
 
  int stamina;
 
  int strength;
 
  int speed;
 
  int agility;
 
  struct defense{
 
    int castle;
 
    int cave;
 
    int deep_water;
 
    int flat;
 
    int forest;
 
    int frozen;
 
    int fungus;
 
    int hills;
 
    int reef;
 
    int sand;
 
    int shallow_water;
 
    int swamp_water;
 
  };
 
  struct resistance{
 
    int arcane;
 
    int blade;
 
    int cold;
 
    int fire;
 
    int impact;
 
    int pierce;
 
  };
 
  };
 
  //standart WML values:
 
  int max_experience;
 
  int max_hitpoints;
 
  int max_moves;
 
  struct defense{
 
  int castle;
 
  int cave;
 
  int deep_water;
 
  int flat;
 
  int forest;
 
  int frozen;
 
  int fungus;
 
  int hills;
 
  int reef;
 
  int sand;
 
  int shallow_water;
 
  int swamp_water;
 
  };
 
  struct resistance{
 
  int arcane;
 
  int blade;
 
  int cold;
 
  int fire;
 
  int impact;
 
  int pierce;
 
  };
 
  struct attack[2]{
 
  int damage;
 
  int number;
 
  int type;
 
  int range;
 
  }; // 0 - melee, 1 - ranged
 
};
 
struct "inv" will be stored as persistent variable. Other structures will be forgotten, because there will be functions to calculate their content.  
 
  
unit Player;
+
How can I make difference for class A between weapon a and b?
StoreUnit( Player );
+
:1) Class multiplier. ''Multipliers for damage is not a good idea.
//This function counts output values, what player will see on the right panel.
+
:2) Gear hacking. ''This way is rather hard, but possible.
+
:3) Weapon blocking. ''Easy as pie.
void UpdateStats( unit * Player )
 
{
 
  Player.damage =
 
 
  Temp = Player.max_hitpoints / Player.hitpoints;
 
 
  Player.max_hitpoints = ( Player.class.stamina + Player.inv.body.stamina + Player.inv.boots.stamina + Player.buffed.stamina ) * Player.buffed.hitpoints_multiplier;
 
 
  Player.hitpoints = Player.max_hitpoints / Temp;
 
 
  Player.max_moves = ( Player.class.speed + Player.inv.boots.speed + Player.buffed.speed ) * Player.inv.boots.speed_multiplier * Player.buffed.speed_multiplier;
 
 
  Player.defense.castle = Player.class.defense.castle + Player.buffed.defense.castle + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; // I can easily tweak it later.
 
 
  Player.defense.cave = Player.class.defense.cave + Player.buffed.defense.cave + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5; // I can easily tweak it later.
 
 
  Player.defense.deep_water = Player.class.defense.deep_water + Player.buffed.defense.deep_water + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.flat = Player.class.defense.flat + Player.buffed.defense.flat + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.forest = Player.class.defense.forest + Player.buffed.defense.forest + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.frozen = Player.class.defense.frozen + Player.buffed.defense.frozen + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.fungus = Player.class.defense.fungus + Player.buffed.defense.fungus + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.hills = Player.class.defense.hills + Player.buffed.defense.hills + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.reef = Player.class.defense.reef + Player.buffed.defense.reef + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.sand = Player.class.defense.sand + Player.buffed.defense.sand + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.shallow_water = Player.class.defense.shallow_water + Player.buffed.defense.shallow_water + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.defense.swamp_water = Player.class.defense.swamp_water + Player.buffed.defense.swamp_water + Player.inv.melee.defense + ( Player.class.agility + Player.buffed.agility + Player.inv.body.agility + Player.inv.boots.agility ) * 5;
 
 
  Player.resistance.arcane = Player.class.resistance.arcane + Player.buffed.resistance.arcane + Player.body.arcane;
 
 
  Player.resistance.fire = Player.class.resistance.fire + Player.buffed.resistance.fire + Player.body.fire;
 
 
  Player.resistance.cold = Player.class.resistance.cold + Player.buffed.resistance.cold + Player.body.cold;
 
 
  Player.resistance.pierce = Player.class.resistance.pierce + Player.buffed.resistance.pierce + Player.body.pierce + Player.head.pierce;
 
 
  Player.resistance.blow = Player.class.resistance.blow + Player.buffed.resistance.blow + Player.body.blow + Player.head.blow;
 
 
  Player.resistance.blade = Player.class.resistance.blade + Player.buffed.resistance.blade + Player.body.blade + Player.head.blade;
 
 
  Player.attack[0].damage = ( Player.class.strength + Player.inv.body.strength + Player.inv.boots.strength + Player.buffed.strength ) *  Player.inv.melee.strength_multiplier * Player.buffed.damage_multiplier;
 
 
  Player.attack[0].number = Player.inv.melee.speed;
 
 
  Player.attack[0].type = Player.inv.melee.type;
 
 
  Player.attack[1].damage = ( Player.class.agility + Player.inv.body.agility + Player.inv.boots.agility + Player.buffed.agility ) *  Player.inv.melee.agility_multiplier * Player.buffed.damage_multiplier;
 
 
  Player.attack[1].number = Player.inv.ranged.speed;
 
 
  Player.attack[1].type = Player.inv.ranged.type;
 
}
 
UnstoreUnit();
 
  
void TakeOffItem( int itemid, string itemtype, unit * Player )
+
Damage and number of strikes completely influenced by weapon. That means, what weapons of same tier, will have same damage output.
{
+
:Blade-based melee weapons are fast. Ex: 2-6
}
+
:Blow-based melee weapons have average characterictics. 3-4 or 4-3
 +
:Only arcane melee weapon allowed. it's speed and damage is not good itself, but it is not influenced by common physical resistances.
 +
:Pierce weapons are usually ranged and rather fast. 3-4 or 2-6.
 +
:Fire magic is one-shottable. 12-1 and cannot miss, of course.
 +
:Cold magic is a pain. 1-12.
  
  void PickUpItem( int itemid, string itemtype, unit * Player )
+
There are 2 group of stats:
  {
+
:''Active''
  }
+
:''Passive''
 +
There are two ''active'' stat: hitpoint and damage, and two ''passive'': dodge chance and absorbition.
 +
And total list of stats will look like this:
 +
+--------------------+---+
 +
| stat              |PPL|
 +
+--------------------+---+
 +
| hitpoints          |60 |
 +
+-------+------------+---+
 +
| blade |            |  |
 +
| blow  |            |  |
 +
| pierce|absorbitions| 5 |
 +
| arcane|            |  |
 +
| fire  |            |  |
 +
| cold  |            |  |
 +
+-------+------------+---+
 +
| blade |            |  |
 +
| blow  |            |  |
 +
  | pierce|  power    |10 |
 +
| arcane|            |  |
 +
| fire  |            |  |
 +
| cold  |            |  |
 +
+-------+------------+---+
 +
  | avoidance          | 4 |
 +
  +-------+------------+---+
 +
Absorbitions have limits in 12 levels.
 +
Let's imagine, what absorbition capped at 75% value. According to ''main formula of effect diminishing'', character with a=1 will achieve 75% mitigation at x=60. And 60 / 5 = 12.
  
TODO:
+
Look to this table:
<br>Add missed formulas to UpdateStats();.
+
x value difference value difference value difference
<br>Update PickUpItem();.
+
0 0 0 0
<br>Update TakeOffItem();.
+
5 16,66666667 16,66666667 12,5 12,5 20 20
<br>Implement free slots.
+
10 25 8,333333333 16,66666667 4,166666667 33,33333333 13,33333333
<br>Make things clear about spells.
+
15 30 5 18,75 2,083333333 42,85714286 9,523809524
<br>Make things clear about AMLA.
+
20 33,33333333 3,333333333 20 1,25 50 7,142857143
<br>Make things clear about trade.
+
25 35,71428571 2,380952381 20,83333333 0,833333333 55,55555556 5,555555556
<br>Implement loot tables from bosses and mobs.
+
30 37,5 1,785714286 21,42857143 0,595238095 60 4,444444444
<br>Implement "Group Loot".
+
35 38,88888889 1,388888889 21,875 0,446428571 63,63636364 3,636363636
 +
40 40 1,111111111 22,22222222 0,347222222 66,66666667 3,03030303
 +
45 40,90909091 0,909090909 22,5 0,277777778 69,23076923 2,564102564
 +
50 41,66666667 0,757575758 22,72727273 0,227272727 71,42857143 2,197802198
 +
55 42,30769231 0,641025641 22,91666667 0,189393939 73,33333333 1,904761905
 +
60 42,85714286 0,549450549 23,07692308 0,16025641 75 1,666666667
 +
2'nd column shows mitigation value at a = 2, 4'th at a = 4 and 6'th at a = 1. If you calculate average value of all difference columns and turn float value to int, you get 4. This is Avoidance PPL.
 +
There are also ''Soft cap'' and ''hard cap'' of mitigation. Soft cap means what further collecting of this stat is useful, but player can spend training points into something more valuable. Hard cap means what further improvement is not recommended (by me of course).
 +
:for a = 1. SC = 30. HC = 60
 +
:for a = 2. SC = 20. HC = 40.
 +
:for a = 4. SC = 10. HC = 20.
 +
Avoidance should give static value, because it is not depend from character class. And it should be capped too. According to wesnoth phylosophy, defence should not be higner than 60. 60 / 4 = 15 levels of stat.

Latest revision as of 20:57, 4 March 2018

I know Wesnoth from version 1.1.2a. This is really perspective game not only as strategy, but as RPG too. Large world, filled by history, epic battles, heroes and factions, is perfect for creating RPG. It's not so hard because Wesnoth have simple language, what support wide variety of events, easy way to define dialogs, items, forum and Wiki, where always can be found answer for any question.

WesMMO

To play it (now only in theory):

    • Download WesMMO era.
    • Download any map, designed for WesMMO.
    • Create game in lobby.
    • WesMMO era will automatically use your account.
    • Now choose any three units from your account or create new and play.
    • Persistent data will be stored at the end of each turn

Character is a "team" of three units. Each unit have own stats and small inventory

Stats
Stamina - increases your hitpoints. Each point of stamina should increase survivalalibity of unit for an average amount of damage, given by 1 strength or agility, multiplied by 6.
Strength - increases your melee damage and armor contribution from items.
Speed - increases your movement points.
Agility - increase your ranged damage and defense on each type of terrain.
100 * A / (A + 30) 60% Defence at 45 agility
100 * A / (A + 20) 60% Defence at 30 agility
100 * A / (A + 10) 60% Defence at 15 agility
Intellect - increase magical potence of unit in some ways
Inventory
Melee Weapon - affects melee combat: multiplies damage from strength and number of strikes.
Ranged Weapon - affects ranged combat: multiplies damage from agility and number of strikes.
Amulet - affects base stats, magical resistances and magical potency of unit
Body Armor - affects base stats, all resistances and defenses.
Boots - affects base stats and multiplies speed of unit.
Helm - affects melee resistances and magical potence of unit.

Each item have it's own stats.

Spell system
Each class have some predefined spells. In most cases they are not simple "damage unit X for Y hp". That's why they are the greatest headache for me.
Each unit can use it's spell once per turn.
There are no limit of uses through whole scenario.

Each item has it own's id. This ID is the key to macro what will apply effect of item stats to unit structure. Data about it will be stored inside WesMMO era. That allows me to implement 'inventory slots'. Players will carry unused items in them.


Ideas:

  1. situation: players A,B,C,D starts the game. player B leaves game before it ends. spectator E (player A) takes control of units B. players A,E,C,D ends the game and information about their units is stored to persistent. player E gets units of player B.
  2. suggestion: Best items should kill much time before player get them, but players should get something each time they play this game. Ways to reach this objective:
    • 1) Add "random stats" to items. Then item drops, RNG choose stats on them between predefined sets. 1/4 of randem stat set (RaSS) should be awesome and 1/4 should be real crap.
    • 2) Add "crafted items". Players should collect some resourses and get to place where they can craft this item.
  3. Itemisation(1). WesMMO will be published by patches. In each patch I will add some new items and functions to players. Items added in new patch should be better than items added in previous patch. But difference should not be enormous.
  4. levelling(1). I would not change standart mechanic of XP colection of BfW. Each player have 3 unit, what allows them to prapare and perform last-hit for any unit. Levelling shouldn't make items of this patch worster.
  5. Levelling(2). Data, stored in unit.class[], should contain multipliers of stats. Later this will be used to recalculate stats of unit.
  6. Itemisation(2). There are three items: A(require 1-3 of X), B(require 2-5 of X), C(require 4-8 of X). While player have 3 X, he can't share A and B to others if he get them and can not use C. But when he collect 4 X, he can share A, can't share B and can use C.
  7. Crafted items++. If craft of new items will require resourses from old patch, old maps will become outdated only if I will want this.
  8. Itemisation(3). Items should have requirments by level.
  9. Levelling(3). There should be a level cap in each patch.
  10. Itemisation(4). Items can have no requirements by level, but stats on item can be influensed by level.
  11. Itemisation(5). Add "mantle". It will have +int, +stam and magical resistances. Body no longer affect magical resistences and stam.
  12. Development(1). Add various "count" functions to collect statistical data about each option in dialogs. This data should be stored in special namespace. Then this will be done, I should add to feedback thread request to put file with this data to the forum.
  13. UI(1). Frankensteining. Each equipped item will have it's own overlay on unit. During the fights overlays aren't shown. Thats why I should create attack and defend animations what will look like cloud with "Ouch" messages jumped out of it.
  14. UI(2). Fast backpack browser
+-----------------------------+
|  Backpack browser
| +-------------------------+ |
| | Back
| +-------------------------+ |
| +-------------------------+ |
| | Next 10(5?)
| +-------------------------+ |
| +-------------------------+ |
| | Previous 10(5?)
| +-------------------------+ |
| +-------------------------+ |
| | item_slot) item_name id | |
| +-------------------------+ |
| +-------------------------+ |
| | 2) Cracked Bow <id>
| +-------------------------+ |
+-----------------------------+
  1. UI(3). Resourse browser

WesMMO. Theorycraft

Main questions
1) I have some 'slots' of equipped items. Why player should fill all this slots?
2) I have some 'stats' on items. Why player should concentrate on some stats and ignore other?
3) There are some 'classes' of characters. How to make real difference between any two classes?
4) How to make class system where anticlasses will exists.
Base statements
Player control 3 units.
Units have around 5 equipment 'slots' and few stats.
Any damage dealing should be based on stadart battle system.
There are around 5-10 different classes.
Each class have at least 2 good, 2 worst and 2 average attack types and defenses.
Item can not affect 2 good or 2 worst stats for any class at once.
Bonuses from items should not break class balance.
Items are not able to affect all stats.
All characters have same movement cost and base defence at any type of terrain.
Any character is able to wear any item he gets.
Stat system

Handling good/average/worst stats for any class. Each class will have set of modifiers, what will affect resistances. It can be equal to 1 (good), 2 (average), 4 (worst).

main formula of effect diminishing:
y = x / (a * x + 20) * 100%, where
x - value from gear,
a - class modifier.

According to this formula, there are 3 tier of armor exists: 1 tier: gear give 1-20 value (5-50;5-33;5-20) 2 tier: gear give 20-40 value (50-66;33-40;20-22) 3 tier: gear give 40-80 value (66-80;40-45;22-23) The following stats are good for any class:

hitpoint amount. Even mages with ranged combat should stand face-to-face to it's current opponent. Noone can one-shot any other class with full hp. Thats why mage surely will get some amount of damage from counterattack.
movepoints amount. Difference in 1 point of movement make one unit unreachable by other.

There are 5 equippable slots:

1 - affects magical combat
2 - affects defences
3 - affects melee combat
4 - affects ranged combat
5 - affects movement

If item affects combat, it always says how many strikes you have and how much damage you will deal with this item. This should also be influenced by class, in some way, to make sure, what character A can not be owerpowered just because enemy have wrong and this class - right weapon.

How can I make difference for class A between weapon a and b?

1) Class multiplier. Multipliers for damage is not a good idea.
2) Gear hacking. This way is rather hard, but possible.
3) Weapon blocking. Easy as pie.

Damage and number of strikes completely influenced by weapon. That means, what weapons of same tier, will have same damage output.

Blade-based melee weapons are fast. Ex: 2-6
Blow-based melee weapons have average characterictics. 3-4 or 4-3
Only arcane melee weapon allowed. it's speed and damage is not good itself, but it is not influenced by common physical resistances.
Pierce weapons are usually ranged and rather fast. 3-4 or 2-6.
Fire magic is one-shottable. 12-1 and cannot miss, of course.
Cold magic is a pain. 1-12.

There are 2 group of stats:

Active
Passive

There are two active stat: hitpoint and damage, and two passive: dodge chance and absorbition. And total list of stats will look like this:

+--------------------+---+
| stat               |PPL|
+--------------------+---+
| hitpoints          |60 |
+-------+------------+---+
| blade |            |   |
| blow  |            |   |
| pierce|absorbitions| 5 |
| arcane|            |   |
| fire  |            |   |
| cold  |            |   |
+-------+------------+---+
| blade |            |   |
| blow  |            |   |
| pierce|   power    |10 |
| arcane|            |   |
| fire  |            |   |
| cold  |            |   |
+-------+------------+---+
| avoidance          | 4 |
+-------+------------+---+

Absorbitions have limits in 12 levels. Let's imagine, what absorbition capped at 75% value. According to main formula of effect diminishing, character with a=1 will achieve 75% mitigation at x=60. And 60 / 5 = 12.

Look to this table:

x	value		difference	value		difference	value		difference
0	0				0				0	
5	16,66666667	16,66666667	12,5		12,5		20		20
10	25		8,333333333	16,66666667	4,166666667	33,33333333	13,33333333
15	30		5		18,75		2,083333333	42,85714286	9,523809524
20	33,33333333	3,333333333	20		1,25		50		7,142857143
25	35,71428571	2,380952381	20,83333333	0,833333333	55,55555556	5,555555556
30	37,5		1,785714286	21,42857143	0,595238095	60		4,444444444
35	38,88888889	1,388888889	21,875		0,446428571	63,63636364	3,636363636
40	40		1,111111111	22,22222222	0,347222222	66,66666667	3,03030303
45	40,90909091	0,909090909	22,5		0,277777778	69,23076923	2,564102564
50	41,66666667	0,757575758	22,72727273	0,227272727	71,42857143	2,197802198
55	42,30769231	0,641025641	22,91666667	0,189393939	73,33333333	1,904761905
60	42,85714286	0,549450549	23,07692308	0,16025641	75		1,666666667

2'nd column shows mitigation value at a = 2, 4'th at a = 4 and 6'th at a = 1. If you calculate average value of all difference columns and turn float value to int, you get 4. This is Avoidance PPL. There are also Soft cap and hard cap of mitigation. Soft cap means what further collecting of this stat is useful, but player can spend training points into something more valuable. Hard cap means what further improvement is not recommended (by me of course).

for a = 1. SC = 30. HC = 60
for a = 2. SC = 20. HC = 40.
for a = 4. SC = 10. HC = 20.

Avoidance should give static value, because it is not depend from character class. And it should be capped too. According to wesnoth phylosophy, defence should not be higner than 60. 60 / 4 = 15 levels of stat.

This page was last edited on 4 March 2018, at 20:57.