Powers: Difference between revisions

From OuroDev
pc>Brw316
(Created page with "Editing or creating power data requires at least a rudimentary knowledge of the power definition file format. No matter the set or type of power, the format is the same: <no...")
 
No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Editing or creating power data requires at least a rudimentary knowledge of the power definition file format. No matter the set or type of power, the format is the same:
To edit a power definition ("powerset_name".powers) and apply those edits to a server environment, you need the definition files themselves found in faptastic.7z or the Volume 2 binning setup ([[Magnet Links]]) and (https://git.ourodev.com/CoX/i2401-bin-server) respectively, and a server to test the changes on.  OuroDev primarily focuses only on Volume 2 servers, though i25p2 data files can be found here: https://git.ourodev.com/score/i25p2-bin-server.


<nowiki>
==Basic Power Modification:==
Power category.powerset.power_name
{
Name                "Power Name"                 
DisplayName          "text"
BuyRequires          text
ModesDisallowed      text
Type                text
Accuracy            integer
AttackTypes          text
EntsAffected        text
EntsAutoHit          text
Target              text
Range                integer
EnduranceCost        integer
IdeaCost            integer
TravelSuppression    integer
InterruptTime        integer
TimeToActivate      integer
RechargeTime        integer
ActivatePeriod      integer
EffectArea          text
Radius              integer
Arc                  integer
BoostsAllowed        text
// Additional Power Factors
StrengthsDisallowed  text
PowerRedirector      text
VisualFX            "menu\Powers\AnimFX\PlayerPowers\YourPowerAnimation.PFX"
include              menu\Powers\AnimFX\PlayerPowers\YourPowerAnimation.PFX
DisplayShortHelp    "text"
DisplayHelp          "text"
IconName            "YourPowerIcon.tga"
TimeToConfirm        integer
MaxTargetsHit        integer


AttribMod
#Open serverdata/Defs/powers
{
#Find the appropriate power definitions you want to change .e. (Blaster_Ranged_Archery.powers)
Name                "Effect Name"                       
#Open in Notepad++
Table                "Table Name"                 
#CTRL+F for the power you are looking to change
Aspect              text
#Scroll down to the attribute(s) that you wish to change.
Attrib              text
Target              text
Scale                integer
Type                text
AllowStrength        text
AllowResistance      text
Delay                integer
Duration            integer
Magnitude            integer
Period              integer
Chance              integer
NearGround          text
CancelOnMiss        text
StackType            text
Requires            text
// Additional Power Attribs
"Attribute"    text
AllowCombatMods      text
}</nowiki>


==Block 1: Power Facets==
*Range, Endurance cost, Recharge, etc. are found in the top block with the power name.


;Category
<nowiki>
:The category file that this power is linked with. It typically includes an archetype name followed by the primary function of the set.
  Name                "Dark_Blast"                 
      DisplayName          "P369601562"
      ModesDisallowed      kDisable_All, kSynergist_Transform_Mode
      Type                kClick
      Accuracy            1
      AttackTypes          kRanged_Attack, kNegative_Energy_Attack
      EntsAffected        kFoe
      EntsAutoHit          kNone
      Target              kFoe
      Range                80
      EnduranceCost        5.2
      IdeaCost            0
      TravelSuppression    3
      InterruptTime        0
      TimeToActivate      1
      RechargeTime        4
      ActivatePeriod      0
      EffectArea          kCharacter
      Radius              0
      Arc                  0
      BoostsAllowed        kAccuracy_Boost, kDamage_Boost, kRecharge_Boost, kEnduranceDiscount_Boost, kRange_Boost, kDebuff_ToHit_Boost
      VisualFX            "menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX"
      include              menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX
      DisplayShortHelp    "P4219235673"
      DisplayHelp          "P2499574216"
      IconName            "DarknessAssault_DarkBlast.tga"
      TimeToConfirm        0
      DisplayTargetShortHelp "P2190949330"
      DisplayTargetHelp    "P2735666026"
  </nowiki>


;Powerset
*Damage, secondary effects, heals, defense, resistances etc. are located in "AttribMod" blocks for those specific effects.
:The name of the powerset. It must be unique per powerset definition. DO NOT CHANGE IF MODIFYING A SET THAT HAS ALREADY BEEN CREATED.


;Power Name
<nowiki>
:The name of the powerset. It must be unique per powers definition. DO NOT CHANGE IF MODIFYING A POWER THAT HAS ALREADY BEEN CREATED.  This name is entered into the database on compile and will break boosts (enhancements) if renamed here.|}
  AttribMod
      {
          Name                 "Damage"                     
          Table                "Ranged_Damage"             
          Aspect              kAbs
          Attrib              knegative_Energy
          Target              kTarget
          Scale                1
          Type                kMagnitude
          AllowStrength        kTrue
          AllowResistance      kTrue
          Delay                0
          Duration            0
          Magnitude            1
          Period              0
          Chance              1.00
          NearGround          kFalse
          CancelOnMiss        kFalse
          DisplayAttackerHit  "P1568870839"
          DisplayVictimHit    "P4203961982"
          StackType            kStack
          Requires            enttype target> critter eq
      }
  </nowiki>


;DisplayName
:6. Find the aspect that you wish to change and edit the integer or string to the desired value.
:This can be used to override the existing name of a power if you wish to change it(Best practice is to generate pstrings so that non-English speaking persons may have a translated version in their native tongue).
:7. Save the file.
:8. Run mapserver.exeAs long as you have not changed any geos, the executable should recognize the change in the definition file and re-bin powers.bin.
:9. Test your change--preferably using a different server--by copying your new powers.bin to data/bin and data/server/bin.


;BuyRequires
:This is the requirement for power eligibility. If empty, only level is required. Else, it's a postfix expressions: arguments, then operator. This is what is required to have access to select this power (an archetype, a  prerequisite power, or other limiters).  Valid Operators are ||(or), &&(and), and !(not).
*Formats
**If BuyRequires is a power: 
***Category.PowerSet.Power1 Category.PowerSet.Power2 ||
**:- Ex. ''Feral_Might.Feral_Might.Hunter_Form''
**If BuyRequires is access level (GM):
**:-Ex. ''accesslevel char> 0 >=''
**If BuyRequires is an archetype:
**:-''$archetype @Class_Primalist ==''
:-Ex: '''BuyRequires'''  Feral_Might.Feral_Might.Hunter_Form accesslevel char> 0 >= &&
:: This means that the power being looked at requires Feral Might's Hunter Form power and (&&) the character has GM access greater than or equal to 0.


;ModesDisallowed
===Notes:===
:What "Mode" the caster cannot be in to have access to activate this power.  A "Mode" can be set by another power.  Modes are defined in Defs\attrib_names.def [link to file].


{| class="wikitable" style="width: 85%;"
*All times (Duration, Recharge, Activation, Period, etc.) are in seconds.
| rowspan="4" | '''Common Modes'''
*Damage and Heal are scale values that get multiplied by archetype-specific modifiers and a generic base damage that scales with level.
| ''kDisable_All''
*Resistance, Defense, and other buffs/debuffs are percentages in decimal format (50% = 0.50).
| All powers disabled.
|-
| ''kDisable_Pool''
| All pool powers disabled.
|-
| ''kDisable_Epic''
| All epic/ancillary pools disabled.
|-
| ''kDisable_Inspiration''
| Disables inspirations. Can append additional flags to specify type.
|-
| rowspan="9" | '''Transformation Modes'''
| ''kPeacebringer_Blaster_Mode''
| rowspan="4" | Kheldian-specific modes that control power availability while transformed.
|-
| ''kPeacebringer_Tanker_Mode''
|-
| ''kWarshade_Blaster_Mode''
|-
| ''kWarshade_Tanker_Mode''
|-
| ''kProwlerMode''
| rowspan="2" | Primalist-specific modes that control power availability while shapeshifted.
|-
| ''kHunterMode''
|-
| ''kHAC_Offense''
| rowspan="3" | Modes specific to Hyper-Advanced Clockwork that control power availability while in each combat mode.
|-
| ''kHAC_Defense''
|-
| ''kDisable_Juggernaut''
|}


;ModesRequired
==Advanced Power Modification and Creation:==
: What "Mode" the caster must be in to have access to activate this power.  A "Mode" can be set by another power.  Modes are defined in Defs\attrib_names.def [link to file].  ''See table above''.
The world of COH is now your sandbox, but if you desire to maintain a similar balance philosophy as the original developers used, the guidelines below will help to do so.


;Type
===Modifying Accuracy and ToHit===
:How the power is activated.  May only be one of the following:
*''kAuto''
*''kToggle''
*''kClick''
*''kBoost (enhancement)''
*''kInspiration''


;Accuracy
Accuracy is the multiplier to the ToHit attribute in the equation to determine final hit chance.  You may place any integer here, but are limited to a final result of min 0.05, max 0.95 as the result is clamped to those values.
:This is the multiplier to the ToHit attribute in the equation to determine final hit chance.


;AttackTypes
Hit chance equation for players:
:The type of attack as far as specialized Defense is concerned. The corresponding class attribute will defend against the AttackType of the power. More than one AttackType can be assigned to a power, and Defense for a power is additive. Default for this field is nothing, which is ok. It's only a Melee attack if you have to touch the guy, It's only Ranged if you send a projectile. It's AoE if the target is not Caster (Cone is AoE).
<nowiki>
  (minmax((kCur.Accuracy char>*(1+kStr.Accuracy char>))*minmax((kCur.ToHit char> + kStr.ToHit char> - (kCur.Defense target> + kStr.Defense target>)) 0.05, 0.95) 0.05, 0.95)
  </nowiki>
Where:


*''kAOE_Attack''
*kCur.Accuracy = Power accuracy
*''kMelee_Attack''
*kStr.Accuracy = accuracy mods from (de)buffs
*''kRanged_Attack''
**For critters this includes bonuses from rank and level adjustments
*''kSmashing_Attack''
*kCur.ToHit = base ToHit for the entity type
*''kLethal_Attack''
**Critter v. Player = 0.50
*''kFire_Attack''
**Player v Player = 0.50
*''kCold_Attack''
**Player v. Critter = 0.75
*''kEnergy_Attack''
*kStr.ToHit = ToHit mods from (de)buffs
*''kNegative_Energy_Attack''
*kCur.Defense = target defense
*''kPsionic_Attack''
*kStr.Defense = defense mods from (de)buffs
*''kToxic_Attack'' 
*''kSpecial_Attack''
*''kRadiation_Attack''
*''kElectrical_Attack''
*''kUnique1_Attack''
*''kUnique2_Attack''
*''kUnique3_Attack''


;GroupMembership
===Modifying Endurance Costs===
:Specifies the various power groups which exist.  A power group is a set of powers which are mutually exclusive. If you execute a power which is a member of group, then all the active toggle powers in that group are shut off. (Click and Auto powers are not shut off; their use shuts off Toggles.  The group(s) which a power is a member of is defined in the GroupMembership field of the power definition. This can be a list.
*''kFlying_Group''
*''kSpeed_Group''   
*''kSprint_Group'' 
*''kLeap_Group''
*''kFlyingRoot_Group''   
*''kSpeedRoot_Group''   
*''kSprintRoot_Group'' 
*''kLeapRoot_Group'' 
*''kRock_Armor_Group''   
*''kBrimstone_Armor_Group''   
*''kCrystal_Armor_Group''   
*''kMineral_Armor_Group'' 
*''kStealth_Group''
*''kHide_Group''
*''kRest_Group''
*''kKheldian_Group''
*''kAscendant_Group'' 
*''kDarkness_Group'' 
*''kAmmo_Group'' 
*''kHAC_Group'' 
*''kVanityPet_Group''   
*''kCombatPet_Group''   
*''kPrimalist_Group''   
*''kBio_Group'' 
*''kCombatPet_Group''


;AIGroups
Endurance cost is how much absolute Endurance is drained when the power is cast.  It is a function of Damage and Area (for damage powers) or a function of Control Effect and Duration:
:For NPC-Villains (AI controlled entities) Powers only (or pets).  Flags the power so that it is used by the AI in a specific way.
*''kJump''
*''SecondaryTarget''
*''HeavyGroup''
*''Summon''
*:- Used in conjunction with kEntCreate '''Attribute'''
*''Buff''
*''Debuff''
*''MidBattle''
*''Root''
*''HealAlly''
*''HealSelf''
*''PostDeath''
*:- Always accompanied by ''kCastableAfterDeath'' in '''Misc'''.


;EntsAffected
:Endurance Cost for Damage powers
:What or who the power will affect. Multiple Targets may be listed here. Most values are shared between '''Target, EntsAutoHit''' and '''EntsAffected'''.
{| class="wikitable" style="width: 85%;"
| ''kNone''
| No target.
|-
| ''kCaster''
| The caster, living or dead
|-
| ''kPlayer''
| Any living player except the caster
|-
| ''kPlayerHero''
| Any living player of type Hero except the caster
|-
| ''kPlayerVillain''
| Any living player of type Villain except the caster
|-
| ''kDeadPlayer''
| Any dead player INCLUDING caster
|-
| ''kDeadPlayerFriend''
| Any dead friendly players except the caster
|-
| ''kDeadPlayerFoe''
| Any dead hostile players except the caster
|-
| ''kTeammate''
| Any teammate or teammate's pet except the caster
|-
| ''kDeadTeammate''
| Any dead teammate or teammate's dead pet except the caster
|-
| ''kDeadOrAliveTeammate''
| Any teammate or teammate's pet except the caster, dead or alive
|-
| ''kVillain''
| Any living critter on team "evil" except the caster
|-
| ''kDeadVillain''
| Any dead critter on team "evil" INCLUDING the caster
|-
| ''kNPC''
| Any NPC but villains
|-
| ''kDeadOrAliveFriend''
| For teamX, anyone dead or alive on teamX except the caster. (X = good or evil)
|-
| ''kDeadFriend''
| For teamX, anyone dead on teamX except the caster. (X = good or evil)
|-
| ''kFriend''
| For teamX, anyone alive on teamX except the caster. (X = good or evil)
|-
| ''kDeadOrAliveFoe''
| For teamX, anyone dead or alive on teamY except the caster. (X,Y = good or evil)
|-
| ''kDeadFoe''
| For teamX, anyone dead on teamY except the caster. (X,Y = good or evil)
|-
| ''kFoe''
| For teamX, anyone alive on teamY except the caster. (X,Y = good or evil)
|-
| ''kLocation''
| A specific location
|-
| ''kTeleport''
| A specific location with constraints for teleporting
|-
| ''kAny''
| Any living entity.
|-
| ''kDeadOrAliveMyPet''
| Any target where the source is the owner (i.e. the caster's pets, or any of their pets, and so on, alive or dead)
|-
| ''kDeadMyPet''
| Any dead target where the source is the owner (i.e. the caster's dead pets, or any of their pets' dead pets, and so on)
|-
| ''kMyPet''
| Any living target where the source is the owner (i.e. the caster's living pets, or any of their pets' living pets, and so on)
|-
| ''kMyOwner''
| The caster's master's master's master's... up to the top level.
|-
| ''kMyCreator''
| The caster's immediate master, ignoring levels above.
|-
| ''kMyCreation''
| The source's living pets, but not any of their pets' pets
|-
| ''kDeadMyCreation''
| The source's dead pets, but not any of their pets' dead pets
|-
| ''kDeadOrAliveMyCreation''
| The source's pets, alive or dead, but not any of their pets' pets
|-
| ''kLeaguemate''
| Any living leaguemate and their pets except the caster
|-
| ''kDeadLeaguemate''
| Any dead leaguemate and all leaguemate's dead pets except the caster
|-
| ''kDeadOrAliveLeaguemate''
| All leaguemates and their pets, dead or alive except the caster
|-
| ''kPosition''
| A position relative to an entity specified by the designer
|}


;EntsAutoHit
<nowiki>
:See '''EntsAffected'''.
  (Scale*10*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc)))*0.8</nowiki>


;Target
:<nowiki>*Rule of thumb: Double endurance cost or halve damage for each 20 points of Radius.</nowiki>
See '''EntsAffected'''.


;TargetVisibilty
:Endurance Cost for Control powers
Specify what kind of visibility between the caster and the target is required for successful execution of the power.
{| class="wikitable" style="width: 85%;"
| ''kLineOfSite''
| Means that the caster must be able to see the target to use the power.
|-
| ''kNone''
| Means no visibility is required to use the power.
|}


;Range
  <nowiki>
:Maximum distance the caster can be from the target. Zero (0) for powers cast on self.
  Duration*Strength(%)*Multiplier</nowiki>
 
{| class="wikitable"
;EnduranceCost
!Effect
:How much absolute Endurance is drained when the power is cast.  (0) for Auto powers.
!Dur
 
!%
;TravelSuppression   
!End
:Disables Movement attributes for travel powers.
!Multiplier
 
;InterruptTime
:The duration of time before the power is activated when it can be interrupted and cancelled.  Should be restricted to powers outside of combat. Sometimes referred to as Wind Up.
 
;TimeToActivate
:Time in seconds it takes for the animation of the entity.  Should match the seconds converted from frames in the animation file (frames/30).
 
;RechargeTime
:Time it takes before this power can be activated again.
 
;ActivatePeriod
:Essential for Auto or Toggle powers.  This dictates when, or how often Power is activated.  Should be equal to Duration if the desired effect is constant. Time is in seconds.  Must be at least 0.125.  An ActivatePeriod of <.125 (e.g. 0), will be set to 0.125.
 
;EffectArea
:The area of effect of the power.  Default is Character.  Valid options are:
{| class="wikitable" style="width: 85%;"
| ''Character''
| The power affects a single target entity (e.g. a Villain or a Hero)
|-
| ''Sphere''
| The power affects all valid targets within a sphere.  Size of the Sphere is determined by the Radius.
|-
|-
| ''Cone''
|Snare
| The power affects all valid targets within a cone area. Area of the cone is determined by the Radius, Arc and Range.
|10
|0.50
|7.5
|1.50
|-
|-
| ''Location''
|Slow
| The power affects a targeted Location in the world. Used often for summoning/dropping pets, and Teleporting among other things.
|10
|0.50
|8.5
|1.75
|-
|-
| ''Volume''
|Immobilize (100% Snare)
| For Volume Geometry only. The power will fill the geometry the level designers build.  Must be an Auto Power. (I.e. Dayjobs).
|10
|1.00
|15
|1.50
|-
|-
| ''Map''
|Sleep
| The power affects a given map. Typically activated via a script in a different file.
|10
|1.00
|10
|1.00
|-
|-
| ''Room''
|Stun (100% Slow)
| The power affects a specific room on a map. Typically activated via a script in a different file.
|10
|1.00
|17.5
|1.75
|-
|-
| ''Touch''
|Hold
| unknown purpose.
|10
|-
|1.00
| ''Box''
|25
| A specific area defined by offset and size values found in '''AdditionalPowerFacets'''.
|2.50
|}
|}
===Modifying Recharge Time===


;Radius
RechargeTime is the time it takes before a power can be activated againIt can either be a variable in a function of '''Damage''' and '''AreaFactor''' where '''Scale''' is calculated based on it, or vice versa.
:If EffectArea is Sphere, then this is the radius of that sphereIf EffectArea is Cone, then this should be equal to the Range and Range should not be modifiable by Specializations (enhancements).


;Arc
:''Recharge calculation''
:If EffectArea is Cone, then this is the degrees of the Arc.


;BoostsAllowed
<nowiki>
:What Enhancements (aka Boosts, Specializations) can be placed on this power. For Enhancements themselves, this colon dictates what kind of Boost it is.
  ((((Scale*10)/2)-1.8)/0.8)*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc))</nowiki>
*''kAccuracy_Boost''
*''kDamage_Boost''
*''kEnduranceDiscount_Boost''
*''kRange_Boost''
*''kRecharge_Boost''
*''kDebuff_Defense_Boost''
*''kStunned_Boost''
*''kImmobilized_Boost''
*''kKnockback_Boost''
*''kBuff_ToHit_Boost''
*''kTaunt_Boost''
*''kHeal_Boost''
*''kSlow_Boost''
*''kDebuff_ToHit_Boost''
*''kInterrupt_Boost''
*''kHold_Boost''
*''kRecovery_Boost''
*''kSleep_Boost''
*''kFear_Boost''
*''kBuff_Defense_Boost''
*''kConfuse_Boost''
*''kRes_Damage_Boost''
*''kSpeedrunning_Boost''
*''kJump_Boost''
*''kSpeedFlying_Boost''
*''kIntangible_Boost''
*''kSpeedRunning_Boost''
*''kDeBuff_ToHit_Boost''
*''kDeBuff_Defense_Boost''


===Additional Power Factors===
===Modifying Damage for PVE===


;StrengthsDisallowed
Damage is an attribute modification that modifies the '''HitPoints''' attribute. It is applied by the game engine as a negative number, however the number that is seen onscreen is the resulting value after a series of calculations that originate with a generic HitPoints table. [Link to modifying HitPoints].
:If IgnoreStrength is true, then when the player uses the power ALL attribmods which change any Strength aspect are ignored. Enhancements on this power are NOT ignored. Individual AttribMods on this power can still specify StrAllowed. If strength is allowed, only the Enhancement strength is used. If IgnoreStrength is false (the default), then the power will pass on STR values to all AttribMods, unless individual AttribMods have AllowStrength (see below) set to False.
*''kTrue''
*''kFalse''


;PowerRedirector
:''Damage Equation''
;If true, this power will point to another power(s) instead.  Commonly used for sniped, assassin strikes, and Primalist powers.
*''kTrue''
*''kFalse''


;VisualFX
<nowiki>
:The PFX file called for the Power.  Commonly found in            "menu\Powers\AnimFX\PlayerPowers".
  @StdResult*Scale</nowiki>


;DisplayShortHelp   
@StdResult = value of the corresponding archetype-specific damage table (Melee_Damage, Melee_TempDamage, Ranged_Damage, or Ranged_TempDamage) at a given level.  
:Short help strings. The power name displayed in tool tips.  Set equal to Power Name above.  If they aren't defined for the target, it'll use the regular ones.


;DisplayHelp
https://docs.google.com/spreadsheets/d/1MayhxCH_n0F396ad_cFz2dvqmEydpGUWHKHfeeXKO8A/edit?usp=drivesdk
:Long help strings. Description of power and what it does.


;IconName
Scale = the modifier for a given damage type.  May be set manually or determined as a result of the '''RechargeTime equation''':
:Name of the Icon File.


;MaxTargetsHit
<nowiki>
:Max number of targets will be affected (not the max number hit) by an AoE power.
  (((RechargeTime*0.8+1.8)*2)/((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc)))/10</nowiki>


;MaxBoosts
===Modifying Damage for PVP===
:Maximum number of Enhancement Slots that can be put in this power (default is 6).


;AIReport
Design philosophy for PVP damage is a bit different than for PVERather than basing damage around Recharge and AreaFactor, PVP damage is calculated based on Cast Time and Recharge, then modified by a PVP-specific table.
:Determines whether or not the targeted AI is alerted to the casters presence when the power is cast on themDoes nothing for powers cast on Players.
*''kAlways''
*''kNever''
*''kMiss_Only''
*''kHit_Only''


;AnimMainTargetOnly
:''Damage scale equation for PVP''
:Animations and f/xs will only play on the targeted entity.  This is useful if we want to do an AoE power, and affect multiple targets, but not play any anims or f/x on the surrounding affected targets.
*''kTrue''
*''kFalse''
 
;CastThroughHold
:This power can be cast even is the target is Held.  Default is False.
*''kTrue''
*''kFalse''
 
 
;CastThroughSleep
:This power can be cast even is the target is Asleep.  Default is False.
*''kTrue''
*''kFalse''


<nowiki>
  (CastTime*0.7+RechargeTime*0.04+0.4)*AdjustedATDamageMod*DamageType%*(1/3.25)</nowiki>


;CastThroughStun
*Note: DamageType% is used for powers that deal multiple types of Damage and simply multiplies the total Scale by the percentage that the given type accounts for.
:This power can be cast even is the target is Stunned. Default is False.
*''kTrue''
*''kFalse''


 
{| class="wikitable"
;CastThroughTerrorize
!PVP Damage Modifiers
:This power can be cast even is the target is Terrorized.  Default is False.
!Normal damage offset
*''kTrue''
!Activation Time damage adjustment
*''kFalse''
!Recharge damage adjustment
 
!AT Mod damage adjustment
 
;ShowInManage
:Set to False if you don’t want this power to show in the Enhancement management UI. Default is True
*''kTrue''
*''kFalse''
 
 
;ShowInInventory
:Set to kNever if you don’t want this Power to show in the players Powers Inventory UI.
*''kNever''
*''kDefault''
*''kAlways''
*''kIfUsable''
*''kIfOwned''
 
;ShowBuffIcon
:Set to False if you don’t want this Power to show in the players Buff list. Default is True
*''kTrue''
*''kFalse''
 
;Misc
:Leave blank, or choose one of the options below:
{| class="wikitable" style="width: 85%;"
| ''kCastableAfterDeath''
| CastableAfterDeath powers can only be cast by the entity that is dead.
|-
| ''kNearGround''
| NearGround powers can only be activated when the entity is touching the ground.
|-
| ''kTargetNearGround''
|TargetNearGround powers can only be activated when the target is touching the ground.
|}
 
===Niche Facets===
 
;TimeToConfirm
:For Teleport and Resurrect powers,  the time the target has to accept the teleport or resurrection.
 
;DisplayConfirm
:The text displayed in the pop-up dialog box to accept a teleport or resurrect.
 
;TargetSecondary
:Currently for Teleport powers only.  To Teleport "Others", this value is always "kLocation".
 
;RangeSecondary
:Currently for Teleport powers only.  To Teleport "Others", this value is the distance you can teleport them.
 
;NumCharges
:''For Temporary Powers''. Sets the number of charges the power has initially. Each time the power is successfully made current (i.e. endurance is spent), the number of charges decreases by one. If the character gets interrupted during windup, or the power misses, or the target dies in the interim, the number of charges is still dropped by one. Once this value is zero, using the power has no effect. This is mainly used for click and inspiration powers, but can be used on toggle powers as well.
 
;UsageTime
:''For Temporary Powers''. Used for toggle powers only, this sets the number of seconds of use the power has total. While the toggle power is active, a timer is reduced until either it runs to zero or the power is toggled off. If it runs to zero, the toggle power automatically shuts off and cannot be turned on again. If the toggle power is shut off before the timer runs out, it may be activated again. This can be done over and over until the time runs out.
 
;LifeTime
:''For Temporary Powers''. Sets the number of real-world seconds the power will function, regardless of its usage. Attempting to use the power after this time has no effect. Toggle powers shut off when they reach the lifetime. This time passes even if the character is not online. This is useful for click, toggle, and auto powers
.
;NumAllowed
:''For Temporary Powers''. Sets the max number of this power you can have at one time.
 
;MaxUsageTime
:''For Temporary Powers''.  Maximum use time the power can be extended to in seconds.
 
;MaxLifetime
:''For Temporary Powers''.  The max number of real-world seconds extended that the power will function, regardless of its usage.
 
;MaxLifetimeInGame
:''For Temporary Powers''.  The max number of in-game seconds extended that the power will function, regardless of its usage.
 
;DoNotSave
:If True, this power will not save to the database.  If the player logs out or crosses zones, the power will be removed.
kTrue
kFalse
 
===AdditionalPowerFactors===
:The following is a list of additional flags that affect how a particular power behaves:
{| class="wikitable" style="width: 85%;"
| ''ToggleIgnoreHold''
| rowspan="3" | These booleans determine if the power is detoggled when held, slept or stunned. Assume false if missing. '''Toggles only'''.   
|-
| ''ToggleIgnoreSleep''   
|-
| ''ToggleIgnoreStun''
|-
| ''BoxOffset''
| rowspan="2" |  These are used to define a box offset relative to target and size. Used for the kBox EffectArea.
|-
| ''BoxSize''
|-
| ''ShootThroughUntouchable''
| A boolean that determines if the Power ignores untouchability.
|-
| ''InterruptLikeSleep''
| A boolean to determine if this power is only interrupted by things that interrupt sleep: Damage, Healing, KB/KD/KU, Repel.
|-
| ''TargetsThroughVisionPhase''
| Boolean to determine if the power can target, affect, or autohit things in different vision phases. Default to false.
|-
| rowspan="5" | ToggleDroppable
| rowspan="5" | How often is this toggle power be dropped by a kDropToggle AttribMod?  Default is kSometimes.
| ''kSometimes''
|-
| ''kAlways''
|-
| ''kFirst''
|-
| ''kLast''
|-
| ''kNever''
|-
| ''Deletable''
| A boolean to allow a Temporary power to be deleted.
|-
| ''Tradeable''
| Sets a power to be tradeable to other players.  Used for Boosts (enhancements).
|-
| ''IgnoreStrengths''             
| Strengths on this power that simply cannot be modified.  Different from StrengthsDisallowed because it also ignores enhancements.
|-
| ''HighlightEval''
| rowspan="3" | An evaluator that looks for a certain criteria, then highlights an icon or creates a ring around the Power.  Commonly used on Fast-snipes.
|-
| ''HighlightIcon''
|-
| ''HighlightRing''
|-
| ''DestroyOnLimit''
| Boolean to revoke the power if it reaches the usage limit.
|-
| ''StackingUsage''
| Boolean to extend existing powers when granted multiple times.
|-
| ''PositionCenter''
| rowspan="4" | Controls for a camera effect.
|-                 
| ''PositionDistance''
|-
| ''PositionHeight''
|-
| ''PositionYaw''
|-
|-
| ''FaceTarget''                     
|Tanker
| Boolean to face the target when firing.
|0.4
|0.7
|0.04
|1.267988141
|-
|-
| ''FloatRewarded''                   
|Scrapper
| Message floated on screen when this power is granted as reward.
|0.4
|0.7
|0.04
|1.147593307
|-
|-
| ''DisplayPowerDefenseFloat''       
|Blaster
| Message to float when this power is the defensive cause of a missed attack if attribmod doesn't specify its own float.
|0.4
|0.7
|0.04
|1.229564258
|-
|-
| ''ActivateRequires''               
|Defender
| A requirement check for activation. Follows the same rules as '''BuyRequires'''.
|0.4
|0.7
|0.04
|1.560600789
|-
|-
| ''TargetRequires''
|Controller
|An evaluator for a target to be valid. If empty, there are no requirements. Most commonly used for Inherent abilities.
|0.4
|0.7
|0.04
|1.676678533
|-
|-
| ''RewardRequires''                 
|Brute
| Requirement to be awarded the power through the reward system. If blank, there are no requirements.
|0.4
|0.7
|0.04
|1.352520684
|-
|-
| ''RewardFallback''
|Stalker
| The power that will be awarded if this power's requirements aren't met. If blank, none will be awarded.      
|0.4
|0.7
|0.04
|1.014390513
|-
|-
| ''SelfConfirm''
|Corrupter
| If 1, will ask the caster for confirmation. Default behavior excludes caster.
|0.4
|0.7
|0.04
|1.352520684
|-
|-
| ''ConfirmRequires''
|Dominator
| If the target fails this requirement, they auto-confirm.
|0.4
|0.7
|0.04
|1.4
|-
|-
| ''ProcMainTargetOnly''
|Mastermind
| Boolean to set if only main target is hit by attached procs.
|0.4
|0.7
|0.04
|1.50901068
|-
|-
| ''PreferenceMultiplier''
|Kheld
| Seems to be used for weighting preference for AI.
|0.4
|0.7
|0.04
|1.2
|-
|-
| ''DontSetStance''
|Veat
| May have something to do with AI or Mastermind pet stance? Default 1.
|0.4
|0.7
|0.04
|1.014390513
|-
|-
| ''PointValue''
|Pet
| rowspan="2" | Value of power. Point value/multiplier is only used in AE.
|0.4
|-
|0.7
| ''PointMultiplier''
|0.04
|-
|1
| ''ChainIntoPower''
| Immediately forces the user to activate the note power. Mostly used for critters with wind-up powers like War Walkers.
|-
| ''InstanceLocked''
| Seems to determine if the power is only active in a specific instance.
|-
| ''IsEnvironmentHit''
| Not exactly sure what it does, but it seems to be attached to emanator powers.
|-
| ''ShuffleTargets''
| Seems to randomly shuffle targets of the power.
|-
| ''ForceLevelBought''
| If greater than -1, forces the power to be counted as the level shown plus 1 for exemplaring. (Mostly just there to disable incarnate powers when exemplared below 45).
|-
| ''RefreshesOnActivePlayerChange''
| Refreshes the power if the active player on the team changes.  Used for '''Visionphase'''.
|-
| ''Cancelable''
| Not sure what it does, not well documented. May have to do with cancelling powers during activation.
|-
| ''IgnoreToggleMaxDistance''
| Boolean to ignore the normal maximum distance between toggle source and target.
|-
| ''ServerTrayPriority''
| Seems to be tied to the popup tray for temp powers that are in some missions.
|-
| ''AbusiveBuff''
| If true, attrib mods applied by this power will be cleared whenever entering a map that uses eRAT_ClearAbusiveBuffs
|}
|}
 
===Modifying Armor===
===Example Power Definition===
===Modifying (De)Buffs===
 
===Modifying HitPoints===
<nowiki>
Power Feral_Might.Feral_Might.Feral_Blow
{
    Name                "Feral_Blow"                 
    DisplayName          "P1196284902"
    BuyRequires          accesslevel char> 0 >=
    ModesDisallowed      kDisable_All
    Type                kClick
    Accuracy            1
    AttackTypes          kMelee_Attack, kSmashing_Attack
    EntsAffected        kFoe
    EntsAutoHit          kNone
    Target              kFoe
    Range                7
    EnduranceCost        4.368
    IdeaCost            0
    TravelSuppression    1
    InterruptTime        0
    TimeToActivate      1.2
    RechargeTime        3
    ActivatePeriod      0
    EffectArea          kCharacter
    Radius              0
    Arc                  0
    BoostsAllowed        kAccuracy_Boost, kDamage_Boost, kRecharge_Boost, kEnduranceDiscount_Boost, kHeal_Boost, kDebuff_Defense_boost, kStunned_Boost
    // Additional Power Factors
    StrengthsDisallowed  kRange
    PowerRedirector      kTrue
    VisualFX            "menu\Powers\AnimFX\PlayerPowers\TankerMelee_SuperStrength_Punch.PFX"
    include              menu\Powers\AnimFX\PlayerPowers\TankerMelee_SuperStrength_Punch.PFX
    DisplayShortHelp    "P2165549301"
    DisplayHelp          "P1031847805"
    IconName            "FeralMight_FeralBlow.tga"
    TimeToConfirm        0
    MaxTargetsHit        1
 
    AttribMod
    {
        Name                "Ones"                       
        Table                "Melee_Ones"                 
        Aspect              kCur
        Attrib              kPowerRedirect
        Target              kSelf
        Scale                1
        Type                kConstant
        AllowStrength        kFalse
        AllowResistance      kFalse
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1
        NearGround          kFalse
        CancelOnMiss        kFalse
        StackType            kStack
        Requires            kHunterMode source.Mode?
        // Additional Power Attribs
        PrimaryStringList    Primalist_Misc.Hunter_Form_Powers.Feral_Blow_Hunter
        AllowCombatMods      kFalse
    }
 
    AttribMod
    {
        Name                "Ones"                       
        Table                "Melee_Ones"                 
        Aspect              kCur
        Attrib              kPowerRedirect
        Target              kSelf
        Scale                1
        Type                kConstant
        AllowStrength        kFalse
        AllowResistance      kFalse
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1
        NearGround          kFalse
        CancelOnMiss        kFalse
        StackType            kStack
        Requires            kProwlerMode source.Mode?
        // Additional Power Attribs
        PrimaryStringList    Primalist_Misc.Prowler_Form_Powers.Feral_Blow_Prowler
        AllowCombatMods      kFalse
    }
 
    AttribMod
    {
        Name                "Ones"                       
        Table                "Melee_Ones"                 
        Aspect              kCur
        Attrib              kPowerRedirect
        Target              kSelf
        Scale                1
        Type                kConstant
        AllowStrength        kFalse
        AllowResistance      kFalse
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1
        NearGround          kFalse
        CancelOnMiss        kFalse
        StackType            kStack
        Requires            1
        // Additional Power Attribs
        PrimaryStringList    Primalist_Misc.Primal_Form_Powers.Feral_Blow_Primal
        AllowCombatMods      kFalse
    }
 
    AttribMod
    {
        Name                "Damage"                     
        Table                "Melee_Damage"               
        Aspect              kAbs
        Attrib              kSmashing
        Target              kTarget
        Scale                0.84
        Type                kMagnitude
        AllowStrength        kTrue
        AllowResistance      kTrue
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1
        NearGround          kFalse
        CancelOnMiss        kFalse
        DisplayAttackerHit  "P2658325911"
        DisplayVictimHit    "P4237552787"
        StackType            kStack
        Requires            enttype target> critter eq
    }
 
    AttribMod
    {
        Name                "Damage"                     
        Table                "Melee_Damage"               
        Aspect              kAbs
        Attrib              kSmashing
        Target              kTarget
        Scale                1.632
        Type                kMagnitude
        AllowStrength        kTrue
        AllowResistance      kTrue
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1.000
        NearGround          kFalse
        CancelOnMiss        kFalse
        DisplayAttackerHit  "P2658325911"
        DisplayVictimHit    "P4237552787"
        StackType            kStack
        Requires            enttype target> player eq
    }
 
    AttribMod
    {
        Name                "Ones"                       
        Table                "Melee_Ones"                 
        Aspect              kCur
        Attrib              kRage
        Target              kSelf
        Scale                0.1
        Type                kMagnitude
        AllowStrength        kFalse
        AllowResistance      kTrue
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1
        NearGround          kFalse
        CancelOnMiss        kFalse
        StackType            kStack
    }
 
    AttribMod
    {
        Name                "NBInactive"                 
        Table                "Melee_Ones"                 
        Aspect              kCur
        Attrib              kEntCreate
        Target              kTarget
        Scale                -1
        Type                kMagnitude
        AllowStrength        kFalse
        AllowResistance      kFalse
        Delay                0
        Duration            1
        Magnitude            1
        Period              0
        Chance              1.0
        NearGround          kFalse
        CancelOnMiss        kFalse
        StackType            kStack
        EntityDef            Pets_FeralBlow_Heal
        PriorityList        PL_StaticObject
        // Additional Power Attribs
        KeepThroughDeath    kTrue
        AllowCombatMods      kFalse
    }
 
    AttribMod
    {
        Name                "NBActive"                   
        Table                "Melee_Ones"                 
        Aspect              kCur
        Attrib              kEntCreate
        Target              kTarget
        Scale                -1
        Type                kMagnitude
        AllowStrength        kFalse
        AllowResistance      kFalse
        Delay                0
        Duration            1
        Magnitude            1
        Period              0
        Chance              0.0
        NearGround          kFalse
        CancelOnMiss        kFalse
        StackType            kStack
        EntityDef            Pets_FeralBlow_Heal_NBActive
        PriorityList        PL_StaticObject
        // Additional Power Attribs
        KeepThroughDeath    kTrue
        AllowCombatMods      kFalse
    }
 
    AttribMod
    {
        Name                "NBInactive"                 
        Table                "Melee_HealSelf"             
        Aspect              kAbs
        Attrib              kHeal
        Target              kSelf
        Scale                0.084
        Type                kMagnitude
        AllowStrength        kTrue
        AllowResistance      kFalse
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              1
        NearGround          kFalse
        CancelOnMiss        kFalse
        DisplayAttackerHit  "P777377190"
        StackType            kStack
    }
 
    AttribMod
    {
        Name                "NBActive"                   
        Table                "Melee_HealSelf"             
        Aspect              kAbs
        Attrib              kHeal
        Target              kSelf
        Scale                0.168
        Type                kMagnitude
        AllowStrength        kTrue
        AllowResistance      kFalse
        Delay                0
        Duration            0
        Magnitude            1
        Period              0
        Chance              0
        NearGround          kFalse
        CancelOnMiss        kFalse
        DisplayAttackerHit  "P777377190"
        StackType            kStack
    }
}
</nowiki>
 
This is the default definition file for the Primalist's Feral Blow power from the Feral Might primary powerset.  It is a single target melee click attack.  It is a fairly standard set-up, with the notable inclusion that it redirects to other powers (a version of the power for each form: Primal, Hunter, and Prowler).

Latest revision as of 12:57, 6 July 2022

To edit a power definition ("powerset_name".powers) and apply those edits to a server environment, you need the definition files themselves found in faptastic.7z or the Volume 2 binning setup (Magnet Links) and (https://git.ourodev.com/CoX/i2401-bin-server) respectively, and a server to test the changes on. OuroDev primarily focuses only on Volume 2 servers, though i25p2 data files can be found here: https://git.ourodev.com/score/i25p2-bin-server.

Basic Power Modification:

  1. Open serverdata/Defs/powers
  2. Find the appropriate power definitions you want to change .e. (Blaster_Ranged_Archery.powers)
  3. Open in Notepad++
  4. CTRL+F for the power you are looking to change
  5. Scroll down to the attribute(s) that you wish to change.
  • Range, Endurance cost, Recharge, etc. are found in the top block with the power name.
  Name                 "Dark_Blast"                  
      DisplayName          "P369601562"
      ModesDisallowed      kDisable_All, kSynergist_Transform_Mode
      Type                 kClick
      Accuracy             1
      AttackTypes          kRanged_Attack, kNegative_Energy_Attack
      EntsAffected         kFoe
      EntsAutoHit          kNone
      Target               kFoe
      Range                80
      EnduranceCost        5.2
      IdeaCost             0
      TravelSuppression    3
      InterruptTime        0
      TimeToActivate       1
      RechargeTime         4
      ActivatePeriod       0
      EffectArea           kCharacter
      Radius               0
      Arc                  0
      BoostsAllowed        kAccuracy_Boost, kDamage_Boost, kRecharge_Boost, kEnduranceDiscount_Boost, kRange_Boost, kDebuff_ToHit_Boost
      VisualFX             "menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX"
      include              menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX
      DisplayShortHelp     "P4219235673"
      DisplayHelp          "P2499574216"
      IconName             "DarknessAssault_DarkBlast.tga"
      TimeToConfirm        0
      DisplayTargetShortHelp "P2190949330"
      DisplayTargetHelp    "P2735666026"
  
  • Damage, secondary effects, heals, defense, resistances etc. are located in "AttribMod" blocks for those specific effects.
  AttribMod
      {
          Name                 "Damage"                      
          Table                "Ranged_Damage"               
          Aspect               kAbs
          Attrib               knegative_Energy
          Target               kTarget
          Scale                1
          Type                 kMagnitude
          AllowStrength        kTrue
          AllowResistance      kTrue
          Delay                0
          Duration             0
          Magnitude            1
          Period               0
          Chance               1.00
          NearGround           kFalse
          CancelOnMiss         kFalse
          DisplayAttackerHit   "P1568870839"
          DisplayVictimHit     "P4203961982"
          StackType            kStack
          Requires             enttype target> critter eq
      }
  
6. Find the aspect that you wish to change and edit the integer or string to the desired value.
7. Save the file.
8. Run mapserver.exe. As long as you have not changed any geos, the executable should recognize the change in the definition file and re-bin powers.bin.
9. Test your change--preferably using a different server--by copying your new powers.bin to data/bin and data/server/bin.


Notes:

  • All times (Duration, Recharge, Activation, Period, etc.) are in seconds.
  • Damage and Heal are scale values that get multiplied by archetype-specific modifiers and a generic base damage that scales with level.
  • Resistance, Defense, and other buffs/debuffs are percentages in decimal format (50% = 0.50).

Advanced Power Modification and Creation:

The world of COH is now your sandbox, but if you desire to maintain a similar balance philosophy as the original developers used, the guidelines below will help to do so.

Modifying Accuracy and ToHit

Accuracy is the multiplier to the ToHit attribute in the equation to determine final hit chance. You may place any integer here, but are limited to a final result of min 0.05, max 0.95 as the result is clamped to those values.

Hit chance equation for players:

  (minmax((kCur.Accuracy char>*(1+kStr.Accuracy char>))*minmax((kCur.ToHit char> + kStr.ToHit char> - (kCur.Defense target> + kStr.Defense target>)) 0.05, 0.95) 0.05, 0.95)
  

Where:

  • kCur.Accuracy = Power accuracy
  • kStr.Accuracy = accuracy mods from (de)buffs
    • For critters this includes bonuses from rank and level adjustments
  • kCur.ToHit = base ToHit for the entity type
    • Critter v. Player = 0.50
    • Player v Player = 0.50
    • Player v. Critter = 0.75
  • kStr.ToHit = ToHit mods from (de)buffs
  • kCur.Defense = target defense
  • kStr.Defense = defense mods from (de)buffs

Modifying Endurance Costs

Endurance cost is how much absolute Endurance is drained when the power is cast. It is a function of Damage and Area (for damage powers) or a function of Control Effect and Duration:

Endurance Cost for Damage powers
  (Scale*10*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc)))*0.8
*Rule of thumb: Double endurance cost or halve damage for each 20 points of Radius.
Endurance Cost for Control powers
  Duration*Strength(%)*Multiplier
Effect Dur % End Multiplier
Snare 10 0.50 7.5 1.50
Slow 10 0.50 8.5 1.75
Immobilize (100% Snare) 10 1.00 15 1.50
Sleep 10 1.00 10 1.00
Stun (100% Slow) 10 1.00 17.5 1.75
Hold 10 1.00 25 2.50

Modifying Recharge Time

RechargeTime is the time it takes before a power can be activated again. It can either be a variable in a function of Damage and AreaFactor where Scale is calculated based on it, or vice versa.

Recharge calculation
  ((((Scale*10)/2)-1.8)/0.8)*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc))

Modifying Damage for PVE

Damage is an attribute modification that modifies the HitPoints attribute. It is applied by the game engine as a negative number, however the number that is seen onscreen is the resulting value after a series of calculations that originate with a generic HitPoints table. [Link to modifying HitPoints].

Damage Equation
  @StdResult*Scale

@StdResult = value of the corresponding archetype-specific damage table (Melee_Damage, Melee_TempDamage, Ranged_Damage, or Ranged_TempDamage) at a given level.

https://docs.google.com/spreadsheets/d/1MayhxCH_n0F396ad_cFz2dvqmEydpGUWHKHfeeXKO8A/edit?usp=drivesdk

Scale = the modifier for a given damage type. May be set manually or determined as a result of the RechargeTime equation:

  (((RechargeTime*0.8+1.8)*2)/((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc)))/10

Modifying Damage for PVP

Design philosophy for PVP damage is a bit different than for PVE. Rather than basing damage around Recharge and AreaFactor, PVP damage is calculated based on Cast Time and Recharge, then modified by a PVP-specific table.

Damage scale equation for PVP
  (CastTime*0.7+RechargeTime*0.04+0.4)*AdjustedATDamageMod*DamageType%*(1/3.25)
  • Note: DamageType% is used for powers that deal multiple types of Damage and simply multiplies the total Scale by the percentage that the given type accounts for.
PVP Damage Modifiers Normal damage offset Activation Time damage adjustment Recharge damage adjustment AT Mod damage adjustment
Tanker 0.4 0.7 0.04 1.267988141
Scrapper 0.4 0.7 0.04 1.147593307
Blaster 0.4 0.7 0.04 1.229564258
Defender 0.4 0.7 0.04 1.560600789
Controller 0.4 0.7 0.04 1.676678533
Brute 0.4 0.7 0.04 1.352520684
Stalker 0.4 0.7 0.04 1.014390513
Corrupter 0.4 0.7 0.04 1.352520684
Dominator 0.4 0.7 0.04 1.4
Mastermind 0.4 0.7 0.04 1.50901068
Kheld 0.4 0.7 0.04 1.2
Veat 0.4 0.7 0.04 1.014390513
Pet 0.4 0.7 0.04 1

Modifying Armor

Modifying (De)Buffs

Modifying HitPoints