...das mag jetzt etwas spät daherkommen, aber da ich über etwas Code gestolpert bin und mich an diesen Beitrag zurückerinnert fühlte:
Zitat von Corti
[...]dass es ein Hardcap von 999 gibt. d.h. wenn du 950 Atk hast, dann 100 Atk zufügt und dann 100 Atk abziehst du bei 899 Atk landest.
...
Also ich würde dann wieder bei 950 landen.
Das HardCap gibt es nur beim Auslesen der Werte. Im Hintergrund wird das sehr wohl über 999 / unter 1 genau verrechnet. Halt nur irgendwo min./max. auf 1/999 beschränkt, obwohl das max.Cap beim Auslesen auf 9999 steht... fragt mich nicht warum.
481748 <>GetStr 2k3: 4BFB28
48174C mov edi,eax memorize Ptr on Hero/Actor(enemies too)
481752 call get Stat (30=Str | 34=Def | 38=Int | 3C=Agi)
481755 add eax,[edx+1C] add Stat-Increase/Reduction (caused by Skills in battle)
481758 mov ecx,270F max.cap = 9999
48175D mov edx,1 min.cap = 1
481762 call sub_4596AC call ValueCapping
| sub_4596AC <>ValueCapping
| 4596AD mov ebx,eax memorize original value
| 4596AF cmp ecx,eax Is the max.cap smaller than the original value?
| 4596B1 jge jump to 4596B5 if the value is still below the cap
| 4596B3 mov ebx,ecx set the max.cap as the new value
| 4596B5 cmp edx,eax Is the min.cap bigger than the original value?
| 4596B7 jle jump to 4596BB if the value is still above the cap
| 4596B9 mov ebx,edx set the min.cap as the new value
| 4596BB mov eax,ebx set checked/altered value as Output
481767 mov ebp,eax memorize capped value
481769 off_49AD98 = ConditionPtr
481770 call sub_45A8E4 get the amount of Conditions
481775 mov esi,eax memorize ConditionAmount
481777 test esi,esi Are there any Conditions existent?
481779 jle jump if there aren't
48177B mov ebx,1 initialize Condition_ID-Ptr
__________CheckConditionsLoop__________
481780 ->mov edx,ebx get Condition_ID-Ptr into EDX
481782 | mov eax,edi get Ptr on Hero/Actor(enemies too)
481784 | c.sub_481A9C call CheckCondition (by EDX's content)
481789 | test eax,eax Is the Actor afflicted with the Condition?
48178B | jle jump if not
48178D | off_49AD98 = ConditionPtr
481794 | mov edx,ebx get Condition_ID-Ptr
481796 | c.sub_4607A0 call GetConditionParam
48179B | cmp [eax+3C],0 Is HalvesStr_flag = false? (3D=Def | 3E=Int | 3F=Agi)
4817A1 | sar ebp,1 divide stat by 2^1 (this halves the stat)
4817AA | inc ebx Condition_ID-Ptr +1
4817AB | dec esi ConditionAmount -1
4817AC --jnz jump to check all Conditions
_______________________________________
4817AE mov eax,ebp set the stat as Output
...
4BFBC1 get stat_x0.5_flag
4BFBC4 get stat_x2.0_flag
4BFBC9 jz jump to halve the stat
4BFBCC jz jump to double the stat //stats can be above 999 with this
4BFBCE jmp else: normal stat (either no flags or both were triggered)
4BFBD0 sar ebp,1 divide memorized stat by 2^1
4BFBE3 mov eax,ebp get memorized capped stat
4BFBE5 add eax,eax double capped stat
4BFBE7 mov ebp,eax memorize new stat
4BFBE9 mov eax,ebp set the stat as Output
Man kann auch an den min./max.caps rumschrauben:
Edit:
Grobe Tippfehler... courtesy of ctrl+C and ctrl+V.
Zitat von DynRPG.ini
[QuickPatches]
maxStrCap=4BFB3C,#9999
minStrCap=4BFB41,#1
maxDefCap=4BFC08,#9999
minDefCap=4BFC0D,#1
maxIntCap=4BFCD1,#9999
minIntCap=4BFCD6,#1
maxAgiCap=4BFD6D,#9999
minAgiCap=4BFD72,#1
...
...für z.B. 1..100% oder was auch immer.