summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--digital/io-hub/src/guybrush/strat.c14
-rw-r--r--digital/io-hub/src/guybrush/strat.h4
-rw-r--r--digital/io-hub/src/guybrush/top.c1
3 files changed, 19 insertions, 0 deletions
diff --git a/digital/io-hub/src/guybrush/strat.c b/digital/io-hub/src/guybrush/strat.c
index b18fb74e..ab3c3f8e 100644
--- a/digital/io-hub/src/guybrush/strat.c
+++ b/digital/io-hub/src/guybrush/strat.c
@@ -277,6 +277,20 @@ strat_failure (void)
}
void
+strat_bad_failure (void)
+{
+ switch (strat.last_decision)
+ {
+ default:
+ if (strat.place[strat.last_place].fail_nb < 256 - 20)
+ strat.place[strat.last_place].fail_nb += 20;
+ break;
+ case STRAT_DECISION_UNLOAD:
+ break;
+ }
+}
+
+void
strat_giveup (void)
{
switch (strat.last_decision)
diff --git a/digital/io-hub/src/guybrush/strat.h b/digital/io-hub/src/guybrush/strat.h
index 96649d7d..4f3465c4 100644
--- a/digital/io-hub/src/guybrush/strat.h
+++ b/digital/io-hub/src/guybrush/strat.h
@@ -57,6 +57,10 @@ strat_success (void);
void
strat_failure (void);
+/** Report a really bad failure. */
+void
+strat_bad_failure (void);
+
/** Report a failure of last decision, never try again. */
void
strat_giveup (void);
diff --git a/digital/io-hub/src/guybrush/top.c b/digital/io-hub/src/guybrush/top.c
index de27f28b..eb1cc0a5 100644
--- a/digital/io-hub/src/guybrush/top.c
+++ b/digital/io-hub/src/guybrush/top.c
@@ -337,6 +337,7 @@ FSM_TRANS (TOP_CLAMP_ERROR_DECISION, clamp_blocked,
else
{
strat_clamp_dead ();
+ strat_bad_failure ();
FSM_HANDLE (AI, clamp_is_dead);
return FSM_NEXT (TOP_CLAMP_ERROR_DECISION, clamp_blocked, dead);
}