summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoël Simoneau <simoneaujoel@gmail.com>2025-02-19 11:43:55 -0500
committerJoël Simoneau <simoneaujoel@gmail.com>2025-02-19 11:43:55 -0500
commitcfe74b0842ddc33e281570e9c186868431529a36 (patch)
tree98ca0de7f6c87260413a7762fe843b1d9ec176cf
parent7ad6c3eec0a3dc96c0f001cb5ad0dbf2194b9abd (diff)
downloadvijayanagara-cfe74b0842ddc33e281570e9c186868431529a36.tar.gz
Move_to
-rw-r--r--events.txt4
-rw-r--r--rules.js53
-rw-r--r--tools/gencode.js4
3 files changed, 59 insertions, 2 deletions
diff --git a/events.txt b/events.txt
index 15ac6d8..4316caa 100644
--- a/events.txt
+++ b/events.txt
@@ -336,7 +336,9 @@ SHADED 20
endspace
EVENT 21
- log "NOT IMPLEMENTED"
+ current REBEL_FACTIONS
+ prompt "Move any Troops from Gondwana and Madhyadesh to Delhi."
+ move_to S_DELHI (is_troop(p) && (piece_space(p) === S_GONDWANA || piece_space(p) === S_MADHYADESH))
SHADED 21
log "NOT IMPLEMENTED"
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 ],
]
diff --git a/tools/gencode.js b/tools/gencode.js
index e70794e..fb111bc 100644
--- a/tools/gencode.js
+++ b/tools/gencode.js
@@ -105,6 +105,10 @@ for (let line of fs.readFileSync("events.txt", "utf-8").split("\n")) {
emit([ "shipment", false, 0, line[1], "(p,s)=>" + line.slice(2).join(" ") ])
break
+ case "move_to":
+ emit([ "move_to", line[1], "(p,s)=>" + line.slice(2).join(" ") ])
+ break
+
case "place":
emit([ "place", false, 0, line[1], line[2], line[3] ])
break