summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
Diffstat (limited to 'public')
-rw-r--r--public/common/replay.js33
1 files changed, 23 insertions, 10 deletions
diff --git a/public/common/replay.js b/public/common/replay.js
index b6c5e84..950b244 100644
--- a/public/common/replay.js
+++ b/public/common/replay.js
@@ -92,6 +92,20 @@ function snap_from_state(state) {
return snap
}
+function finish_game_state(state, result, message) {
+ if (typeof rules.finish === "function") {
+ state = rules.finish(state, result, message)
+ } else {
+ state.state = "game_over"
+ state.active = "None"
+ state.result = result
+ state.victory = message
+ state.log.push("")
+ state.log.push(message)
+ }
+ return state
+}
+
function eval_action(s, item, p) {
let [ item_role, item_action, item_arguments ] = item
switch (item_action) {
@@ -101,11 +115,15 @@ function eval_action(s, item, p) {
if (params.mode === "debug")
s.log.push([p, item_role.substring(0,2), item_action, null])
- s.state = "game_over"
- s.active = "None"
- s.victory = item_role + " resigned."
- s.log.push("")
- s.log.push(s.victory)
+ let result = "None"
+ if (roles.length === 2) {
+ for (let r of roles)
+ if (r !== item_role)
+ result = r
+ }
+
+ s = finish_game_state(s, result, role + " resigned.")
+
return s
default:
if (params.mode === "debug")
@@ -151,11 +169,6 @@ function update_replay_view() {
if (params.mode !== "debug")
view.actions = null
- if (viewpoint === "Observer")
- view.game_over = 1
- if (replay_state.state === "game_over")
- view.game_over = 1
-
if (replay.length > 0) {
if (document.body.classList.contains("shift")) {
view.prompt = `[${replay_this}/${replay.length}] ${replay_state.active} / ${replay_state.state}`