Skip to content

Instantly share code, notes, and snippets.

@Dobby233Liu
Last active June 11, 2022 02:46
Show Gist options
  • Save Dobby233Liu/ec4de321882933f12811da9ec4eed72e to your computer and use it in GitHub Desktop.
Save Dobby233Liu/ec4de321882933f12811da9ec4eed72e to your computer and use it in GitHub Desktop.
cleanup of scr_damage in DELTARUNE Chapter 2 for reference
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