summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--events.txt7
-rw-r--r--rules.js77
2 files changed, 75 insertions, 9 deletions
diff --git a/events.txt b/events.txt
index 3a27b50..c348c54 100644
--- a/events.txt
+++ b/events.txt
@@ -625,10 +625,13 @@ SHADED 33
resources_opt VE (-Math.floor(game.resources[VE]/2))
EVENT 34
- log "NOT IMPLEMENTED"
+ current VE
+ steal VE BK 2
+ steal_cavalry VE BK 2
SHADED 34
- log "NOT IMPLEMENTED"
+ current BK
+ conspire_trade
EVENT 35
current REBEL_FACTIONS
diff --git a/rules.js b/rules.js
index 8de4676..a1eab39 100644
--- a/rules.js
+++ b/rules.js
@@ -266,7 +266,7 @@ exports.setup = function (seed, scenario, _options) {
}
function setup_deck() {
- game.deck = [ 38, 4, 12, 13, 6, 7, 21, 28, 29, 30, 31 ]
+ game.deck = [ 4, 12, 13, 6, 34, 7, 21, 28, 29, 30, 31 ]
}
function setup_standard() {
@@ -2933,6 +2933,12 @@ function gen_take_cavalry(faction) {
return can_place
}
+function gen_take_faction_cavalry(faction) {
+ for (let c = 0; c <= LAST_CAVALRY; ++c)
+ if (game.cavalry[c] === faction)
+ gen_action_token(c)
+ }
+
function set_cavalry_faction(c, f) {
game.cavalry[c] = f
}
@@ -2956,6 +2962,10 @@ function has_cavalry(faction) {
return find_cavalry(faction) != -1
}
+function n_cavalry(faction) {
+ return game.cavalry.filter(c => c === faction).length
+}
+
function use_cavalry(faction) {
let c = find_cavalry(faction)
game.cavalry[c] = AVAILABLE
@@ -4323,7 +4333,6 @@ states.vm_steal = {
// VM : CAVALRY OR RESOURCES
function vm_cav_resources() {
- push_undo()
push_summary()
game.vm.count = vm_inst(1)
game.state = "vm_cav_resources"
@@ -4356,6 +4365,39 @@ function tick_cav_resources() {
}
}
+function vm_steal_cavalry() {
+ game.state = "vm_steal_cavalry"
+}
+
+states.vm_steal_cavalry = {
+ prompt() {
+ let f1 = vm_operand(1)
+ let f2 = vm_operand(2)
+ let n = Math.min(vm_operand(3), n_cavalry(f2))
+ if (n == 0) {
+ event_prompt(`${faction_name[f2]} has no Cavalry token.`)
+ view.actions.skip = 1
+ } else {
+ event_prompt(`Steal ${n} Calvary token from ${faction_name[f2]}.`)
+ gen_take_faction_cavalry(f2)
+ }
+ },
+ token(c) {
+ let f2 = vm_operand(2)
+ let n = Math.min(vm_operand(3), n_cavalry(f2))
+ for (let i = 0; i < n; ++i) {
+ c = find_cavalry(f2)
+ set_cavalry_faction(c, game.current)
+ }
+ log(`${faction_name[game.current]} steals ${n} Cavalry token from ${faction_name[f2]}.`)
+ vm_next()
+ },
+ skip() {
+ vm_next()
+ }
+}
+
+
// VM : REBEL
function vm_to_rebel() {
@@ -4459,6 +4501,27 @@ function vm_free_rally() {
goto_rally_space()
}
+// VM: MIX
+
+function vm_conspire_trade() { game.state = "vm_conspire_trade" }
+
+states.vm_conspire_trade = {
+ prompt() {
+ event_prompt("Conspire or Trade")
+ view.actions.conspire = can_conspire() ? 1 : 0
+ view.actions.trade = can_trade() ? 1 : 0
+ },
+ conspire() {
+ push_undo()
+ goto_conspire()
+ },
+ trade() {
+ push_undo()
+ goto_trade()
+ }
+}
+
+
// VM: EVENT_4
function vm_event_4() {
@@ -4914,9 +4977,6 @@ CODE[12 * 2 + 1] = [
// EVENT 13
CODE[13 * 2 + 0] = [
- [ vm_add_influence, VE ],
- [ vm_add_influence, VE ],
- [ vm_add_influence, VE ],
[ vm_current, VE ],
[ vm_asm, ()=>game.vm.count = (Math.min((4 - game.inf[VE]), 2) * 2) ],
[ vm_add_influence, VE ],
@@ -5416,13 +5476,16 @@ CODE[33 * 2 + 1] = [
// EVENT 34
CODE[34 * 2 + 0] = [
- [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_current, VE ],
+ [ vm_steal, VE, BK, 2 ],
+ [ vm_steal_cavalry, VE, BK, 2 ],
[ vm_return ],
]
// SHADED 34
CODE[34 * 2 + 1] = [
- [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_current, BK ],
+ [ vm_conspire_trade ],
[ vm_return ],
]