#8 - Weapn/armor management

This commit is contained in:
2021-03-13 22:33:24 +01:00
parent 9d610215d4
commit 2353ba5ff9
6 changed files with 63 additions and 17 deletions

View File

@@ -261,8 +261,20 @@ export class SoSUtility extends Entity {
return;
}
}
// DR management
let armor = flipData.target.actor.data.items.find( item => item.type == 'armor' && item.data.worn);
flipData.armorDR = armor ? armor.data.dr : 0;
flipData.armorGel = armor ?armor.data.gel : 0;
flipData.armorReflect = armor ? armor.data.reflect : 0;
let dr = flipData.target.actor.data.data.scores.dr.value + flipData.armorDR;
if (flipData.weapon.data.category == 'ballistic') {
dr += flipData.armorGel;
}
if (flipData.weapon.data.category == 'laser') {
dr += flipData.armorReflect;
}
let dr = flipData.target.actor.data.data.scores.dr.value;
let shock = flipData.target.actor.data.data.scores.shock.value || 1;
let defenseCritical = flipData.target.actor.data.data.scores.defense.critical;
flipData.damageStatus = 'apply_damage';
@@ -274,25 +286,35 @@ export class SoSUtility extends Entity {
if ( flipData.damageValue < dr) {
if (flipData.damageValue < dr / 2) {
flipData.damageStatus = "no_damage";
// TODO : No damage !
flipData.damageReason = "Damage are lesser than DR/2";
} else {
flipData.damageSeverity = this.decreaseSeverity(flipData.damageSeverity );
if ( flipData.damageSeverity == 'N') {
flipData.damageStatus = "no_damage";
flipData.damageReason = "Severity decreased to nothing";
}
}
}
// Shock management
flipData.woundsList = [];
if ( flipData.damageValue >= shock) {
let incSeverity = Math.floor(flipData.damageValue / shock);
for (let i=0; i<incSeverity; i++) {
if ( flipData.damageSeverity == 'C') {
flipData.woundsList.push( flipData.damageSeverity );
flipData.damageSeverity = 'L';
} else {
flipData.damageSeverity = this.increaseSeverity( flipData.damageSeverity );
flipData.nbStun = 0;
if ( flipData.weapon.stun ) { // Stun weapon case
if ( flipData.damageValue >= shock ) {
flipData.nbStun = Math.floor(flipData.damageValue / shock);
}
} else {
if ( flipData.damageValue >= shock ) {
let incSeverity = Math.floor(flipData.damageValue / shock);
for (let i=0; i<incSeverity; i++) {
if ( flipData.damageSeverity == 'C') {
flipData.woundsList.push( flipData.damageSeverity );
flipData.damageSeverity = 'L';
} else {
flipData.nbStun++;
flipData.damageSeverity = this.increaseSeverity( flipData.damageSeverity );
flipData.damageReason = "Severity increased";
}
}
}
}