summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js53
1 files changed, 52 insertions, 1 deletions
diff --git a/rules.js b/rules.js
index 1e81e63..4e0f149 100644
--- a/rules.js
+++ b/rules.js
@@ -2602,6 +2602,10 @@ function is_ds_unit(p) {
return (is_piece(p, DS, ELITE) || is_piece(p, DS, TROOPS))
}
+function is_troop(p) {
+ return piece_faction(p) === DS && piece_type(p) === TROOPS
+}
+
function is_governor(p) {
return piece_faction(p) === DS && piece_type(p) === ELITE
}
@@ -3818,6 +3822,51 @@ function is_piece_in_event_space(p) {
return piece_space(p) === game.vm.s
}
+// VM: MOVE PIECE
+
+function vm_move_to() {
+ push_summary()
+ game.state = "vm_move_to"
+}
+
+function vm_can_move_to(f) {
+ for (let p = all_first_piece; p <= all_last_piece; ++p)
+ if (f(p))
+ return true
+ return false
+}
+
+states.vm_move_to = {
+ prompt() {
+ let f = vm_inst(2)
+
+ event_prompt()
+ for (let p = all_first_piece; p <= all_last_piece; ++p)
+ if (f(p))
+ gen_action_piece(p)
+
+ view.actions.skip = 1
+ },
+ piece(p) {
+ log_summary_place(p)
+ place_piece(p, vm_inst(1))
+
+ if (!vm_can_move_to(vm_inst(2)))
+ end_vm_move_to(vm_inst(1))
+ },
+ skip() {
+ end_vm_move_to(vm_inst(1))
+ }
+}
+
+function end_vm_move_to(s) {
+ if (game.summary && game.summary.length > 0) {
+ log_space(vm_inst(1), "Move")
+ pop_summary()
+ }
+ vm_next()
+}
+
// VM: PLACE PIECE
function vm_auto_place() {
@@ -4570,7 +4619,9 @@ CODE[20 * 2 + 1] = [
// EVENT 21
CODE[21 * 2 + 0] = [
- [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_current, REBEL_FACTIONS ],
+ [ vm_prompt, "Move any Troops from Gondwana and Madhyadesh to Delhi." ],
+ [ vm_move_to, S_DELHI, (p,s)=>(is_troop(p) && (piece_space(p) === S_GONDWANA || piece_space(p) === S_MADHYADESH)) ],
[ vm_return ],
]