Last active
June 11, 2022 02:46
-
-
Save Dobby233Liu/ec4de321882933f12811da9ec4eed72e to your computer and use it in GitHub Desktop.
cleanup of scr_damage in DELTARUNE Chapter 2 for reference
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function selectRandomTarget() | |
{ | |
if (!partyCharacter[0].targetable && !partyCharacter[1].targetable && !partyCharacter[2].targetable) | |
return 3 | |
var _target = choose(0, 1, 2) | |
while (!partyCharacter[_target].targetable) | |
_target = choose(0, 1, 2) | |
return _target | |
} | |
function calcDamage(_damage, _target) | |
{ | |
var _tempDamage = _damage | |
for (var i = 0; i < _target.def; i++) | |
{ | |
if (_tempDamage > (_target.maxHp / 5)) | |
_tempDamage -= 3 | |
else if (_tempDamage > (_target.maxHp / 8)) | |
_tempDamage -= 2 | |
else | |
_tempDamage -= 1 | |
} | |
return Math.max(_tempDamage, 1) | |
} | |
function calcDamageOld(_damage, _target) | |
{ | |
return Math.ceil(_damage - (_target.def * 3)) | |
} | |
function calcElementDamageReductionFactor(_element, _char) | |
{ | |
if (_element == 0) | |
return 1 | |
var _reduction = 1 | |
for (var i = 1; i < 3; i++) | |
{ | |
var _curItem = itemsWithElements[_char][i] | |
if (_curItem.element != 0) | |
{ | |
if (_curItem.element == 10) | |
_reduction -= _curItem.elementReduceAmount | |
else if (_curItem.element == 9 && (_element == 2 || _element == 8)) | |
_reduction -= _curItem.elementReduceAmount | |
else if (_curItem.element == _element) | |
_reduction -= _curItem.elementReduceAmount | |
} | |
} | |
return Math.max(0.25, _reduction) | |
} | |
// target is the party slot to damage | |
// 3 damages all members, 4 selects a random member | |
function damage(damage, target, element = 0) | |
{ | |
var _target = target | |
if (_target < 3 && partyCharacter[_target].hp <= 0) | |
_target = selectRandomTarget() | |
if (_target == 4) | |
{ | |
_target = selectRandomTarget() | |
var _partyAvgHp = 0 | |
var _totalHp = 0 | |
var _totalMaxHp = 0 | |
for (var i = 0; i < 3; i++) | |
{ | |
if (partyCharacter[i] > 0) | |
{ | |
_totalHp += partyCharacter[i].hp | |
_totalMaxHp += partyCharacter[i].maxHp | |
} | |
} | |
if (_totalHp > 0 && _totalMaxHp > 0) | |
_partyAvgHp = Math.floor(_totalHp / _totalMaxHp) | |
if ((partyCharacter[_target].hp / partyCharacter[_target].maxHp) < (_partyAvgHp / 2)) | |
_target = selectRandomTarget() | |
if ((partyCharacter[_target].hp / partyCharacter[_target].maxHp) < (_partyAvgHp / 2)) | |
_target = selectRandomTarget() | |
if (_target == 0 && (partyCharacter[_target].hp / partyCharacter[_target].maxHp) < 0.35) | |
_target = selectRandomTarget() | |
} | |
var _targetChar = 3 | |
var _tempDamage = damage | |
var oldCalculationAlgo = false | |
if (_target < 3) | |
{ | |
_targetChar = partyCharacter[_target] | |
if (oldCalculationAlgo) | |
_tempDamage = calcDamageOld(_tempDamage, _targetChar) | |
else | |
_tempDamage = calcDamage(_tempDamage, _targetChar) | |
if (_targetChar.action == ACTION_DEFEND) | |
_tempDamage = Math.ceil(_tempDamage * 2 / 3) | |
_tempDamage = Math.max(1, Math.ceil(_tempDamage * calcElementDamageReductionFactor(element, _targetChar))) | |
if (_targetChar.hp <= 0) | |
{ | |
_tempDamage = Math.round(_tempDamage / 4) | |
_targetChar.hurt(_tempDamage) | |
} | |
else | |
{ | |
_targetChar.hurt(_tempDamage) | |
if (_targetChar.hp <= 0) | |
_targetChar.hp = Math.round(-(_targetChar.maxHp) / 2) | |
} | |
} | |
else if (_target == 3) | |
{ | |
for (var i = 0; i < 3; i++) | |
{ | |
_targetChar = partyCharacter[i] | |
if (_targetChar.hp >= 0) | |
{ | |
if (oldCalculationAlgo) | |
_tempDamage = calcDamageOld(_tempDamage, _targetChar) | |
else | |
_tempDamage = calcDamage(_tempDamage, _targetChar) | |
_tempDamage = Math.ceil(_tempDamage * calcElementDamageReductionFactor(element, _targetChar)) | |
if (_targetChar.action == ACTION_DEFEND) | |
_tempDamage = Math.ceil(_tempDamage * 3 / 4) | |
_targetChar.hurt(_tempDamage) | |
if (_targetChar.hp <= 0) | |
_targetChar.hp = Math.round(-(partyCharacter[0].maxHp) / 2) // ??? selects kris' hp | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment