Skip to content

Commit

Permalink
Vary combat chance randomly
Browse files Browse the repository at this point in the history
This adds slight variance to the numbers, which makes sure the combat feels even more dynamic, and there is no set order of best moves, ever.
  • Loading branch information
filiph committed Feb 8, 2021
1 parent e97cdf0 commit d2b5170
Show file tree
Hide file tree
Showing 70 changed files with 162 additions and 79 deletions.
2 changes: 2 additions & 0 deletions edgehead/lib/director/situational/leroy_quits.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,5 @@ final _leroyQuits = Rule(_id++, 2, true, (ApplicabilityContext c) {
b.currentRoomName = 'bleeds_trader_hut';
});
});

// TODO: leroy simply quits when being too long with Aren
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/disarm_kick.dart
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class DisarmKick extends EnemyTargetAction with CombatCommandPath {
@override
ReasonedSuccessChance getSuccessChance(
Actor a, Simulation sim, WorldState world, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.6, [
return getCombatMoveChance(a, enemy, 0.6, world.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
const Bonus(90, CombatReason.targetHasAllEyesDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class SmackWithHarmlessItem extends EnemyTargetAction with CombatCommandPath {
@override
ReasonedSuccessChance getSuccessChance(
Actor a, Simulation sim, WorldState world, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.3, [
return getCombatMoveChance(a, enemy, 0.3, world.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
const Bonus(40, CombatReason.targetHasAllEyesDisabled),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_bite.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ ReasonedSuccessChance computeStartBiteAtBodyPartGenerator(
math.max(bodyPart.swingSurfaceLeft, bodyPart.swingSurfaceRight) / 10, 1);
final base = minBase + maxBase * relativeBiteSurface;

return getCombatMoveChance(a, enemy, base, [
return getCombatMoveChance(a, enemy, base, w.statefulRandomState, [
const Modifier(30, CombatReason.dexterity),
const Penalty(30, CombatReason.targetHasShield),
const Modifier(30, CombatReason.balance),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const String startBluntSwingAtHeadHelpMessage =

ReasonedSuccessChance computeBluntSwingAtHeadPlayer(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.2, [
return getCombatMoveChance(a, enemy, 0.2, w.statefulRandomState, [
const Modifier(30, CombatReason.dexterity),
const Penalty(30, CombatReason.targetHasShield),
const Modifier(20, CombatReason.balance),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const String startBreakNeckOnGroundHelpMessage =

ReasonedSuccessChance computeBreakNeckOnGroundChance(
Actor a, Simulation sim, WorldState w, Actor enemy) =>
getCombatMoveChance(a, enemy, 0.6, [
getCombatMoveChance(a, enemy, 0.6, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
...disabledModifiers,
]);
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_clash.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import 'package:edgehead/src/predetermined_result.dart';

ReasonedSuccessChance computeStartClash(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.8, [
return getCombatMoveChance(a, enemy, 0.8, w.statefulRandomState, [
const Modifier(95, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
...disabledModifiers,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const String startCrackSkullOnGroundHelpMessage =

ReasonedSuccessChance computeCrackSkullOnGroundChance(
Actor a, Simulation sim, WorldState w, Actor enemy) =>
getCombatMoveChance(a, enemy, 0.6, [
getCombatMoveChance(a, enemy, 0.6, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
Penalty(a.currentDamageCapability.length >= 2 ? 40 : 90,
CombatReason.targetHasWeapon),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_feint_slash.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import 'package:meta/meta.dart';

ReasonedSuccessChance computeStartFeint(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.8, const [
return getCombatMoveChance(a, enemy, 0.8, w.statefulRandomState, const [
Modifier(95, CombatReason.dexterity),
Modifier(50, CombatReason.balance),
...disabledModifiers,
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_leap.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const String startLeapHelpMessage =

ReasonedSuccessChance computeStartLeap(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.2, [
return getCombatMoveChance(a, enemy, 0.2, w.statefulRandomState, [
const Modifier(70, CombatReason.balance),
const Modifier(50, CombatReason.height),
...disabledModifiers,
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_pull_down.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import 'package:edgehead/src/predetermined_result.dart';

ReasonedSuccessChance computeStartPullDown(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.05, [
return getCombatMoveChance(a, enemy, 0.05, w.statefulRandomState, [
const Modifier(20, CombatReason.dexterity),
const Modifier(10, CombatReason.balance),
...disabledModifiers,
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_punch.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const String startPunchHelpMessage =

ReasonedSuccessChance computeStartPunch(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.7, [
return getCombatMoveChance(a, enemy, 0.7, w.statefulRandomState, [
const Modifier(75, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
...disabledModifiers,
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_punch_on_ground.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const String startPunchOnGroundHelpMessage =

ReasonedSuccessChance computeStartPunchOnGround(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.7, [
return getCombatMoveChance(a, enemy, 0.7, w.statefulRandomState, [
const Modifier(75, CombatReason.dexterity),
...disabledModifiers,
]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ ReasonedSuccessChance computeStartSlashAtBodyPartGenerator(
math.max(bodyPart.swingSurfaceLeft, bodyPart.swingSurfaceRight) / 10, 1);
final base = minBase + maxBase * relativeSlashSurface;

return getCombatMoveChance(a, enemy, base, const [
return getCombatMoveChance(a, enemy, base, w.statefulRandomState, const [
Modifier(30, CombatReason.dexterity),
Modifier(30, CombatReason.balance),
Modifier(30, CombatReason.weaponReach),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_strike_down.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ ReasonedSuccessChance computeStartStrikeDownPlayer(
WeaponType.dagger.defaultLength;
final base = (didRecentlyRoll ? 0.8 : 0.4) - (hasShortBlade ? 0.1 : 0);

return getCombatMoveChance(a, enemy, base, [
return getCombatMoveChance(a, enemy, base, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Penalty(30, CombatReason.targetHasShield),
const Modifier(30, CombatReason.balance),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_sweep_feet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import 'package:edgehead/src/predetermined_result.dart';
ReasonedSuccessChance computeStartSweepFeet(
Actor a, Simulation sim, WorldState w, Actor enemy) {
assert(a.isPlayer);
return getCombatMoveChance(a, enemy, 0.6, [
return getCombatMoveChance(a, enemy, 0.6, w.statefulRandomState, [
const Modifier(70, CombatReason.dexterity),
const Modifier(70, CombatReason.balance),
const Bonus(30, CombatReason.targetHasOneLegDisabled),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_throw_harmless.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const String startThrowHarmlessHelpMessage =

ReasonedSuccessChance computeThrowHarmlessPlayer(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.2, [
return getCombatMoveChance(a, enemy, 0.2, w.statefulRandomState, [
const Modifier(30, CombatReason.dexterity),
const Penalty(30, CombatReason.targetHasShield),
const Modifier(10, CombatReason.balance),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_throw_rock.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const String startThrowRockHelpMessage =

ReasonedSuccessChance computeThrowRockPlayer(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.3, [
return getCombatMoveChance(a, enemy, 0.3, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Penalty(30, CombatReason.targetHasShield),
const Modifier(20, CombatReason.balance),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ ReasonedSuccessChance computeThrowThrustingWeaponPlayer(
final hasDagger =
a.currentWeapon?.damageCapability?.type == WeaponType.dagger ?? false;
final hasThrowingWeapon = hasSpear || hasDagger;
return getCombatMoveChance(a, enemy, hasThrowingWeapon ? 0.3 : 0.01, [
return getCombatMoveChance(
a, enemy, hasThrowingWeapon ? 0.3 : 0.01, w.statefulRandomState, [
Modifier(hasThrowingWeapon ? 20 : 10, CombatReason.dexterity),
const Penalty(20, CombatReason.targetHasShield),
Modifier(hasThrowingWeapon ? 20 : 10, CombatReason.balance),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_thrust.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ ReasonedSuccessChance computeThrustAtBodyPartChance(
const maxBase = 0.6;
final base = lerpDouble(bodyPart.thrustSurface, 0, 8, minBase, maxBase);

return getCombatMoveChance(a, enemy, base, [
return getCombatMoveChance(a, enemy, base, w.statefulRandomState, [
const Modifier(30, CombatReason.dexterity),
const Modifier(30, CombatReason.weaponReach),
const Penalty(30, CombatReason.targetHasShield),
Expand Down
2 changes: 1 addition & 1 deletion edgehead/lib/src/fight/actions/start_thrust_on_ground.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const String startThrustOnGroundHelpMessage =
ReasonedSuccessChance computeStartThrustOnGroundPlayer(
Actor a, Simulation sim, WorldState w, Actor enemy) {
assert(a.isPlayer);
return getCombatMoveChance(a, enemy, 0.5, [
return getCombatMoveChance(a, enemy, 0.5, w.statefulRandomState, [
const Modifier(20, CombatReason.dexterity),
const Penalty(60, CombatReason.targetHasShield),
const Bonus(90, CombatReason.targetHasAllEyesDisabled),
Expand Down
3 changes: 2 additions & 1 deletion edgehead/lib/src/fight/actions/wrestle_weapon_on_ground.dart
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ class WrestleWeaponOnGround extends EnemyTargetAction with CombatCommandPath {
@override
ReasonedSuccessChance getSuccessChance(
Actor a, Simulation sim, WorldState world, Actor enemy) {
return getCombatMoveChance(a, enemy, a.holdsSomeWeapon ? 0.2 : 0.4, [
return getCombatMoveChance(
a, enemy, a.holdsSomeWeapon ? 0.2 : 0.4, world.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Bonus(90, CombatReason.targetHasAllEyesDisabled),
]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import 'package:edgehead/src/fight/fight_situation.dart';

ReasonedSuccessChance computeDodgeBite(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.5, [
return getCombatMoveChance(a, enemy, 0.5, w.statefulRandomState, [
const Modifier(60, CombatReason.dexterity),
const Modifier(50, CombatReason.balance),
const Bonus(50, CombatReason.targetHasOneLegDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ class ImpaleBiter extends OtherActorAction {
@override
ReasonedSuccessChance getSuccessChance(
Actor a, Simulation sim, WorldState w, Actor enemy) {
final chance = getCombatMoveChance(a, enemy, 0.3, [
final chance = getCombatMoveChance(a, enemy, 0.3, w.statefulRandomState, [
const Modifier(40, CombatReason.dexterity),
const Modifier(30, CombatReason.height),
const Modifier(20, CombatReason.balance),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'package:edgehead/src/fight/common/defense_situation.dart';

ReasonedSuccessChance computeJumpBackBite(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.9, [
return getCombatMoveChance(a, enemy, 0.9, w.statefulRandomState, [
const Modifier(90, CombatReason.dexterity),
const Modifier(10, CombatReason.balance),
const Bonus(30, CombatReason.targetHasOneLegDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:edgehead/src/fight/counter_attack/counter_attack_situation.dart'

ReasonedSuccessChance computeShieldBlockBite(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.6, [
return getCombatMoveChance(a, enemy, 0.6, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
const Bonus(50, CombatReason.targetHasSecondaryArmDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'package:edgehead/src/fight/common/defense_situation.dart';

ReasonedSuccessChance computeDefensiveParryBluntSwing(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.9, [
return getCombatMoveChance(a, enemy, 0.9, w.statefulRandomState, [
const Modifier(95, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
...disabledModifiers,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:edgehead/src/fight/counter_attack/counter_attack_situation.dart'

ReasonedSuccessChance computeDodgeBluntSwing(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.4, [
return getCombatMoveChance(a, enemy, 0.4, w.statefulRandomState, [
const Modifier(60, CombatReason.dexterity),
const Modifier(50, CombatReason.balance),
const Bonus(50, CombatReason.targetHasOneLegDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:edgehead/src/fight/common/defense_situation.dart';

ReasonedSuccessChance computeJumpBackBluntSwing(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.9, [
return getCombatMoveChance(a, enemy, 0.9, w.statefulRandomState, [
const Modifier(90, CombatReason.dexterity),
const Modifier(10, CombatReason.balance),
const Bonus(30, CombatReason.targetHasOneLegDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:edgehead/src/fight/counter_attack/counter_attack_situation.dart'

ReasonedSuccessChance computeParryBluntSwing(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.6, [
return getCombatMoveChance(a, enemy, 0.6, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Modifier(70, CombatReason.balance),
...disabledModifiers,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import 'package:edgehead/src/fight/fight_situation.dart';

ReasonedSuccessChance computeRollAwayFromBluntSwing(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.5, [
return getCombatMoveChance(a, enemy, 0.5, w.statefulRandomState, [
const Modifier(90, CombatReason.dexterity),
const Modifier(10, CombatReason.balance),
const Bonus(20, CombatReason.targetHasOneLegDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:edgehead/src/fight/counter_attack/counter_attack_situation.dart'

ReasonedSuccessChance computeShieldBlockBluntSwing(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.7, [
return getCombatMoveChance(a, enemy, 0.7, w.statefulRandomState, [
const Modifier(50, CombatReason.dexterity),
const Modifier(30, CombatReason.balance),
const Bonus(50, CombatReason.targetHasSecondaryArmDisabled),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'package:edgehead/src/fight/counter_attack/counter_attack_situation.dart'

ReasonedSuccessChance computeCounterClash(
Actor a, Simulation sim, WorldState w, Actor enemy) {
return getCombatMoveChance(a, enemy, 0.2, const [
return getCombatMoveChance(a, enemy, 0.2, w.statefulRandomState, const [
Modifier(20, CombatReason.dexterity),
Modifier(20, CombatReason.balance),
...disabledModifiers,
Expand Down
Loading

0 comments on commit d2b5170

Please sign in to comment.