Difference between revisions of "Skill creation"

From Divinity Engine Wiki
Jump to: navigation, search
m (Documented some rain-skill-specific properties)
 
(12 intermediate revisions by 2 users not shown)
Line 26: Line 26:
 
Every skill requires the following parameters to be filled out.
 
Every skill requires the following parameters to be filled out.
  
* '''Entry''', a unique name so that the skill can be referenced in scripts or other locations. Usually a structure of "Skilltype_Skillname."
+
* '''Entry''', a unique name so that the skill can be referenced in scripts or other locations. When referencing the skill (e.g., in a skillbook), the skill is referred to by ''Skilltype_Skillname''
 
* '''Ability''', Which ability tree this skill belongs to, which determines how it is sorted in the skill menu and which primary attribute scales its damage. Can be None.
 
* '''Ability''', Which ability tree this skill belongs to, which determines how it is sorted in the skill menu and which primary attribute scales its damage. Can be None.
 
* '''Level''', (?)What level this skill scales to. All existing skills are set to -1 level, which means the skill's damage scales with character level.
 
* '''Level''', (?)What level this skill scales to. All existing skills are set to -1 level, which means the skill's damage scales with character level.
Line 40: Line 40:
 
* '''Damage Range''', the percentage of variation in damage.  
 
* '''Damage Range''', the percentage of variation in damage.  
 
* '''DamageType''', the type of damage.
 
* '''DamageType''', the type of damage.
 +
* '''DeathType''', the death animation and effect the skill generates.
 
* '''Damage''', an optional source of the damage amount which can take the caster or target's current or maximum armor or vitality
 
* '''Damage''', an optional source of the damage amount which can take the caster or target's current or maximum armor or vitality
 
* '''UseWeaponDamage''', if yes, multiplies your weapon damage by the Damage Multiplier
 
* '''UseWeaponDamage''', if yes, multiplies your weapon damage by the Damage Multiplier
Line 78: Line 79:
 
* '''CanTargetTerrain''', If yes, you can target the terrain. Useful for skills that can manipulate surfaces, like Shocking Touch. Also good for area of effect attacks like Ground Slam, where you might want to target a space inbetween two characters to hit them both. Otherwise, make this no to prevent accidental casts.
 
* '''CanTargetTerrain''', If yes, you can target the terrain. Useful for skills that can manipulate surfaces, like Shocking Touch. Also good for area of effect attacks like Ground Slam, where you might want to target a space inbetween two characters to hit them both. Otherwise, make this no to prevent accidental casts.
  
Conditions can include Character, Self, Nonself, Ally, Party, Player, Enemy, Item, Dead, Summon, NonSummon, MySummon, Owner, Party, Combat, Locked, AllowDead, FacingMe, CanPickup, HasStatus, InSurface, Surface.
+
Conditions: Character, Self, Nonself, Ally, Party, Player, Enemy, Item, Dead, Summon, NonSummon, MySummon, Owner, Party, Combat, Locked, AllowDead, FacingMe, CanPickup, HasStatus, InSurface, Surface.
  
 
''Note'': Combat should generally be a requirement, not a condition.
 
''Note'': Combat should generally be a requirement, not a condition.
Line 92: Line 93:
 
* !Dead&((!Enemy&!DamagedOnHeal)|(Enemy&DamagedOnHeal)) // (Chain Heal) target living allies that aren't damaged by healing (undead or decaying touch), but also target enemies if they are damaged by healing
 
* !Dead&((!Enemy&!DamagedOnHeal)|(Enemy&DamagedOnHeal)) // (Chain Heal) target living allies that aren't damaged by healing (undead or decaying touch), but also target enemies if they are damaged by healing
  
 +
== Skill Properties ==
  
== Skill Properties ==
+
The ''SkillProperties'' parameter gives skills status effects and a few other specific effects. Like conditions, skill properties can take simple logic, usually in the following form
 +
 
 +
'''TargetType:IF(Conditions):Action'''
  
The "SkillProperties" parameter gives skills status effects and a few other specific effects. Like conditions, skill properties can take simple logic.
+
Property Actions
  
* '''Statuses''', in the form of "''STATUS,Chance,Duration.''"
+
* '''Statuses''', in the form of ''STATUS,Chance,Duration.''
 
* '''AOE dependent statuses''', with ''AOEBOOST:STATUS,Chance,Duration''
 
* '''AOE dependent statuses''', with ''AOEBOOST:STATUS,Chance,Duration''
* '''Surface creation''', in the form of "''CreateSurface,Radius,?,SurfaceType,Chance,Duration?''"  
+
* '''Surface creation''', in the form of ''CreateSurface,Radius,?,SurfaceType,Chance,Duration?''"
 
* '''Target surface creation''', surfaces appear only on targets with ''TargetCreateSurface.''
 
* '''Target surface creation''', surfaces appear only on targets with ''TargetCreateSurface.''
 
* '''Cone surface creation''', surfaces appears in a cone area ''TargetCreateConeSurface''.
 
* '''Cone surface creation''', surfaces appears in a cone area ''TargetCreateConeSurface''.
* '''Surface manipulation''', such as ''ignite'' or ''curse''.
+
* '''Surface manipulation''', change a surface or cloud.
 +
Ignite, Melt, Freeze, Electrify, Bless, Curse, Condense, Vaporize, Bloodify, Contaminate, Oilify, Shatter
 
* '''Resurrect''', Revive a character with ''Resurrect,Chance?,VitalityOnRevived''.
 
* '''Resurrect''', Revive a character with ''Resurrect,Chance?,VitalityOnRevived''.
 
* '''Backstab conditions''', including ''AlwaysBackstab'' and ''CanBackstab''.
 
* '''Backstab conditions''', including ''AlwaysBackstab'' and ''CanBackstab''.
Line 140: Line 145:
 
|-
 
|-
 
| TARGET:IF(Tagged:INCARNATE_S&(InSurface:SurfaceFire|InSurface:SurfaceLava)):INF_FIRE,100,-1 || If target is incarnate and in fire or lava, permanently grant fire infusion.
 
| TARGET:IF(Tagged:INCARNATE_S&(InSurface:SurfaceFire|InSurface:SurfaceLava)):INF_FIRE,100,-1 || If target is incarnate and in fire or lava, permanently grant fire infusion.
|-
 
| TARGET:IF(HasStatus:BLEEDING|InSurface:SurfaceBlood):DECAYING_TOUCH,100,2 || If target is bleeding or standing in blood, then apply decaying touch.
 
 
|}
 
|}
 +
 +
== Rain-specific properties ==
 +
 +
=== ConsequencesStartTime ===
 +
 +
This is the duration of the puddles creation and setting statuses on characters.
 +
 +
=== ConsequencesDuration ===
 +
 +
After the '''ConsequencesStartTime''' finishes, the visual/audio effects are prolonged for this time.
  
 
== Templates ==
 
== Templates ==
Line 151: Line 164:
  
 
Summon templates are the character or item summoned (either as a direct summon skill, or as an skill property Summon entry entry.)
 
Summon templates are the character or item summoned (either as a direct summon skill, or as an skill property Summon entry entry.)
 +
 +
 +
== Name and Description ==
 +
 +
Skill display name, description, and stats description use Translated String Keys to display text. However, the stats editor can automatically generate the translated strings with the "Export Translated String Keys" option in the menu.
 +
 +
* ''DisplayName'', the primary display name of the skill seen by players.
 +
* ''Description'', the main description of the skill. Often references StatsDescriptionParams with variables like [1], [2], etc, (see examples).
 +
* ''StatsDescription'', a small secondary description below the main description and effects. Typically something unchanging, like the range, or detailed comments about how statuses or the skill functions.
 +
* ''StatsDescriptionParams'', the stats referenced by variables. The first entry will apply to [1], the second entry to [2], etc.
 +
 +
'''Example'''
 +
 +
* ''DisplayName'': Magical Poison Dart
 +
* ''Description'': Cast a magical poisonous dart that does [1] damage.
 +
* ''StatsDescription'': Range: [2]<nowiki><br></nowiki>Poisoned deals poison damage over time.<nowiki><br></nowiki>Can target terrain to create ooze surface.
 +
* ''StatsDescriptionParams'': Damage;TargetRadius
 +
 +
== Icon, Animations and Effects ==
 +
 +
It is easiest to use existing icons, animations and effects for your skills. There are many existing icons you can use, either unused from D:OS1, or used in very different contexts than skills. You may want to mix and match existing animations and spell effects from existing skills to create a more original feeling skill. The powerful effect editor will let you create new effects relatively easily, however. Creating new animations will require outside software and a great deal of work.
 +
 +
* ''Icon'', the icon for the skill, which appears on the skillbar and skill screen
 +
 +
* ''PrepareAnimationInit'', the initial animation to set up the looping animation when preparing the skill, before actually casting it (e.g., deciding where to shoot a projectile).
 +
* ''PrepareAnimationLoop'', the looping animation after the Init animation. The Init and Loop animation should be of the same animation type.
 +
* ''PrepareEffect'', any visual effects associated with preparing the skill, like electricity flowing between the hands. These typically are associated with the body, hands, feet, or above the head, in the form of ''Effect:Location''
 +
 +
* ''CastAnimation'', the animation when actually using the skill. This should mach the type of prepare and loop effect as well.
 +
* ''CastSelfAnimation'', the animation on the character when actually using the skill. Usually the same as CastAnimation ???
 +
 +
 +
  
  
 
== Best Practice ==
 
== Best Practice ==
  
When designing skills, consider the niche it fills and what sort of flavor it has. Try to make the skill feel distinct, but easy to understand. A little flavor text and a good name can go a long way to making a skill interesting.
+
When designing skills, consider the niche it fills and what sort of flavor it has. Try to make the skill feel distinct, but easy to understand. A little flavor text and a good name can go a long way to making a skill interesting. Consider the roleplay value this skill might have in a GM mode.
  
 
If you want the AI to use new skills intelligently, avoid scripting if you can. The AI can adapt to new skills, and can interpret the value of statuses with simple stat bonuses pr reductions. In general, a skill that does not depend on scripts will have less opportunity for bugs.
 
If you want the AI to use new skills intelligently, avoid scripting if you can. The AI can adapt to new skills, and can interpret the value of statuses with simple stat bonuses pr reductions. In general, a skill that does not depend on scripts will have less opportunity for bugs.

Latest revision as of 14:52, 19 February 2018

You can edit or create a wide array of skills with the Stats editor. While the skill creator is quite powerful, complex skills may require scripting. Almost any kind of skill is possible, though some things are more difficult than others. Skills, like most stats, can be edited in both the editor's stat editor and directly in a text editor. Both have their advantages, though it is recommended you start with adding skills in the stat editor.


Skill Type

Skill Type determines the fundamental behavior of the skill and what parameters are available to edit.

  • Target, usually affects one target with a non-projectile effect.
  • Shout, a self-buff or area of effect skill.
  • Projectile, fires one or more projectiles along a preset path. Can be used for a self-jump as well.
  • ProjectileStrike, a series of projectiles which rain from the sky rather than originating from the caster.
  • Cone, cause an effect in a cone shape determined by angle and range.
  • Zone, cause an effect in a rectangular or square shape
  • Jump, a self-teleport skill.
  • MultiStrike, a self-teleport skill that is also an attack.
  • Rush, a directional movement skill that requires a walkable path.
  • Teleportation, a teleportation of one or more characters
  • Summon, create one or more characters or objects.
  • Wall, create one or more characters or objects.
  • Dome, create a persisting area of effect with a dome visual.
  • Rain, a large area of effect skill that usually changes the atmosphere and creates a distribution of surfaces.
  • Storm, a large area of effect skill that usually changes the atmosphere and creates a distribution of surfaces, as well as raining projectiles down.
  • Tornado, a large area of effect skill that usually clears surfaces and statuses.
  • Quake, a large area of effect skill with screen shake and ground-based visual effects.

Basic Parameters

Every skill requires the following parameters to be filled out.

  • Entry, a unique name so that the skill can be referenced in scripts or other locations. When referencing the skill (e.g., in a skillbook), the skill is referred to by Skilltype_Skillname
  • Ability, Which ability tree this skill belongs to, which determines how it is sorted in the skill menu and which primary attribute scales its damage. Can be None.
  • Level, (?)What level this skill scales to. All existing skills are set to -1 level, which means the skill's damage scales with character level.
  • Tier, (?)
  • ActionPoints, how many action points the skill costs.
  • Cooldown, the cooldown in turns. Can be set to -1 for a once per combat skill.
  • Memory, the memory cost
  • Magic Cost, How many source points the skill costs

Damage

  • Damage Multiplier, the base damage, "100" being an average damage skill, or using exact weapon damage if is a weapon skill.
  • Damage Range, the percentage of variation in damage.
  • DamageType, the type of damage.
  • DeathType, the death animation and effect the skill generates.
  • Damage, an optional source of the damage amount which can take the caster or target's current or maximum armor or vitality
  • UseWeaponDamage, if yes, multiplies your weapon damage by the Damage Multiplier
  • UseWeaponProperties, if yes, the skill can inflict on chance hits of your weapon and other properties, like "ignite."
  • DivideDamage, if yes, splits the damage among the targets or projectiles you fire.
  • Stealth Damage Multiplier, multiplies the damage if you are in stealth.
  • Distance Damage Multiplier, the percentage extra damage you gain per 1m farther away you are from a target.

Range

  • TargetRadius, How far a Target, Projectile, or Teleportation, skill can reach
  • AreaRadius, How far an area of effect a shout or rain spell can reach from the caster, or the area of effect of a target or projectile skill.
  • ExplodeRadius, The area of effect that a projectile deals damage in. This is often but not always the same as AreaRadius.
  • AddWeaponRange, (?) If your weapon range is greater than the primary range factor, than it takes into your weapon range into account.
  • Range, The range of a cone or zone skill like Ground Slam.
  • HitRadius, Typically the area of effect of a teleporting or rushing character.
  • AddRangeFromAbility, (?)

Example: Ricochet has a TargetRadius of 13 for the initial target, an AreaRadius of 5 for determining the area the projectile can bounce to other enemies, and an ExplodeRadius of 0, so that the arrow does not deal damage to multiple enemies each time it hits an enemy.

Example: Whirlwind has an AreaRadius of 3, but has AddWeaponRange as yes, so a spear with 3.5m weapon range will have half a meter more range.

Example: Battering Ram has a HitRadius of 1, meaning the character can hit characters or objects in a 2m wide path.

Requirements

  • Requirement, a weapon requirement: StaffWeapon, MeleeWeapon, RangedWeapon, DaggerWeapon, ShieldWeapon, None
  • Requirements, conditional requirements: Combat, Immobile (typically checking !Immobile for teleport skills)
  • Memorization Requirements, ability requirements (e.g., RangerLore 2, or Sneaking 1) to memorize the skill

Conditions

  • TargetConditions, what conditions targets must meet to be direct targets of this skill. This can include simple logic, like "IF", "not" (!), "and" (&), "or" (|), and parentheses.
  • AOEConditions, conditions for an AOEBoost skill property.
  • ForceTarget, If yes, you cannot cast this without targeting a valid target (e.g., no targeting terrain)
  • CanTargetCharacters, if yes, can target characters
  • CanTargetItems, If yes, can target items.
  • CanTargetTerrain, If yes, you can target the terrain. Useful for skills that can manipulate surfaces, like Shocking Touch. Also good for area of effect attacks like Ground Slam, where you might want to target a space inbetween two characters to hit them both. Otherwise, make this no to prevent accidental casts.
Conditions: Character, Self, Nonself, Ally, Party, Player, Enemy, Item, Dead, Summon, NonSummon, MySummon, Owner, Party, Combat, Locked, AllowDead, FacingMe, CanPickup, HasStatus, InSurface, Surface.

Note: Combat should generally be a requirement, not a condition.

Examples

  • NonSelf;Ally;!Dead;NonSummon // only target alive, non-summon allies (not including the caster)
  • Tagged:UNDEAD;FacingMe // only target undead characters that are facing you (e.g., for a holy light spell)
  • (InSurface:SurfaceFire)|(HasStatus:BURNING)|SurfaceFire // target either entities standing in fire or burning, or a fire surface directly.
  •  !Dead&((!Enemy&!DamagedOnHeal)|(Enemy&DamagedOnHeal)) // (Chain Heal) target living allies that aren't damaged by healing (undead or decaying touch), but also target enemies if they are damaged by healing

Skill Properties

The SkillProperties parameter gives skills status effects and a few other specific effects. Like conditions, skill properties can take simple logic, usually in the following form

TargetType:IF(Conditions):Action

Property Actions

  • Statuses, in the form of STATUS,Chance,Duration.
  • AOE dependent statuses, with AOEBOOST:STATUS,Chance,Duration
  • Surface creation, in the form of CreateSurface,Radius,?,SurfaceType,Chance,Duration?"
  • Target surface creation, surfaces appear only on targets with TargetCreateSurface.
  • Cone surface creation, surfaces appears in a cone area TargetCreateConeSurface.
  • Surface manipulation, change a surface or cloud.
Ignite, Melt, Freeze, Electrify, Bless, Curse, Condense, Vaporize, Bloodify, Contaminate, Oilify, Shatter
  • Resurrect, Revive a character with Resurrect,Chance?,VitalityOnRevived.
  • Backstab conditions, including AlwaysBackstab and CanBackstab.
  • High ground, use AlwaysHighGround to always grant a skill high ground bonuses.
  • Equalize, take vitality and armor percentages and equalize them among certain targets with Equalize, TargetType.
  • Summon, for specific instances, you can summon characters with Summon,Template,Duration,SummonType,?. SummonType is totem or '-', for non-totem?
  • Source, steal source points with DRAIN,????.
  • Swap, Swap places with your target with SwapPlaces,?,?,Effect,Effect.
  • Sabotage, blow up a random arrow or grenade in an inventory with Sabotage,Amount.
  • Movement based damage, with DAMAGE_ON_MOVE,Chance,Duration,?,?.

Examples

SkillProperties Effect
BLEEDING,100,2 100% chance to set bleeding for 2 turns
AOEBOOST:HARMONY,100,2 Heal the target according to the number of allies within range (determined by area radius and AOEboost Conditions)
CreateSurface,2,,Fire,100,2 100% chance to create a circle of fire with 2m radius that lasts 2 rounds.
CLEANSE_WOUNDS,100,1;TargetCreateSurface,1,,Water Heal targets and create water of 1m radius under them.
Equalize,All; Sabotage,1 Equalize the health of a group of targets, and explode 1 random arrow or grenade in each of their inventories.
Resurrect,500,20 Revive a character with 20% vitality.
SELF:IF(Surface:Fire):ARROWHEAD_FIRE,100,2 If targeting a fire surface, apply fire damage buff to yourself for 2 turns.
TARGET:IF(Tagged:INCARNATE_S):INF_FIRE,100,-1 If targeting an incarnate, permanently grant it fire infusion
Summon,4cd5defc-5d36-4d76-b606-b6ca69a13617,4,totem,Target_DummyTargetSkill; Summon a bone totem for 4 turns.
Ignite;Melt;Contaminate Explode existing oil and poison surfaces, melt ice, and turn water into poison
TARGET:IF(Tagged:INCARNATE_S&(InSurface:SurfaceFire|InSurface:SurfaceLava)):INF_FIRE,100,-1 If target is incarnate and in fire or lava, permanently grant fire infusion.

Rain-specific properties

ConsequencesStartTime

This is the duration of the puddles creation and setting statuses on characters.

ConsequencesDuration

After the ConsequencesStartTime finishes, the visual/audio effects are prolonged for this time.

Templates

Templates are used any skill that uses "entities" including projectiles, summons, and walls. The entry of a template is a root templates GUID.

A projectile template defines the visual of the projectile, as well as its arc and the visual of the arc preview.

Summon templates are the character or item summoned (either as a direct summon skill, or as an skill property Summon entry entry.)


Name and Description

Skill display name, description, and stats description use Translated String Keys to display text. However, the stats editor can automatically generate the translated strings with the "Export Translated String Keys" option in the menu.

  • DisplayName, the primary display name of the skill seen by players.
  • Description, the main description of the skill. Often references StatsDescriptionParams with variables like [1], [2], etc, (see examples).
  • StatsDescription, a small secondary description below the main description and effects. Typically something unchanging, like the range, or detailed comments about how statuses or the skill functions.
  • StatsDescriptionParams, the stats referenced by variables. The first entry will apply to [1], the second entry to [2], etc.

Example

  • DisplayName: Magical Poison Dart
  • Description: Cast a magical poisonous dart that does [1] damage.
  • StatsDescription: Range: [2]<br>Poisoned deals poison damage over time.<br>Can target terrain to create ooze surface.
  • StatsDescriptionParams: Damage;TargetRadius

Icon, Animations and Effects

It is easiest to use existing icons, animations and effects for your skills. There are many existing icons you can use, either unused from D:OS1, or used in very different contexts than skills. You may want to mix and match existing animations and spell effects from existing skills to create a more original feeling skill. The powerful effect editor will let you create new effects relatively easily, however. Creating new animations will require outside software and a great deal of work.

  • Icon, the icon for the skill, which appears on the skillbar and skill screen
  • PrepareAnimationInit, the initial animation to set up the looping animation when preparing the skill, before actually casting it (e.g., deciding where to shoot a projectile).
  • PrepareAnimationLoop, the looping animation after the Init animation. The Init and Loop animation should be of the same animation type.
  • PrepareEffect, any visual effects associated with preparing the skill, like electricity flowing between the hands. These typically are associated with the body, hands, feet, or above the head, in the form of Effect:Location
  • CastAnimation, the animation when actually using the skill. This should mach the type of prepare and loop effect as well.
  • CastSelfAnimation, the animation on the character when actually using the skill. Usually the same as CastAnimation ???



Best Practice

When designing skills, consider the niche it fills and what sort of flavor it has. Try to make the skill feel distinct, but easy to understand. A little flavor text and a good name can go a long way to making a skill interesting. Consider the roleplay value this skill might have in a GM mode.

If you want the AI to use new skills intelligently, avoid scripting if you can. The AI can adapt to new skills, and can interpret the value of statuses with simple stat bonuses pr reductions. In general, a skill that does not depend on scripts will have less opportunity for bugs.

If AI use is not a priority, and you've exhausted possibilities within the stats editor, then scripting can open up new opportunities. In general, the easiest way to script a skill is to have the skill apply a custom status, and use the OnStatusApplied(__Me,YOURSTATUS) trigger in a character script that every character this skill can be used on has (e.g., Base, or "Player" if this skill is only cast on players.)