summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rules.js111
-rw-r--r--tools/gendata.js2
2 files changed, 59 insertions, 54 deletions
diff --git a/rules.js b/rules.js
index 31ac8fd..6712f44 100644
--- a/rules.js
+++ b/rules.js
@@ -740,7 +740,7 @@ states.cavalry = {
if (game.cav.next)
game.state = game.cav.next
else
- end_card()
+ goto_eligible()
}
}
@@ -891,12 +891,8 @@ states.govern_space = {
}
if (has_piece(game.cmd.where, DS, ELITE) && game.cmd.count[1] < 2) {
- for (let p of iter_faction_pieces(BK, ELITE))
- if (piece_space(p) === game.cmd.where && !is_rebel(p))
- gen_action_piece(p)
- for (let p of iter_faction_pieces(VE, ELITE))
- if (piece_space(p) === game.cmd.where && !is_rebel(p))
- gen_action_piece(p)
+ gen_action_obedient_in_space(game.cmd.where, BK)
+ gen_action_obedient_in_space(game.cmd.where, VE)
}
},
piece(p) {
@@ -949,14 +945,13 @@ states.march_space = {
view.where = game.cmd.where
view.actions.next = 1
- for (let p of iter_faction_movable(DS)) {
+ for_each_movable(DS, p => {
if (
set_has(SPACES[game.cmd.where].adjacent, piece_space(p)) &&
!set_has(game.cmd.pieces, p)
)
gen_action_piece(p)
- }
-
+ })
},
piece(p) {
log_summary_move_from(p)
@@ -1330,9 +1325,9 @@ function can_amass() {
}
function can_mi_attack() {
- let first = first_piece[MI][TROOPS]
- let last = last_piece[MI][TROOPS]
- for (let p = first; p <= last; ++p)
+ let p0 = first_piece[MI][TROOPS]
+ let p1 = last_piece[MI][TROOPS]
+ for (let p = p0; p <= p1; ++p)
if (piece_space(p) >= 0)
return true
return false
@@ -1404,9 +1399,15 @@ function to_obedient(p) {
}
function to_obedient_space(s) {
- for (let p of iter_rebel_elite())
+ to_obedient_space_faction(s, BK)
+ to_obedient_space_faction(s, VE)
+}
+
+function to_obedient_space_faction(s, faction) {
+ for_each_piece(faction, ELITE, p => {
if (piece_space(p) === s)
to_obedient(p)
+ })
}
function to_rebel(p) {
@@ -1416,9 +1417,10 @@ function to_rebel(p) {
}
function to_rebel_space(s, faction) {
- for (let p of iter_faction_pieces(faction, ELITE))
+ for_each_piece(faction, ELITE, p => {
if (piece_space(p) === s)
to_rebel(p)
+ })
}
function update_rebel(p, s) {
@@ -1427,23 +1429,30 @@ function update_rebel(p, s) {
to_rebel(p)
}
+function gen_action_obedient_in_space(s, faction) {
+ for_each_piece(faction, ELITE, p => {
+ if (piece_space(p) === s && !is_rebel(p))
+ gen_action_piece(p)
+ })
+}
+
/* MISC SPACE + PIECE QUERIES */
function count_pieces(s, faction, type) {
let n = 0
- for (let p of iter_faction_pieces(faction, type))
+ for_each_piece(faction, type, p => {
if (piece_space(p) === s)
++n
+ })
return n
}
function count_pieces_on_map(faction, type) {
- let first = first_piece[faction][type]
- let last = last_piece[faction][type]
let n = 0
- for (let p = first; p <= last; ++p)
+ for_each_piece(faction, type, p => {
if (piece_space(p) >= 0)
++n
+ })
return n
}
@@ -1479,7 +1488,9 @@ function has_majority(s) {
}
function find_piece(s, faction, type) {
- for (let p of iter_faction_pieces(faction, type))
+ let p0 = first_piece[faction][type]
+ let p1 = last_piece[faction][type]
+ for (let p = p0; p <= p1; ++p)
if (piece_space(p) === s)
return p
return -1
@@ -1490,34 +1501,30 @@ function has_piece(s, faction, type) {
}
function has_unmoved_piece(s, faction) {
- for (let p of iter_faction_movable(faction))
+ let unmoved = false
+ for_each_movable(faction, p => {
if (piece_space(p) === s)
if (!game.cmd.pieces || game.cmd.pieces.length === 0)
- return true
+ unmoved = true
else if (!set_has(game.cmd.pieces, p))
- return true
- return false
+ unmoved = true
+ })
+ return unmoved
}
function gen_place_piece(faction, type) {
- let can_place = false
- for (let p of iter_faction_pieces(faction, type)) {
+ for_each_piece(faction, type, p => {
if (piece_space(p) === AVAILABLE) {
gen_action_piece(p)
- can_place = true
- // if (type === DISC)
- // break
}
- }
- return can_place
+ })
}
function move_all_faction_piece_from(faction, type, from, to) {
- let first = first_piece[faction][type]
- let last = last_piece[faction][type]
- for (let p = first; p <= last; ++p)
+ for_each_piece(faction, type, p => {
if (piece_space(p) === from)
set_piece_space(p, to)
+ })
}
function is_selected_cmd_space(s) {
@@ -1681,9 +1688,10 @@ states.return_troops = {
if (game.inf_shift.n > 0) {
view.prompt = "Deccan Influence dwindles: Return troops to the influence track."
- for (let p of iter_faction_pieces(game.current, ELITE))
+ for_each_piece(game.current, ELITE, p => {
if (piece_space(p) >= 0 && piece_space(p) <= S_PUNJAB)
gen_action_piece(p)
+ })
}
else {
view.prompt = "Deccan Influence dwindles: Done."
@@ -2208,30 +2216,27 @@ function object_group_by(items, callback) {
return groups
}
-/* GENERATORS */
+// === ITERATORS AND ACTION GENERATORS ===
-function* iter_faction_pieces(faction, type) {
- let first = first_piece[faction][type]
- let last = last_piece[faction][type]
- for (let p = first; p <= last; ++p)
- yield p;
+function for_each_piece(faction, type, f) {
+ let p0 = first_piece[faction][type]
+ let p1 = last_piece[faction][type]
+ for (let p = p0; p <= p1; ++p)
+ f(p)
}
-function* iter_faction_movable(faction) {
- if (faction === DS) {
- yield* iter_faction_pieces(DS, ELITE)
- yield* iter_faction_pieces(DS, TROOPS)
- } else {
- yield* iter_faction_pieces(faction, ELITE)
- }
-}
+function for_each_movable(faction, f) {
+ if (faction === BK)
+ for_each_piece(BK, ELITE, f)
+ else if (faction === VE)
+ for_each_piece(BK, ELITE, f)
+ else if (faction === DS) {
+ for_each_piece(DS, TROOPS, f)
+ for_each_piece(DS, ELITE, f)
-function* iter_rebel_elite() {
- yield* iter_faction_pieces(BK, ELITE)
- yield* iter_faction_pieces(VE, ELITE)
+ }
}
-
// === CONST ===
// Factions
diff --git a/tools/gendata.js b/tools/gendata.js
index 0828f7e..21418e1 100644
--- a/tools/gendata.js
+++ b/tools/gendata.js
@@ -15,7 +15,7 @@ const TROOPS = 2
// Creating cards
const IMAP = { D: DS, B: BK, V: VE }
-let order = null
+let order = []
data.card_title = [ null ]
data.card_order = [ null ]
data.card_flavor = []