En primer lugar en el dominio táctico, durante la declaración de las acciones se declararán los ataques del personaje. Los ataques serán un mapa en los casos de multiples ataques:
{
"actionId": "action_001",
"tacticalGameId": "game_001",
"characterId": "character_001",
"actionType": "attack",
"round": 1,
"actionPoints": 3,
"attacks": [
{
"attackMode": "main_hand",
"targetId": "character_002",
"parry": {
"targetId": "character_002",
"value": 20
},
"status": "draft"
},
{
"attackMode": "off_hand",
"targetId": "character_03",
"parry": {
"targetId": "character_02",
"value": 20
},
"status": "draft"
}
]
}En el momento en el que se va a resolver el ataque el dominio táctico realizará una petición a la API de ataques para cada uno de ellos.
La petición será:
POST /api/v1/attacks
{
"actionId": "action_001",
"sourceId": "source_001",
"targetId": "target_001",
"modifiers":{
"attackType": "ranged|melee",
"rollModifiers": { // Calculados a partir del dominio táctico
"bo": 80,
"boInjuryPenalty": -10,
"boActionPointsPenalty": -5,
"boPacePenalty": 0,
"boFatiguePenalty": -1,
"bd": 20,
"rangePenalty": 0,
"parry": 20,
"custom": 20,
},
"calledShot": {
"calledShot": "head",
"calledShotAT": 5
},
"situations": {
"sizeDiference": 0,
"disabledDb": false,
"higherGround": true,
"surprised": false,
"proneAttacker": false,
"proneDefender": false,
"restrictedQuarters": "none",
"positionalAttacker": "none",
"positionalDefender": "none",
"rangedAttackInMelee": false,
"range": 10,
"flyingDefenseBonus": false,
"cover": "partial",
"canUseShield": true,
"dodge": "partial"
},
"features": [
{
"name": "slaying-attack",
"value": "1"
}
],
"skills": [
{
"name": "foo",
"value": 10
},
{
"name": "bar",
"value": 5
}
]
}
}La estructura del objeto del ataque es:
{
"id": "attack_001",
"actionId": "action_001",
"status": "draft",
"modifiers": {
"...": "...",
},
"calculated": {
"boModifiers": [
{
"name": "foo",
"value": 80
},
{
"name": "var",
"value": -20
},
],
"totalBo": 60
},
"roll": {
"roll": 15
},
"result": {
"labelResult": "8AT",
"hitPoints": 8,
"criticals": [
{
"id": "crit_001",
"status": "applied"
}
]
}
}Nombre |
Domain |
Descripción |
bo |
TC |
Bonificador de ataque obenido a partir del atacante y el attackMode. |
bo_injury_penalty |
TC |
Penalizacion al BO por heridas. |
bo_action_points_penalty |
TC |
Penalización al BO por puntos de acción. |
bo_pace_penalty |
TC |
Penalización al BO por el movimiento del atacante. |
bo_fatigue_penalty |
TC |
Penalización al BO por fatiga. |
facing |
AT |
Orientación del atacante respecto al defensor. |
bd |
TC |
Bonificador de defensa |
parry |
TC |
Valor de parry del defensor aplicado al atacante |
called_shot |
AT |
TODO |
Declaradas:
-
higher_ground (boolean)
-
surprised (boolean)
-
prone_attacker (boolean)
-
prone_defender (boolean)
-
restricted_quarters (enum: none, close, cramped, tight, confined)
-
positional_attacker (melee only. Enum: none, to_flank, to_rear)
-
positional_defender (melee only. Enum: none, flank, rear)
-
ranged_attack_in_melee (boolean)
-
range (int)
-
flying_defense_bonus (boolean)
-
cover (enum: none, partial, half, full)
-
can_use_shield (boolean)
-
dodge (enum: pasive, partial, full)
Calculadas:
-
off_hand
-
two_handed (melee only)
-
stunned
-
shield_db_bounus
-
shield_block_bonus
-
size_difference
-
addrenal_defense: maniobra para hacer dodge (accion a coste 0 o con concentracion)
-
adrenal_strength: modifica el tamaño del ataque en +1
-
multiple_attacks: reduce la penalizacion por realizar multiples ataques en un turno
-
footwork: reduce la penalizacion por moverse y atacar en el mismo turno
-
reverse_strike: reduce la penalizacion por atacar por los flancos