[UMC] RPG-like PvP in Wesnoth.

Brainstorm ideas of possible additions to the game. Read this before posting!

Moderator: Forum Moderators

Forum rules
Before posting a new idea, you must read the following:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

Re: [UMC] RPG-like PvP in Wesnoth.

Post by Xudo »

After some thinking about implementation of artifacts, traps, spells and buttons I came up to conclusion, that they are depend from each other.
For example: trap is a button, which use spell, when someone steps on it.
Artifacts, which allow players to use something, should contain spell description. It will be added to players "cast a spell" menu.
Passive bonuses, which are described as a part of artifact are same as beneficial effect of some spells.

I have very bright example of possibilities of planned system.
Trap "Sticky Slime". If player steps on trap, he will got effect "sticked". While player is "sticked", he can not use its spells, but he gets spell "Throw a slime". Target of this spell get "sticked" and player loses "sticked" effect.

Implementation of this all as ActionWML "use spell (with description of whole spell with all consequences)" will be very limiting. Thats why I will separate Description and Use of spell. It all will be implemented as good old array of complex variables. You can see example in Brotherhood of Light on 1.11.16. I don't know how it look like in previous versions.

If artifact have several spell_procs (first with 80% chahce, other with 20% chance), and sum of their chances are 100%, then exactly only one out of all procs will happen. If their sum is less than 100% (for example 70%+10%), then nothing can proc (20%).
original language:
Some code concepts
Button sample description

Code: Select all

[button]
  x
  y
  image_pressed
  image_default
  [on_step]
    [proc_spell]
      chance
      spell_id - it is unique spell identifier
      spell_index - it will generate on prestart
    [/proc_spell]
  [/on_step]
  [on_leave]
    [proc_spell]
      chance
      spell_id - it is unique spell identifier
      spell_index - it will generate on prestart
    [/proc_spell]
  [/on_leave]
[/button]
Passive effect (for artifacts and spells) description:

Code: Select all

[passive_effect]
  group - key which is used to limit number of similar effects from different spells
  trap_resistance
  disallow_cast - comma separated list of spell ids
  [allow_cast]
    description
    image
    cost
    [proc_spell]
      chance
      spell_id - it is unique spell identifier
      spell_index - it will generate on prestart
    [/proc_spell]
  [/allow_cast]
  xp_miserliness
  ZoC
  [equip_weapon]
    name
    strikes
    type - type of damage. usually blade, pierce, impact
    class - used to handle animation
    damage_formula
  [/equip_weapon]
  [equip_armor]
    class - used to handle animation
    [resistance] - same as in http://wiki.wesnoth.org/UnitsWML#.5Bmovetype.5D
    [/resistance]
  [/equip_armor]
  [increase_attribute]
    key
  [/increase_attribute]
[/passive_effect]
Artifact sample description:

Code: Select all

[artifact]
  artifact_id
  description
  image
  group - key used to limit number of active artifacts
  required_target_unit - valid for on_use action. used for building list of castable spells
  required_target_empty_tile - valid for on_use action. used for building list of castable spells
  [passive_effect]
    passive_effect_id
    passive_effect_index
  [/passive_effect]
  [on_activate]
    [proc_spell]
      chance
      spell_id
      spell_index
    [/proc_spell]
  [/on_activate]
  [on_deactivate]
    [proc_spell]
      chance
      spell_id
      spell_index
    [/proc_spell]
  [/on_deactivate]
  [on_use]
    [proc_spell]
      chance
      spell_id
      spell_index
    [/proc_spell]
  [/on_use]
[/artifact]
Spell description:

Code: Select all

[spell_description]
  spell_id
  Standard unit filter - [filter] - target
  Standard unit filter - [filter_second] - caster
  [apply_active_effect]
    knockback - length in tiles
    knockback_damage_formula - damage per tile, dealt if tiles are not empty
    summon_unit_id
    alter_terrain
    [teleport_to]
      x
      y
    [/teleport_to]
    [transfer] - drains from target and gives to caster
      key - hp, mp, xp
      factor
    [/transfer]
    [modify]
      key - hp, mp, xp
    [/modify]
  [/apply_active_effect]
  [apply_passive_effect]
    passive_effect_id
    passive_effect_index
    duration
  [/apply_passive_effect]
  [remove_passive_effect] - removes effect if it is present
    passive_effect_id
    passive_effect_index
  [/remove_passive_effect]
  [wml] - any actions, which can't fit in whole system
  [/wml]
[/spell_description]
Skill, which is usable by player (I need this abstraction to be able to allow non 100% chances for player spells:

Code: Select all

[spell]
  description
  image
  cost
  required_target_unit - used for building list of castable spells
  required_target_empty_tile - used for building list of castable spells
  [proc_spell]
      chance
      spell_id
      spell_index
  [/proc_spell]
[/spell]
Last edited by Xudo on July 25th, 2014, 3:46 pm, edited 2 times in total.
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

#12 Solving storyline problems

Post by Xudo »

#12 Solving storyline problems
After some thinking about storyline of my add-on, I have decided that I should not force them to complete long storylines in specific order.
It will split audience. The more tales in storyline, the less players will play each one. The less players ready to play any tale, the harder to find a group to play it. Once it will be too difficult to find group to play something, players will quit.

Thats why I have chosen very good name for my add-on - "Tales of Irdya"
To explain the ability to play the story many times and in any order, I have to represent tales like flashbacks. It is like players are sitting in tavern and telling the stories to anyone who want to listen. Success in completing specific tale is confirmed by Wesnoth lore.
If the players have failed, then some drunken dwarf will shout: "You are lying. Go away." and the story ends.

For example: in HTTT plot there is a moment when Delfador leaves the party to meet "Great Coucil of the Elves". Playes will participate in this journey. If they will succeed, Delfador meets the elves and returns back. If players will lose, then this story is "not true".

I think large part of players will not upload replays of co-op tales where they lose. In this design it will not be a problem. If players have failed, consider that they have never played it.
It is important to note, that players will not be able to loot storyline items. No persistent keys, no mainline artifacts.

This design also solves the problem about timeline of all tales. Bard shouldn't have to participate in actual actions to describe it dramatically.
original language:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

#13 Equalization

Post by Xudo »

#13 Equalization
equalization.cfg
Implementation
(2.76 KiB) Downloaded 235 times
One of the main goals of the project is to allow players of different levels should be able play together with equal involvement in gameplay.
Ideally, new player should not do any actions before his first Tale. Progress of any player should be endless. Hp and damage players see in wesnoth should be in range of 1 to 100.

First thing I need to take into account is amount of characters hitpoints. Player can distribute items trying to achieve maximum magical damage or maximum physical damage.
If character have 10 vitality and 30 physical potency, then it is newbie who want to make physical damage-dealer.
If character have 20000 vitality, 10000 physical potency and 30000 magical potency, then this is old player with magical damage speciality.
If character have 100 vitality, 20 physical potency, then this is avarage player focused on surviving.
I need to keep vitality/damage ratio in the first place.
It is quite obvious that third player have higher ratio than everyone else.
There are two ways of solving this problem:
* Introduce limits like "noone can get more than 100 hitpoints".
* Introduce exponential dependency like "You get more hitpoints from 0.2 to 0.3 than from 0.9 to 1".

Second factor I will take into account is absolute sum of attributes. Players who spent more time playing should get more powerful character.
I have two choices:
* Calculate (sum of attributes)/(max sum of attributes) ratio and add it to total hitpoints.
* Simply add X hp to more developed character (bonus for veterans) and Y hp to less developed one (boost for newbies).

Base principles of Equalization:
  • Input can differ in range from 0 to billions.
  • Result should differ in range from 0 to 100.
  • I need to keep vitality/damage ratio.
  • Amount of hitpoints should be greater than amount of damage in any case.
  • I have to give bonus to veterans and help to newbies.
After modelling situation in Excel and altering input and formulas, I came to following algorithm.
Input:
(V) Vitality
(P) Physical potency
(M) Magical potency

First step: calculating coefficients.
(CV) Coefficient of survivability: V / (P+M)
(CP) Coefficient of physical potency: P / (V+M)
(CM) Coefficient of magical potency: M / (V+P)

Second step: Calculating base hitpoints
(BH) Base hitpoints CV / (CV + 1) * 100

Third step: Calculating of damage
(PD) Physical damage: CV*CP/2
(MD) Magical damage: CV*CM/2

Fourth step: Calculating bonuses
I choose characters with highest and lowest sum of attributes. Then I add them bonus hitpionts.
(HP) Hitpoints: BH+Bonus

Result:
HP, PD, MD
This variables will be used to calculate damage (or any other output) of spells and artifacts.
original language:
Last edited by Xudo on October 5th, 2014, 1:34 pm, edited 5 times in total.
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

#14 Custom weapon ranges

Post by Xudo »

#14 Custom weapon ranges
Mainline Wesnoth have very good background, describing why units standing on adjacent tiles can fight in ranged combat. There is a concept "one unit is an army".
In the same time, RPG assumes that 1 unit is only 1 fighter. Thats why ranged combat from adjacent tiles will be unnatural.
But creating several distances of combat introduces good gameplay problem: hit enemy with less counterattack damage.
The more gameplay problems the better.
Thats why I have decided to introduce following attack distances:
  • Contact
  • Armslength
This will affect weapons in following way:
  • Spear allows to deal pierce attacks on armslength distance and impact attacks on contact distance.
  • Two-handed sword and axe will allow only (strong) blade attacks on armslength distance.
  • Knives allows to throw one or two on armslength distance and pierce attacks on contact distance.
  • One-handed sword allows to deal (weak) blade attacks on armslength distance.
  • Shield allows to deal impact attacks on contact distance.
  • Small crossbows and pistols will be allowed to deal 1 attack on armslength distance.
  • Magical auras and "shock" spells allows to deal magical damage on armslength distance.
  • Magical touch allows to deal magical damage in contact distance.
  • Morningstar which will disallow enemy to use long weapons for one turn if used in contact distance, dealing impact damage on armslength distance.
  • Throwing sand and salt, which will decrease enemy's chance to hit.
original language:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

#15 Balansing of enemies

Post by Xudo »

#15 Balansing of enemies
prepare_enemy_data.cfg
Implementation
(9.56 KiB) Downloaded 244 times
In #1 I described approximate unit classification. I will always stick to it.
Here it is:
Enemy level means "complexity" of enemies. There are three categories for enemies:
- minions. (lvl 0) They are always weak and easy for players. As long as they are lvl 0, players will be unable to use even regular skills to each one. In the same time, minions might create a swarm. One minion minion death in the swarm allows players to use enviromental skill to deal massive damage.
- regular. (lvl 1) They are usually tougher than minions and require use of regular skill to defeat (in other case, they deal a little more damage, than they expected to do. In perspective this leads to defeat.) NOTE: All players are lvl 1. Always.
- elite. (lvl 2) Even if you will use regular skills, you might fail to kill elite enemies. This is the case, where you need to use powerful single-target ones.
Though, it does not mean that bosses should have lvl 2. They should challenge players with special puzzles.
For example: Boss might be lvl 0, but have a lot of minions (or weak regulars) around. To get xp for the boss, you need to kill enemies around.
Each group will be balansed individually. Those numbers are basement for calculating their parameters.
In specific situations, a lot of random and unpredictable things might happen.
For example:
  • Player can equip artifact, which give character an ability to attack twice per turn.
  • Player can equip artifact, which give character an ability to attack multiple enemies simultaneously.
  • Player attacks minion, which stands on "good" terrain.
  • Player attacks minion in bad time of day.
  • Player is very unlucky.
Minions
Minions are weak, so it is very possible, that players will be able to kill minion with single attack.
But the more players are able to kill minion with single hit, the more damage this minion will deal.
This concept introduces gameplay problem: kill minion with a single hit or hit it hard and leave for others.

Calculation input:
list of HP, PD, MD of all characters (Those attributes are described in #13)

Upper threshold of minions hitpoins is calculated by the formula:
MAX_HP = MAX( MAX(PD), MAX(MD) ) - 1

Lower threshold of minions hitpoins is calculated by the formula:
MIN_HP = MIN( MIN(PD), MIN(MD) ) excluding PD and MD equal to 0

Attack strength of minions depends on its hitpoints.
I create list of PD and MD (excluding 0). 1-2 entries from each character.
I will use SQL-like syntax because there is a lot of formulas operating with lists. It will not be formal, but I hope it will be enough to understand.

Code: Select all

CREATE TABLE damage_values
{
	int damage,
	int relative_strength
};

Code: Select all

INSERT INTO damage_values (damage) VALUES
(SELECT PD FROM characters WHERE PD > 0
UNION
SELECT MD FROM characters WHERE MD > 0);
This list will be processed in following way:

Code: Select all

FOREACH entry in damage_values
	entry.relative_strength = SELECT COUNT(damage)+1 FROM Damage_Values WHERE damage < entry.relative_strength
NEXT
Then, I will roll on actual hp of minions.
LVL0_HP = RAND( MAX_HP, MIN_HP )

Then I choose entry:

Code: Select all

NEAREST_ENTRY = (SELECT MAX(damage), relative_strength
FROM damage_values
WHERE damage < LVL0_HP
GROUP BY relative_strength)
Then average player HP will be divided by chosen value:
LVL0_ATTACK = AVERAGE(HP) / NEAREST_ENTRY.relative_strength


Regular
Any regular enemy can kill average player in two attacks, if player will not use any additional options.
Weakest player should survive one attack of regular enemy.
Regular enemy can not be killed in one attack.
I expect that player with weak spells will have strong default attacks. Opposite is true too.
Distance doesn't mean type of attack. Magical attacks on "contact" distance are possible.

Upper threshold of regular enemies damage is calculated by formula:
LVL1_MAX_ATTACK = MIN(HP) - 1

Lower threshold of regular enemies damage is calculated by formula:
LVL1_MIN_ATTACK = AVERAGE(HP)/2

Actual damage of regular enemy is calculated by formula:
LVL1_ATTACK = (LVL1_MAX_ATTACK < LVL1_MIN_ATTACK) ? LVL1_MAX_ATTACK : RAND( LVL1_MIN_ATTACK, LVL1_MAX_ATTACK )

Upper threshold of minion hp is calculated by formula:

Code: Select all

LVL1_MAX_HP = SELECT SUM(value) FROM
(SELECT TOP(2) value FROM damage_values ORDER BY damage)
Lower threshold of minion hp is calculated by formula:
LVL1_MIN_HP = MAX( PD, MD ) + 1

Elite
He kills weak player with one attack.
He has enough hp to kill all players in default combat.
He has two attack distances. One is strong and other is weak.

Lower threshold of elite enemy hitpoints is calculated by formula:
LVL2_MIN_ATTACK = MIN(HP) + 1

Upper threshold of elite enemy hitpoints is calculated by formula:
LVL2_MAX_ATTACK = AVERAGE(HP)

Damage from strong attack is calculated by formula:
LVL2_STRONG_ATTACK = RAND( LVL2_MIN_ATTACK, LVL2_MAX_ATTACK )

Damage from weak attack is calculated by formula:
LVL2_WEAK_ATTACK = RAND( LVL2_MIN_ATTACK, LVL2_MAX_ATTACK ) / 4

Lower threshold of hitpoints is calculated by algorithm:
FOREACH player
LVL2_MIN_HP += ( player.HP / LVL2_WEAK_ATTACK ) * MAX( player.PD, player.MD )
NEXT

Upper threshold of hitpoints is calculated by formula:
LVL2_MAX_HP = LVL2_MIN_HP * 2
original language:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

#16 Stamps

Post by Xudo »

#16 Stamps
First part of unit creation is complete.
I know hitpoints, total damage output, level, movement speed of recruited units. I know that there will be no levelups or amla at all.
Now I need to give some personality to enemies: define attacks, appearance and background.

New words:
meta-unit - this is entity that combines the terms "minion", "regular", "elite".
stamp - this is entity, used as backbone for units creation.

I need to assume following things:
  • I can't allow to recruit default units. There is a lot of important information, which I need to define in unit_type of meta-unit.
  • I can't dynamically create meta-units, based on default units. It is easier to define them rather than process several hungreds of units.
  • I should follow default unit_type syntax
  • All important keys and tags should be unique in entire game. This is needed to improve search for those terms on the forums.
  • Syntax of stamp should be usable for any kind of meta-unit
  • Stamps can be defined in era, in scenarios or even in persistent variables. They all should be stored in wml-array in prestart or preload or other pre~ event, which I find suitable for them.
Below I wrote down all keys of unit_type with short note about possible use in my add-on.
  • advance_from - makes no sense
  • advances_to - makes no sense
  • alignment - very possible it will be always "neutral". Day-night cycle will be altered
  • attacks = 1. Any other value will be set as a result of applying some spell.
  • cost - It is defined in meta-unit. I want to be sure, that there will be no accident "elites". Thats why minion will cost 1g, regular = 10g, elite = 100g.
  • recall_cost - makes no sense
  • description - must-have for "background" of unit
  • do_not_list - makes no sense
  • ellipse - it's defined in meta-unit.
  • experience - it's defined in meta-unit. I'll use "666".
  • flag_rgb - it's defined in meta-unit. {MAGENTA_IS_THE_TEAM_COLOR}
  • gender - must-have for "background" of unit
  • hide_help - makes no sense
  • hitpoints - it's calculated
  • id - must-have. I need primary key for stamps
  • ignore_race_traits - makes no sense
  • image - must-have. It depends on weapon
  • image_icon - must-have. It depends on weapon
  • level - it's defined in meta-unit
  • movement - it's defined in meta-unit
  • movement-type - it's defined in meta-unit
  • name - must-have for "background" of unit
  • num_traits = 0. I have no idea how to use it now
  • profile - must-have for "background" of unit
  • small_profile - must-have for "background" of unit
  • race - must-have for "background" of unit
  • undead_variation - I have no idea how to use it now
  • usage - it's defined in meta-unit, makes no sense
  • vision - it's defined in meta-unit
  • zoc - it's defined in meta-unit
  • die-sound - must-have
  • healed-sound - must-have
  • [advancement] - makes no sense
  • [attack] - must-have. details are below
  • [base_unit] - makes no sense
  • [portrait] - makes no sense
  • [abilities] - must-have. Details will come eventually
  • [event] - I don't need it
  • [variation] - I don't need it
  • [male][female] - I don't need it
As long as elites have two different kinds of attack, then each unitstamp should contain at least two attackstamp definitions.
All unitstamps having one or zero attacks will be ignored
Each attack assumes use of any weapon.
It is possible to paint each variation of unit with every weapon, but it will take too much time. That why I'll use Dugi's idea about runtime units frankensteining which is used in World of Wesnoth.
Image of unit with two-handed weapon should differ from image of unit with one-handed weapon.
Attack animation of (two-handed) spear should differ from attack animation of (two-handed) sword or axe. Smae for one-handed weapons.
Female and male stamps should be defined independently.

Assuming this all, I came to following data-structure:
[unitstamp] - I have chosen this name to ease searching on the forums
  • id
  • name
  • description
  • base_template - string used to build path to images
  • gender - it is used only for background
  • race - it is used only for background
  • die-sound
  • healed-sound
  • [attackstamp]
    • description
    • name
    • use_blank_frames - true or false. If it is true, then all weapon frames will be replaced with misc/blank_hex.png This key is supposed to be in use for creatures without any weapon at all.
    • weapon_template - string used to build path to images of weapon
    • weapongrip - string used to build path to images of weapon. One of: twohanded, onehanded, bow, gun, throwing, spell
    • weaponmotion - optional string used to build path to images of weapon. One of: swing, thrust
    • frames - Quantity of frames in attack animation
    • idle-frames - integer value. it means quantity of frames in idle animation
    • number - Quantity of strikes in attack
    • range - distance of attack. One of: armslength, contact
    • type - type of attack. One of default values
    • [attackfeatures] - This tag will be used to describe weapon specials of this attack. Details will come eventually.
  • [unitfeatures] - This tag will be used to describe abilities of this unit. Details will come eventually.
Folder for images of unit should have following structure:
images
  • units
    • <base_template>
      • profile -- portrait image
      • twohanded
        • swing
        • thrust
      • onehanded
        • swing
        • thrust
      • bow
      • gun
      • throwing
      • spell
Each third-level folder should contain images named in following way:
  • folders named as motions of weapon. If motion is not named, then images for all frames should be saved in third-level folder. (it means: there is no need to create "null"-motion folders) For example: bow can only shoot. All images "frame0
  • standing.png - default image of unit
  • frameX.png - multiple frames of attack animation. X is integer from 0 to attackstamp.frames
  • idle-frameX.png - multiple frames of idle animation. X is integer from 0 to attackstamp.idle-frames
Folder for weapon images should have following structure:
  • weapons
    • <weapon_template>
      • icon.png - icon of attack
      • standing.png - image of weapon for standing image
      • frameX.png - multiple frames of weapon for attack animation. X is integer from 00 to attackstamp.frames
      • idleX.png - multiple frames of weapon for idle animation. X is integer from 00 to attackstamp.idle-frames
Quantity of frames should be equal to 5. They should be numbered in following way 00, 01, 02, 03, 04, 05.

Possible motions:
  • Swing - I think its meaning is obvoius. It is used mostly for weapons, though Spectre's baneblade is count too.
  • Thrust - I think its meaning is obvious. It is used mostly for two handed polearm weapons and one-hand knives.
  • Touch - Attacker touches the enemy, dealing damage. It is used mostly as magic. For example Ghost's and Lich's attacks. I can think of shield bash using this motion too.
  • Sphere - magical energy surrounds the caster, dealing damage. There is no direct examples in default wesnoth, but you can look at Lich's or Elvish Sorceress's defence animation.
  • Scream - Thu'um. Nuff said. Seriously, all ghost line have screams as attack.
original language:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

#17 Enviroment #18 Movement #19 Scenery

Post by Xudo »

#17 Enviroment
When I create a unit, I need to define not only its HP, attacks and look. Movement is important too.
I will try to be less vague, than I had before. Thats why I will describe all used terrain types.
Take into account, that single unit is single character. Mainline concept UAPEB does not fit for this setting.
It means that there will be no "mountains", "hills", "forests", "villages", "castles" and so on.
After some thinking I defined following list of terrain types:
  • smooth surface: grass, open floor, roofed floor, dirt, road, wooden bridge, stone bridge - those tiles will not impact movement too much.
  • rough area: sand, snow, ice, bush - those tiles will used to create areas, which will require special player behavior.
  • sloping surface: stairs, hill ascent covered by grass, hill ascent covered by ice - those tiles will be used to create illusion of difference in height.
  • walls - movement and sight are forbidden
  • windows - movement is forbidden, sight is possible
  • shallow water: shallow water, shallow water with debris - this is tile covered by water. It is deep enough to hide average human body leaving his head above surface.
  • deep water: deep water, deep water with debris - This water is so deep, so everyone have to swim to stay on its surface.
More than that. Each tile have its own features.
Snow becomes dirt for 3 turn if anyone have used fire AoE.
Bush becomes grass and leaves burning garbage for 3 turns if anyone have used fire AoE.
Wooden bridge becomes shallow water if anyone have used fire AoE.
Wooden stairs becomes unpassable wall and leaves burning garbage if anyone have used fire AoE
Bush, any water with debris allows players to become invisible.
Roofed floor provides immunity to spells, which drop anything from the sky.
Roofed floor is always dark by default.
Water provides immunity to fire spells.
Water becomes ice for 3 turns if anyone have used cold AoE
Grass becomes ice for 3 turns if anyone have used cold AoE
Hill ascent covered by ice forces a unit to fall down if unit have finished his movement on this tile.
original language:
#18 Movement
I thought about implementation of "stances", but I had no interesting ideas about them.
After some thinking I came to concept of "movement modes". They impact movement cost on different tiles and provide special features for character.

There will be 5 movement modes:
  • Walk - (default)
  • Swim
  • Run
  • Sneak
  • Flight
Below are the lists of movement costs for different terrains for each type of movement.
For any movement mode:
  • Wall - 50
  • Window - 50
Walk mode:
  • Flat (and cave) - 1
  • Frozen (snow and ice) - 2
  • Bush (forest) - 3
  • Shallow water - 4
  • Deep water - 50
  • Sand - 2
  • Ascent (hills) - 2
Swim mode. Player can't use spells and "armslength" weapons.
  • Flat (and cave) - 4
  • Frozen (snow and ice) - 4
  • Bush (forest) - 50
  • Shallow water - 2
  • Deep water - 2
  • Sand - 4
  • Ascent (hills) - 50
Run mode. You can't cast spells and use "contact" weapons. Quantity of attacks of "armslength" weapons is limited to 1. Their damage is recalculated.
Quantity of movement points is increased.
  • Flat (and cave) - 1
  • Frozen (snow and ice) -3
  • Bush (forest) - 50
  • Shallow water - 2
  • Deep water - 50
  • Sand - 3
  • Ascent (hills) - 2
Sneak mode. You can't cast spells and use "armslength" weapons. Quantity of attacks of "contact" weapons is limited to 1. Their damage is recalculated.
It enables invisibility in the dark, in the bush and in water with debris.
  • Flat (and cave) - 3
  • Frozen (snow and ice) - 3
  • Bush (forest) - 3
  • Shallow water - 50
  • Deep water - 50
  • Sand - 3
  • Ascent (hills) - 3
original language:
#19 Scenery
Among of all, I decided that there should be something besides walls, grass and water. In other words - interactive scenery.
It is divided to two categories:
* Destroyable - They are units without ZoC, enemy to everyone and they have 0 MP.
* everything else :) - this group require additional WML logic, but provide interesting features

Large trees.
Destroyable. They drop shadow at dawn and dusk. If you kill them, then you deal damage to anyone in other side of tree and leave wooden garbage there.

Wooden scenery.
Destroyable. Have a little hp. if you kill it, then they leave wooden garbage.

Stable lamp
Destroyable. They illuminate adjacent tiles. They have a lot of hitpoints and fully restore it after each attack. They sway, but stay on the place. If they are not killed, then they deal damage equal to damage taken. If they killed, they deal damage to anyone in other side and leaves burning garbage there.

Unstable lamp
Destroyable. They illuminate adjacent tiles. They have a little hitpoints. If they are killed, they leave burning garbage on the opposite side.

Stable statue
Destroyable. They have a lot of hitpoints and fully restores it after each attack. If they are not killed, then they deal damage equal to damage taken. If they killed, they deal damage to anyone in other side and leaves fallen statue.

Fragile statue
Destroyable. They have a little hitpoints. If it is destroyed, it deals a little damage to anyone on the other side and leaves shards.

Fallen statue
Destroyable. They have a little hitpoints and fully restores it after each attack. If they killed, they deal damage to anyone in other side and leaves new fallen statue.

Gates
Destroyable. They have a lot of hitpoints, much more than any other scenery have and fully restore it after each attack. To destroy it, players need to use spells.
It can be linked to buttons. If all buttons will be pressed, then the gates will open.

Wooden garbage
It becomes burning garbage, if someone used fire AoE.

Burning garbage
They are active for 3 turns since they appear. If unit will stand on the tile with burning garbage, then it will take fire damage each turn. If unit will walk, he gets damage for each step on tile with burning garbage.

Shards
If unit will walk, he gets damage for each step on tile with shards.

Wind affinity
It has direction. All characters on ice with wind affinity will be moved at the turn end. If someone attacks unit, who stands on the tile with wind affinity, with missile weapon, have additional chance to miss.

Tracks
Any unit will leave them, if he walk over snow or sand tile. Trackes left on the tile with wind affinity will disappear at the turn end.

Button
Something can happen, if unit will stand on it.
original language:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

Re: [UMC] RPG-like PvP in Wesnoth.

Post by Xudo »

#20 Bombs
At this point I am going to base gameplay on following principles:
  • Character is able to use default combat
  • Player can control one main character and several minions
  • Most characters can place traps and bombs
Artifacts are considered as random factor in battles.

Default attacks is an important part of wesnoth. Thus they are an important part of the RPG.
But I have no idea how to design challenging combat system only with default combat and single character. All battles will end up as straightforward exchange of hits.
Wesnoth was designed as strategy, that is why I use concept "Player can control one main character and several minions". Reuse of existing mechanics is good.
Quantity of minions can differ from 0 to 6. They can have 0 or 1 level. They can have ZoC or not. Cost of summoning can be classified as skill with any cost (1,2,4).
Summoned minions will stay from the moment of summoning to the moment of natural death. There will be no temporary minions.
But addition of minions only will not make the game challenging. Main characters still can stand and beat each other.
Thats why I have decided to introduce bombs.
Bomb is a spell, which will apply its effect in the beginning of next turn of the caster.
Usually, placing of bombs is a cheap action which require 1 xp.
Bomb can not be planted after default attack.
Meteor spell is a good example of bomb. Mage casts meteor on some hex.
The meteor will appear in the sky and should spend some time to fly down.

This game mechanic has an interesting consequence:
Imagine situation: character A was attacked by character B. It means character A can plant bomb on the tile, where character B is standing. If character B will not change his position, then he will get (a lot of) damage from the bomb.
Thats why the best option for character B is movement.
Though, character B will be able to plant bomb too. Thats why player A have to change his position too.

In general: players will have to change their position after attack.

Though, players have an option to engage another fight and then use a spell which cost 2 xp.
To encourage use of bombs, effect of 2xp spells should not be "direct damage". There are a lot of options: summoning of a minion, healing, terraforming and so on.

I don't want to limit players with one minion. They will be able to choose between several different options.
To prevent spam of minions, I will introduce additional resource: willpower.
Willpower is fixed value which depends on the character class.
Each minion requires some willpower to handle.
Player can not summon more minions than his willpower allows.

This assumptions allow me to introduce wide variety of different clases.
Here are some examples:

Necromancer
  • Willpower 5 (mage)
Spells:
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Raise undead (1 xp) - undead is lvl 0, no ZoC, consumes 1 willpower
  • Shadow(Cold) explosion (2 xp) - special bombs. Deals arcane or cold damage.
  • Corpse explosion (4 xp) - destroys the minion and deals damage, based on its hitpoints.
Gameplay goal is: summon 5 minor undeads, surround enemy, cast explosion
Undead can be any minor undead: walking corpses, skeletons, ghosts, ghouls.

Red mage
  • Willpower 5 (mage)
Spells:
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Fireball (2 xp) - direct damage on distance. Can not be used on adjacent enemies.
  • Fire nova (4 xp) - deals fire damage to all units around the mage.
  • Summon elemental (4 xp) - elemental is lvl 1, have ZoC, consumes 5 willpower.
Gameplay goal is: survive enough to summon elemental and kill everything with its help.

Assasin
  • Willpower 3 (rogue)
  • Weapon special: backstab
Spells:
  • Bear trap (1 xp) - default bomb of a rogue. Deals physical damage.
  • Mirror image (1 xp) - creates mirror image of the rogue. It is lvl0, no ZoC and can not attack.
  • Concealment - stance which set lvl 0
Gameplay goal is: use mirror image to enable backstab, conceal character and deal damage with no xp to enemy

Paladin
  • Willpower 4 (warrior)
  • Ability leadership
Spells:
  • Planned skirmish (1 xp) - default bomb of a warrior. Deals physical damage.
  • Call reinforcements (2 xp) - reiforcement is lvl 1, have ZoC, consumes 2 willpower.
  • Healing (1 xp) - healing of all adjacent allies
  • Sightness - stance which set lvl 2
Gameplay goal is: move reinforcements to target, cast sightness, attack with reinforcements buffed with improved leadership aura
Reinforcement can be any kind of human fighter: bowman, spearman, thugs.

Silver mage
  • Willpower 5 (mage)
Spells:
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Ghost step (1 xp) - moves caster on the opposite side of adjacent victim and transfers some of his health to caster.
  • Antimagic shield (1 xp) - increases magical resistance until the beginning of next turn.
  • Thundering explosion (4 xp) - deals damage to everyone around caster and moves caster to the selected adjacent hex.
Gameplay goal: tank everything.
original language:
User avatar
Xudo
Posts: 563
Joined: April 3rd, 2009, 5:26 pm

Re: [UMC] RPG-like PvP in Wesnoth.

Post by Xudo »

For some reason, I still think about this idea. Sorry for necroposting, but I think it is better than starting new thread.
Ideas are itching in the head. I should write them to get out of head.
It is not realistic that I'll made anything. Because making add-on also means endless support. This is time investment I can not afford.

#21 Crowd control
In some other games with cool PvP, term "Crowd control" means spells and skills which don't deal damage themselves, but make enemies unable to move and use spells.
In wesnoth, most interactions are made in adjacent contact. A lot of wisdon is in attacking enemy who is weak to your attack. Fireballs in skeletons, Berserkers against Dark Adept etc.
It also means - blocking way to your weak units by strong units. You kill skeleton by your mage and you put Heavy Infantryman on the place of killed skeleton.

There should be more mechanics based around movement from/to unit.
What players can do to control movement of enemy:
  • Punish unit for leaving ZoC of unit. In some tabletop games movement outside of melee range provoke attack.
  • Force enemy to stay in position for next turn by nullifying its movement.
  • ZoC itself is some sort of crowd control
  • Exchange positions of units
  • Fill hex with obstacles
  • Killed unit can disappear on start of next turn instead of on taking more damage than it has health. Imagine walking corpse which needs some time to realize that it is actually dead
  • Assuming that there are special abilities (via right-click menu). Player can block some right-click actions of enemy player
Of course there should be means to prevent crowd control:
  • Unit can move after attack
  • Unit can rely on special abilities which don't require close contact
  • Unit can forcefully move other units
  • Skirmisher unit special
If I add this mechanic to previous list of classes, I get something like this:

Necromancer
  • Willpower 5 (mage)
  • Ability: when any adjacent walking corpse get experience, drain that experinece to necromancer
Spells:
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Raise undead (1 xp) - walking corpses. lvl 0. No ZoC. Consumes 1 willpower If they left with 0 hp, they die only on start of next turn.
  • Shadow(Cold) explosion (2 xp) - special bombs. Deals arcane or cold damage.
  • Corpse explosion (4 xp) - destroys the minion and deals damage, based on its hitpoints.
Gameplay goal is: summon 5 walking corpse, surround enemy, cast explosion

Red mage
  • Willpower 5 (mage)
Spells:
  • Meditation (0 xp) - increases xp of red mage by 3
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Fireball (2 xp) - direct damage on distance. Can not be used on adjacent enemies.
  • Fire nova (3 xp) - deals fire damage to all units around the mage.
  • Fire wall (1 xp) - places fire on hex, which is unit with infinite amount of hp. It disappears after 1 turn (last for 2 enemy turns).
Gameplay goal is: protect yourself with fire walls and kill enemies from distance

Elemental mage
  • Willpower 5 (mage)
Spells:
  • Meditation (0 xp) - increases xp of red mage by 3
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Fireball (2 xp) - direct damage on distance. Can not be used on adjacent enemies.
  • Fire nova (3 xp) - deals fire damage to all units around the mage.
  • Summon elemental (6 xp) - elemental is lvl 1, have ZoC, consumes 5 willpower.
Gameplay goal is: survive enough to summon elemental and kill everything with its help.

Assasin
  • Willpower 3 (rogue)
  • Ability: skirmisher
Spells:
  • Bear trap (1 xp) - default bomb of a rogue. Deals physical damage.
  • Mirror image (1 xp) - creates mirror image of the rogue. It is lvl0, no ZoC and can not attack.
  • Concealment - stance which set lvl 0 (to prevent emeny to gain xp from combat)
  • Sneak - enable backstab weapon special
Gameplay goal is: use mirror image to enable backstab, deal damage with no xp to enemy
Conceal character to prevent enemy to get xp from you

Duelist
  • Willpower 3(rogue)
  • Ability: Skirmisher, Execute a coward (if enemy moves out of melee range, hit him with default crossbow attack)
Spells:
  • Appoint a duel (1 xp) - unables enemy to move until the start of next duelist turn
  • Dance of blades (1 xp) - increases defense by 20% up to 70%
  • Concealment - stance which set lvl to 0 (to prevent emeny to gain xp from combat)
  • Dodge - increases defense by 20% up to 70%, but decreases all resistances by 20%
Paladin
  • Willpower 4 (warrior)
  • Ability leadership
Spells:
  • Planned skirmish (1 xp) - default bomb of a warrior. Deals physical damage.
  • Call reinforcements (2 xp) - reiforcement is lvl 1, have ZoC, consumes 2 willpower.
  • Healing (1 xp) - healing of all adjacent allies
  • Sightness - stance which set lvl 2 (improves leadership, but gives more xp for enemy on direct attack
  • Modesty - stance which set lvl 1 and increases damage by 2
Gameplay goal is: move reinforcements to target, cast sightness, attack with reinforcements buffed with improved leadership aura
Reinforcement can be any kind of human fighter: bowman, spearman, thugs.

Silver mage
  • Willpower 5 (mage)
Spells:
  • Meteor (1 xp) - default bomb of a mage. Deals fire damage.
  • Ghost step (1 xp) - moves caster on the opposite side of adjacent victim and transfers some of his health to caster.
  • Antimagic shield (1 xp) - increases magical resistance until the beginning of next turn.
  • Thundering explosion (4 xp) - deals damage to everyone around caster and moves caster to the selected adjacent hex.
Gameplay goal: tank everything.
Post Reply