diff --git a/composeApp/src/commonMain/composeResources/drawable/ic_azm_24dp.xml b/composeApp/src/commonMain/composeResources/drawable/ic_azm_24dp.xml
new file mode 100644
index 0000000..8e24054
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/drawable/ic_azm_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/composeApp/src/commonMain/composeResources/drawable/ic_directions_run_24dp.xml b/composeApp/src/commonMain/composeResources/drawable/ic_directions_run_24dp.xml
new file mode 100644
index 0000000..ea2ffe1
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/drawable/ic_directions_run_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/composeApp/src/commonMain/composeResources/drawable/ic_pan_tool_24dp.xml b/composeApp/src/commonMain/composeResources/drawable/ic_pan_tool_24dp.xml
new file mode 100644
index 0000000..af796f6
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/drawable/ic_pan_tool_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index 262bad7..f577fbb 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -153,6 +153,8 @@
Armure
Bonus d'apprentissage
Bonus de PV
+ Réflexe
+ Initiative
Compétences communes
Compétences spéciales
Compétences magiques
@@ -160,12 +162,12 @@
Êtes-vous sûr de vouloir supprimer "%1$s" ?
Les caractéristiques constituent les aptitudes innées d’un personnage comme son intelligence, sa force, son charisme, etc. Elles ne sont pas acquises, mais peuvent être parfois augmentées par un entraînement ou une utilisation réussie. Les caractéristiques des humains normaux varient de 2 (niveau extrêmement bas) à 20 (maximum du potentiel humain), avec une moyenne de 10 ou 11. Plus une caractéristique est élevée plus le personnage est puissant dans cette aptitude.\nÀ la création de votre personnage, répartissez les valeurs suivantes dans les différentes caractéristiques : 15, 15, 13, 11, 10, 9 et 7.
- La Force représente essentiellement la puissance musculaire du personnage. Elle ne décrit pas nécessairement la masse musculaire brute, mais l’efficacité avec laquelle le personnage exerce ses muscles pour accomplir des actions physiques pénibles.\n\n- Bonus aux dégats\n- Athlétisme\n- Lancer\n- Saisie
+ La Force représente essentiellement la puissance musculaire du personnage. Elle ne décrit pas nécessairement la masse musculaire brute, mais l’efficacité avec laquelle le personnage exerce ses muscles pour accomplir des actions physiques pénibles.\n\n- Bonus aux dégats\n- Réflexe\n- Athlétisme\n- Lancer\n- Saisie
La Constitution est une mesure de la ténacité et de la résilience du personnage. Elle sert à résister aux maladies. Mais son aspect le plus important réside dans la détermination du nombre de dommages qu’un personnage peut supporter avant de succomber.\n\n- Point de vie maximum\n- Athlétisme\n- Acrobatie
La Taille est une mesure de la masse du personnage. Elle ne représente pas forcément la taille en centimètres, mais une idée générale de sa masse physique. Un personnage à la TAI élevée peut être très grand et mince, ou petit et massif, ou de taille moyenne en surpoids.\n\n- Bonus aux dégats\n- Point de vie maximum\n- Saisie\n- Intimidation\n- Discrétion (impact négatif)
- L’Intelligence représente la capacité de discernement du personnage. Elle ne mesure pas nécessairement la somme d’informations mémorisées, mais l’aptitude au raisonnement, l’acuité intellectuelle, la capacité à résoudre des problèmes et l’intuition.\n\n- Bonus d'apprentissage\n- Perception\n- Recherche\n- Empathie\n- Baratin\n- Premiers soins
+ L’Intelligence représente la capacité de discernement du personnage. Elle ne mesure pas nécessairement la somme d’informations mémorisées, mais l’aptitude au raisonnement, l’acuité intellectuelle, la capacité à résoudre des problèmes et l’intuition.\n\n- Bonus d'apprentissage\n- Réflexe\n- Perception\n- Recherche\n- Empathie\n- Baratin\n- Premiers soins
Le Pouvoir est une mesure presque intangible de la force de volonté, du dynamisme intérieur et de l’énergie spirituelle. Il représente également le potentiel magique du personnage.\n\n- Points de pouvoir maximum\n- Intimidation
- La Dextérité mesure la coordination œil-main, la vitesse physique et l’agilité générale. La DEX détermine à quelle vitesse un personnage peut agir en combat.\n\n- Initiative\n- Bagarre\n- Esquive\n- Lancer\n- Acrobatie\n- Discrétion\n- Escamotage\n- Premiers soins
+ La Dextérité mesure la coordination œil-main, la vitesse physique et l’agilité générale. La DEX détermine à quelle vitesse un personnage peut agir en combat.\n\n- Initiative\n- Réflexe\n- Bagarre\n- Esquive\n- Lancer\n- Acrobatie\n- Discrétion\n- Escamotage\n- Premiers soins
Il représente plusieurs aspects allant de la grâce à la beauté en passant par l’attraction que le personnage exerce sur les autres. Un personnage avec un CHA élevé se remarque dans une foule en raison d’une intangible combinaison de charme et de présence.\n\n- Empathie\n- Persuasion\n- Persuasion\n- Intimidation\n- Baratin\n- Marchandage\n- Discrétion
Le Déplacement (DEP) est une valeur de jeu qui détermine la distance que peut parcourir un personnage en un round de combat. Tous les humains ont un DEP de 10. Le DEP a une valeur réelle flexible, mais généralement, chaque point de DEP équivaut à un déplacement d’un mètre. En course, un point équivaut à trois mètres.
Les points de vie (PV) sont égaux à la somme CON+TAI du personnage, divisée par deux (arrondie au supérieur). Ils sont soustraits lorsque le personnage subit des dommages. Quand les points de vie tombent à 0, le personnage sombre dans l’inconscience. S'il reste inconscient trop longtemps, il meurt. Tous les points de vie régénèrent naturellement après une nuit de repos.
@@ -174,6 +176,8 @@
Une armure protège son porteur des blessures. Lorsqu’un personnage est touché en combat par une attaque non magique, soustrayez les points d’armure aux points de dégâts infligés. Les dommages au-delà de la protection de l’armure surpassent celle-ci et sont infligés au personnage, réduisant ses points de vie actuels.
Plus un personnage est intelligent, plus il assimile rapidement les connaissances et plus il digère son expérience efficacement. Ce modificateur s'applique au score des compétences nouvellement acquises et aux jets d'expériences. Il est égal à (INT - 10) x 2 avec une valeur minimale de zéro.
Plus un personnage est de bonne constitution, plus son corps se renforce rapidement. Ce modificateur indique le nombre de "PV" maximum que le personnage gagne à chaque progression. Il est égal à CON / 3, arrondi à l'inférieur.
+ Les réflexes représentent la capacité d'un personnage à réagir promptement. Ils ont pour valeur : (FOR+DEX+INT)/3 (arrondis à l'inférieur).
+ L'initiative est la valeur qui détermine l'ordre dans lequel les participants d'un combat jouent. Par défaut elle est égale à leur Dextérité.
Configuration de la table
Nom du joueur
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetail.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetail.kt
index 7f98fdd..ca2f729 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetail.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetail.kt
@@ -35,6 +35,7 @@ import com.pixelized.desktop.lwa.ui.composable.blur.BlurContentController
import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterDetailCharacteristicDialogViewModel
import com.pixelized.desktop.lwa.ui.composable.character.characteristic.CharacterSheetCharacteristicDialogUio
import com.pixelized.desktop.lwa.ui.composable.character.diminished.CharacterSheetDiminishedViewModel
+import com.pixelized.desktop.lwa.ui.overlay.roll.RollAction
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.header.CharacterDetailHeader
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.header.CharacterDetailHeaderUio
import com.pixelized.desktop.lwa.ui.screen.campaign.player.detail.sheet.CharacterDetailSheet
@@ -99,6 +100,12 @@ fun CharacterDetailPanel(
)
}
},
+ onReflex = {
+ scope.launch {
+ val result = roll.showRollOverlay(roll = it)
+ println("result: $result")
+ }
+ },
onCharacteristic = {
scope.launch {
val result = roll.showRollOverlay(roll = it.roll)
@@ -137,6 +144,7 @@ fun CharacterDetailAnimatedPanel(
onDiminished: (characterSheetId: String) -> Unit,
onHp: (characterSheetId: String) -> Unit,
onPp: (characterSheetId: String) -> Unit,
+ onReflex: (RollAction.Uio) -> Unit,
onCharacteristic: (CharacterDetailSheetCharacteristicUio) -> Unit,
onSkill: (CharacterDetailSheetSkillUio) -> Unit,
onUseSkill: (CharacterDetailSheetSkillUio) -> Unit,
@@ -167,6 +175,7 @@ fun CharacterDetailAnimatedPanel(
onDiminished = { onDiminished(it.characterSheetId) },
onHp = { onHp(it.characterSheetId) },
onPp = { onPp(it.characterSheetId) },
+ onReflex = onReflex,
onCharacteristic = onCharacteristic,
onSkill = onSkill,
onUseSkill = onUseSkill,
@@ -189,6 +198,7 @@ fun CharacterDetailContent(
onDiminished: () -> Unit,
onHp: () -> Unit,
onPp: () -> Unit,
+ onReflex: (RollAction.Uio) -> Unit,
onCharacteristic: (CharacterDetailSheetCharacteristicUio) -> Unit,
onSkill: (CharacterDetailSheetSkillUio) -> Unit,
onUseSkill: (CharacterDetailSheetSkillUio) -> Unit,
@@ -210,6 +220,7 @@ fun CharacterDetailContent(
onDiminished = onDiminished,
onHp = onHp,
onPp = onPp,
+ onReflex = onReflex,
)
CharacterDetailSheet(
modifier = Modifier
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetailFactory.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetailFactory.kt
index e446675..662cc0f 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetailFactory.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/CharacterDetailFactory.kt
@@ -24,9 +24,11 @@ import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_cha
import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__damage_bonus
import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__hit_point
import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__hp_grow
+import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__initiative
import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__learning
import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__movement
import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__power_point
+import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__reflex
import lwacharactersheet.composeapp.generated.resources.tooltip__characteristics__charisma
import lwacharactersheet.composeapp.generated.resources.tooltip__characteristics__constitution
import lwacharactersheet.composeapp.generated.resources.tooltip__characteristics__dexterity
@@ -38,9 +40,11 @@ import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteris
import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__bonus_damage
import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__hit_point
import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__hp_grow
+import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__initiative
import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__learning
import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__movement
import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__power_point
+import lwacharactersheet.composeapp.generated.resources.tooltip__sub_characteristics__reflex
import org.jetbrains.compose.resources.getString
import java.text.Collator
@@ -106,6 +110,22 @@ class CharacterDetailFactory(
title = getString(Res.string.character_sheet__sub_characteristics__learning),
description = getString(Res.string.tooltip__sub_characteristics__learning)
),
+ reflex = "${alteredCharacterSheet.reflex}",
+ reflexTooltip = TooltipUio(
+ title = getString(Res.string.character_sheet__sub_characteristics__reflex),
+ description = getString(Res.string.tooltip__sub_characteristics__reflex)
+ ),
+ reflexRoll = RollAction.Uio.BoundedRollActionUio(
+ characterSheetId = characterSheetId,
+ label = getString(Res.string.character_sheet__sub_characteristics__reflex),
+ rollAction = "1d100",
+ rollSuccessValue = alteredCharacterSheet.reflex * 5,
+ ),
+ initiative = "${alteredCharacterSheet.initiative}",
+ initiativeTooltip = TooltipUio(
+ title = getString(Res.string.character_sheet__sub_characteristics__initiative),
+ description = getString(Res.string.tooltip__sub_characteristics__initiative)
+ ),
)
}
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/header/CharacterDetailHeader.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/header/CharacterDetailHeader.kt
index 8e7aeb2..dbf8705 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/header/CharacterDetailHeader.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/detail/header/CharacterDetailHeader.kt
@@ -35,8 +35,8 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.pixelized.desktop.lwa.ui.composable.tooltip.TooltipLayout
import com.pixelized.desktop.lwa.ui.composable.tooltip.TooltipUio
+import com.pixelized.desktop.lwa.ui.overlay.roll.RollAction
import com.pixelized.desktop.lwa.ui.theme.lwa
-import com.pixelized.shared.lwa.model.campaign.Campaign
import lwacharactersheet.composeapp.generated.resources.Res
import lwacharactersheet.composeapp.generated.resources.character_sheet__level
import lwacharactersheet.composeapp.generated.resources.ic_close_24dp
@@ -48,6 +48,9 @@ import lwacharactersheet.composeapp.generated.resources.ic_shield_24dp
import lwacharactersheet.composeapp.generated.resources.ic_skull_24dp
import lwacharactersheet.composeapp.generated.resources.ic_swords_24dp
import lwacharactersheet.composeapp.generated.resources.ic_water_drop_24dp
+import lwacharactersheet.composeapp.generated.resources.ic_pan_tool_24dp
+import lwacharactersheet.composeapp.generated.resources.ic_azm_24dp
+import lwacharactersheet.composeapp.generated.resources.ic_directions_run_24dp
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
@@ -74,6 +77,11 @@ data class CharacterDetailHeaderUio(
val growTooltip: TooltipUio,
val learn: String,
val learnTooltip: TooltipUio,
+ val reflex: String,
+ val reflexTooltip: TooltipUio,
+ val reflexRoll: RollAction.Uio,
+ val initiative: String,
+ val initiativeTooltip: TooltipUio,
)
@OptIn(ExperimentalFoundationApi::class)
@@ -86,6 +94,7 @@ fun CharacterDetailHeader(
onDiminished: () -> Unit,
onHp: () -> Unit,
onPp: () -> Unit,
+ onReflex: (RollAction.Uio) -> Unit,
) {
Column(
modifier = modifier,
@@ -157,7 +166,7 @@ fun CharacterDetailHeader(
}
Row(
modifier = Modifier.padding(horizontal = 16.dp),
- horizontalArrangement = Arrangement.spacedBy(space = 16.dp),
+ horizontalArrangement = Arrangement.spacedBy(space = 10.dp),
) {
TooltipLayout(
tooltip = header.value?.hpTooltip,
@@ -220,6 +229,50 @@ fun CharacterDetailHeader(
Spacer(modifier = Modifier.weight(1f))
+ TooltipLayout(
+ tooltip = header.value?.reflexTooltip,
+ ) {
+ Row(
+ modifier = Modifier
+ .clip(shape = CircleShape)
+ .clickable { header.value?.reflexRoll?.let(onReflex) },
+ verticalAlignment = Alignment.Bottom,
+ ) {
+ Icon(
+ modifier = Modifier
+ .padding(bottom = 4.dp, end = 2.dp)
+ .size(size = iconSize),
+ painter = painterResource(Res.drawable.ic_pan_tool_24dp),
+ contentDescription = null
+ )
+ Text(
+ modifier = Modifier.alignByBaseline(),
+ style = MaterialTheme.typography.h6,
+ color = MaterialTheme.lwa.colorScheme.base.primary,
+ text = header.value?.reflex ?: "",
+ )
+ }
+ }
+ TooltipLayout(
+ tooltip = header.value?.initiativeTooltip,
+ ) {
+ Row(
+ verticalAlignment = Alignment.Bottom,
+ ) {
+ Icon(
+ modifier = Modifier
+ .padding(bottom = 4.dp, end = 2.dp)
+ .size(size = iconSize),
+ painter = painterResource(Res.drawable.ic_azm_24dp),
+ contentDescription = null
+ )
+ Text(
+ modifier = Modifier.alignByBaseline(),
+ style = MaterialTheme.typography.h6,
+ text = header.value?.initiative ?: "",
+ )
+ }
+ }
TooltipLayout(
tooltip = header.value?.movTooltip,
) {
@@ -230,7 +283,7 @@ fun CharacterDetailHeader(
modifier = Modifier
.padding(bottom = 4.dp, end = 2.dp)
.size(size = iconSize),
- painter = painterResource(Res.drawable.ic_near_me),
+ painter = painterResource(Res.drawable.ic_directions_run_24dp),
contentDescription = null,
)
Text(
diff --git a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/AlteredCharacterSheet.kt b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/AlteredCharacterSheet.kt
index 304c4c2..13e1c3f 100644
--- a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/AlteredCharacterSheet.kt
+++ b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/AlteredCharacterSheet.kt
@@ -10,6 +10,7 @@ import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.Characterist
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.GHP
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.HEI
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.HP
+import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.INITIATIVE
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.INT
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.LB
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.LVL
@@ -17,6 +18,7 @@ import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.Characterist
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.PORTRAIT
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.POW
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.PP
+import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.REFLEX
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.STR
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet.CharacteristicId.THUMBNAIL
import com.pixelized.shared.lwa.parser.expression.Expression
@@ -86,12 +88,6 @@ class AlteredCharacterSheet(
val charisma: Int
get() = sheet.charisma + fieldAlterations[CHA].sum()
- val movement: Int
- get() = sheetUseCase.movement() + fieldAlterations[MOV].sum()
-
- val armor: Int
- get() = sheetUseCase.armor() + fieldAlterations[ARMOR].sum()
-
val maxHp: Int
get() = sheetUseCase.maxHp(
constitution = constitution,
@@ -116,6 +112,22 @@ class AlteredCharacterSheet(
val alterations: List
get() = sheet.alterations
+ val movement: Int
+ get() = sheetUseCase.movement() + fieldAlterations[MOV].sum()
+
+ val armor: Int
+ get() = sheetUseCase.armor() + fieldAlterations[ARMOR].sum()
+
+ val reflex: Int
+ get() = sheetUseCase.reflex(
+ strength = strength,
+ dexterity = dexterity,
+ intelligence = intelligence,
+ ) + fieldAlterations[REFLEX].sum()
+
+ val initiative: Int
+ get() = sheetUseCase.initiative(dexterity = dexterity) + fieldAlterations[INITIATIVE].sum()
+
val damageBonus: String
get() {
val initial = sheetUseCase.meleeBonusDamage(
diff --git a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/characterSheet/CharacterSheet.kt b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/characterSheet/CharacterSheet.kt
index b304fac..ba0536e 100644
--- a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/characterSheet/CharacterSheet.kt
+++ b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/model/characterSheet/CharacterSheet.kt
@@ -64,6 +64,8 @@ data class CharacterSheet(
const val PP = "PP"
const val DMG = "DMG"
const val ARMOR = "ARMOR"
+ const val REFLEX = "REFLEX"
+ const val INITIATIVE = "INITIATIVE"
const val LB = "LEARNING"
const val GHP = "HP_GROW"
}
diff --git a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/usecase/CharacterSheetUseCase.kt b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/usecase/CharacterSheetUseCase.kt
index 88152ac..5e88eac 100644
--- a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/usecase/CharacterSheetUseCase.kt
+++ b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/usecase/CharacterSheetUseCase.kt
@@ -11,6 +11,20 @@ class CharacterSheetUseCase {
fun movement(): Int = 10
+ fun reflex(
+ strength: Int,
+ dexterity: Int,
+ intelligence: Int,
+ ): Int {
+ return (strength + dexterity + intelligence) / 3
+ }
+
+ fun initiative(
+ dexterity: Int,
+ ): Int {
+ return dexterity
+ }
+
fun maxHp(
constitution: Int,
height: Int,