Powers: Difference between revisions

From OuroDev
m (6 revisions imported: Importing Portal Corps Wiki pages and history - Feb 6, 2020)
(updated links)
Line 1: Line 1:
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 (https://ourowiki.ouro-comdev.com/index.php?title=Magnet_Links), a binning setup (https://corps.ouro-comdev.com/index.php?title=Server_Setup_for_Making_Bins), and a server to test the changes on.  Unfortunately, only servers running an Issue 24 setup can make such changes as the definition files for Issue 25 and 26 are unavailable for public use.
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 (https://ourowiki.ouro-comdev.com/index.php?title=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:==
==Basic Power Modification:==
Line 8: Line 8:
#CTRL+F for the power you are looking to change
#CTRL+F for the power you are looking to change
#Scroll down to the attribute(s) that you wish to change.
#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.
 
*Range, Endurance cost, Recharge, etc. are found in the top block with the power name.
 
  <nowiki>
  <nowiki>
Name                "Dark_Blast"                   
Name                "Dark_Blast"                   
    DisplayName          "P369601562"
    DisplayName          "P369601562"
    ModesDisallowed      kDisable_All, kSynergist_Transform_Mode
    ModesDisallowed      kDisable_All, kSynergist_Transform_Mode
    Type                kClick
    Type                kClick
    Accuracy            1
    Accuracy            1
    AttackTypes          kRanged_Attack, kNegative_Energy_Attack
    AttackTypes          kRanged_Attack, kNegative_Energy_Attack
    EntsAffected        kFoe
    EntsAffected        kFoe
    EntsAutoHit          kNone
    EntsAutoHit          kNone
    Target              kFoe
    Target              kFoe
    Range                80
    Range                80
    EnduranceCost        5.2
    EnduranceCost        5.2
    IdeaCost            0
    IdeaCost            0
    TravelSuppression    3
    TravelSuppression    3
    InterruptTime        0
    InterruptTime        0
    TimeToActivate      1
    TimeToActivate      1
    RechargeTime        4
    RechargeTime        4
    ActivatePeriod      0
    ActivatePeriod      0
    EffectArea          kCharacter
    EffectArea          kCharacter
    Radius              0
    Radius              0
    Arc                  0
    Arc                  0
    BoostsAllowed        kAccuracy_Boost, kDamage_Boost, kRecharge_Boost, kEnduranceDiscount_Boost, kRange_Boost, kDebuff_ToHit_Boost
    BoostsAllowed        kAccuracy_Boost, kDamage_Boost, kRecharge_Boost, kEnduranceDiscount_Boost, kRange_Boost, kDebuff_ToHit_Boost
    VisualFX            "menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX"
    VisualFX            "menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX"
    include              menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX
    include              menu\Powers\AnimFX\PlayerPowers\DominatorAssault_DarknessAssault_DarkBlast.PFX
    DisplayShortHelp    "P4219235673"
    DisplayShortHelp    "P4219235673"
    DisplayHelp          "P2499574216"
    DisplayHelp          "P2499574216"
    IconName            "DarknessAssault_DarkBlast.tga"
    IconName            "DarknessAssault_DarkBlast.tga"
    TimeToConfirm        0
    TimeToConfirm        0
    DisplayTargetShortHelp "P2190949330"
    DisplayTargetShortHelp "P2190949330"
    DisplayTargetHelp    "P2735666026"
    DisplayTargetHelp    "P2735666026"
</nowiki>
</nowiki>
 
*Damage, secondary effects, heals, defense, resistances etc. are located in "AttribMod" blocks for those specific effects.
*Damage, secondary effects, heals, defense, resistances etc. are located in "AttribMod" blocks for those specific effects.
  <nowiki>
  <nowiki>
AttribMod
AttribMod
    {
    {
        Name                "Damage"                       
        Name                "Damage"                       
        Table                "Ranged_Damage"               
        Table                "Ranged_Damage"               
        Aspect              kAbs
        Aspect              kAbs
        Attrib              knegative_Energy
        Attrib              knegative_Energy
        Target              kTarget
        Target              kTarget
        Scale                1
        Scale                1
        Type                kMagnitude
        Type                kMagnitude
        AllowStrength        kTrue
        AllowStrength        kTrue
        AllowResistance      kTrue
        AllowResistance      kTrue
        Delay                0
        Delay                0
        Duration            0
        Duration            0
        Magnitude            1
        Magnitude            1
        Period              0
        Period              0
        Chance              1.00
        Chance              1.00
        NearGround          kFalse
        NearGround          kFalse
        CancelOnMiss        kFalse
        CancelOnMiss        kFalse
        DisplayAttackerHit  "P1568870839"
        DisplayAttackerHit  "P1568870839"
        DisplayVictimHit    "P4203961982"
        DisplayVictimHit    "P4203961982"
        StackType            kStack
        StackType            kStack
        Requires            enttype target> critter eq
        Requires            enttype target> critter eq
    }
    }
</nowiki>
</nowiki>
: 6. Find the aspect that you wish to change  and edit the integer or string to the desired value.
 
: 7. Save the file.
:6. Find the aspect that you wish to change  and edit the integer or string to the desired value.
: 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.
:7. Save the file.
: 9. Test your change--preferably using a different server--by copying your new powers.bin to data/bin and data/server/bin.
: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:===
===Notes:===
*All times (Duration, Recharge, Activation, Period, etc.) are in seconds.
*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.
*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).
*Resistance, Defense, and other buffs/debuffs are percentages in decimal format (50% = 0.50).


Line 86: Line 92:
Hit chance equation for players:
Hit chance equation for players:
  <nowiki>
  <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)
(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>
</nowiki>
Where:
Where:
*kCur.Accuracy = Power accuracy
*kCur.Accuracy = Power accuracy
*kStr.Accuracy = accuracy mods from (de)buffs
*kStr.Accuracy = accuracy mods from (de)buffs
Line 104: Line 111:
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 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
:Endurance Cost for Damage powers
 
  <nowiki>
  <nowiki>
(Scale*10*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc)))*0.8</nowiki>
(Scale*10*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc)))*0.8</nowiki>
 
:<nowiki>*Rule of thumb: Double endurance cost or halve damage for each 20 points of Radius.</nowiki>


: *Rule of thumb: Double endurance cost or halve damage for each 20 points of Radius.
:Endurance Cost for Control powers


: Endurance Cost for Control powers
  <nowiki>
  <nowiki>
Duration*Strength(%)*Multiplier</nowiki>
Duration*Strength(%)*Multiplier</nowiki>
{| class="wikitable"
{| class="wikitable"
! Effect
!Effect
! Dur
!Dur
! %
!%
! End
!End
! Multiplier
!Multiplier
|-
|-
| Snare
|Snare
| 10
|10
| 0.50
|0.50
| 7.5
|7.5
| 1.50
|1.50
|-
|-
| Slow
|Slow
| 10
|10
| 0.50
|0.50
| 8.5
|8.5
| 1.75
|1.75
|-
|-
| Immobilize (100% Snare)
|Immobilize (100% Snare)
| 10
|10
| 1.00
|1.00
| 15
|15
| 1.50
|1.50
|-
|-
| Sleep
|Sleep
| 10
|10
| 1.00
|1.00
| 10
|10
| 1.00
|1.00
|-
|-
| Stun (100% Slow)
|Stun (100% Slow)
| 10
|10
| 1.00
|1.00
| 17.5
|17.5
| 1.75
|1.75
|-
|-
| Hold
|Hold
| 10
|10
| 1.00
|1.00
| 25
|25
| 2.50
|2.50
|}
|}
===Modifying Recharge Time===
===Modifying Recharge Time===
Line 160: Line 169:
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.
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''
:''Recharge calculation''
 
  <nowiki>
  <nowiki>
((((Scale*10)/2)-1.8)/0.8)*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc))</nowiki>
((((Scale*10)/2)-1.8)/0.8)*((1+(Radius*0.15))-(((Radius/6)*0.011)/5)*(360-Arc))</nowiki>


===Modifying Damage for PVE===
===Modifying Damage for PVE===
Line 168: Line 178:
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 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''
:''Damage Equation''
 
  <nowiki>
  <nowiki>
@StdResult*Scale</nowiki>
@StdResult*Scale</nowiki>


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


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


===Modifying Damage for PVP===
===Modifying Damage for PVP===
Line 185: Line 196:
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.
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''
:''Damage scale equation for PVP''
 
  <nowiki>
  <nowiki>
(CastTime*0.7+RechargeTime*0.04+0.4)*AdjustedATDamageMod*DamageType%*(1/3.25)</nowiki>
(CastTime*0.7+RechargeTime*0.04+0.4)*AdjustedATDamageMod*DamageType%*(1/3.25)</nowiki>


*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.
*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.


{| class="wikitable"
{| class="wikitable"
! PVP Damage Modifiers
!PVP Damage Modifiers
! Normal damage offset
!Normal damage offset
! Activation Time damage adjustment
!Activation Time damage adjustment
! Recharge damage adjustment
!Recharge damage adjustment
! AT Mod damage adjustment
!AT Mod damage adjustment
|-
|-
| Tanker
|Tanker
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.267988141
|1.267988141
|-
|-
| Scrapper
|Scrapper
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.147593307
|1.147593307
|-
|-
| Blaster
|Blaster
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.229564258
|1.229564258
|-
|-
| Defender
|Defender
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.560600789
|1.560600789
|-
|-
| Controller
|Controller
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.676678533
|1.676678533
|-
|-
| Brute
|Brute
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.352520684
|1.352520684
|-
|-
| Stalker
|Stalker
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.014390513
|1.014390513
|-
|-
| Corrupter
|Corrupter
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.352520684
|1.352520684
|-
|-
| Dominator
|Dominator
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.4
|1.4
|-
|-
| Mastermind
|Mastermind
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.50901068
|1.50901068
|-
|-
| Kheld
|Kheld
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.2
|1.2
|-
|-
| Veat
|Veat
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1.014390513
|1.014390513
|-
|-
| Pet
|Pet
| 0.4
|0.4
| 0.7
|0.7
| 0.04
|0.04
| 1
|1
|}
|}
===Modifying Armor===
===Modifying Armor===
===Modifying (De)Buffs===
===Modifying (De)Buffs===
===Modifying HitPoints===
===Modifying HitPoints===

Revision as of 09:29, 15 November 2020

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 (https://ourowiki.ouro-comdev.com/index.php?title=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