diff options
author | Tor Andersson <tor@ccxvii.net> | 2021-07-20 20:38:47 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2022-11-16 19:19:39 +0100 |
commit | 783823b98b2df65a1ce55ef43f0fd5dbebdcb8a5 (patch) | |
tree | 12644735cbeecc8f87cbe7b80e46886a5e2feeeb | |
parent | 022e525c09f2d724a55d2a4400d682c61aed1ade (diff) | |
download | crusader-rex-783823b98b2df65a1ce55ef43f0fd5dbebdcb8a5.tar.gz |
crusader: Rewrite logic of revealing and hiding blocks in battle.
-rw-r--r-- | rules.js | 19 | ||||
-rw-r--r-- | ui.js | 20 |
2 files changed, 23 insertions, 16 deletions
@@ -2129,7 +2129,9 @@ function start_combat() { game.halfhit = null; game.storming = []; game.sallying = []; - game.is_field_battle = 0; + + game.show_castle = 0; + game.show_field = 0; if (is_castle_town(game.where)) { if (!is_under_siege(game.where)) { @@ -2169,7 +2171,8 @@ function end_combat() { delete game.castle_owner; delete game.storming; delete game.sallying; - delete game.is_field_battle; + delete game.show_castle; + delete game.show_field; game.where = null; game.flash = ""; game.combat_round = 0; @@ -2237,7 +2240,6 @@ function print_retreat_summary() { } function goto_regroup() { - game.is_field_battle = 0; lift_siege(game.where); console.log("REGROUP", game.active); if (!is_under_siege(game.where)) @@ -2309,7 +2311,6 @@ states.regroup_to = { // COMBAT ROUND function next_combat_round() { - game.is_field_battle = 0; console.log("NEXT COMBAT ROUND"); print_retreat_summary(); if (game.jihad === game.where && game.combat_round === 1) @@ -2745,7 +2746,6 @@ function pump_battle_step(is_candidate_attacker, is_candidate_defender) { // FIELD BATTLE function goto_field_battle() { - game.is_field_battle = 1; resume_field_battle(); } @@ -2766,6 +2766,7 @@ function resume_field_battle() { console.log("FIELD BATTLE WON BY ATTACKER", game.active); print_retreat_summary(); log("Field battle won by " + game.active + "."); + game.show_field = 0; return goto_regroup(); } @@ -2774,6 +2775,7 @@ function resume_field_battle() { console.log("FIELD BATTLE WON BY DEFENDER", game.active); print_retreat_summary(); log("Field battle won by " + game.active + "."); + game.show_field = 0; return goto_regroup(); } @@ -2797,6 +2799,7 @@ function resume_field_battle() { } game.state = 'field_battle'; + game.show_field = 1; pump_battle_step(is_field_attacker, is_field_defender); } @@ -2845,6 +2848,7 @@ states.field_battle = { function goto_siege_battle() { game.attacker[game.where] = besieging_player(game.where); console.log("SIEGE BATTLE", game.attacker[game.where]); + game.show_castle = 1; resume_siege_battle(); } @@ -3638,8 +3642,8 @@ function make_battle_view() { halfhit: game.halfhit, flash: game.flash, round: game.combat_round, - show_castle: is_storming, - show_field: is_field_battle || is_sallying, + show_castle: game.show_castle, + show_field: game.show_field, }; if (is_under_siege(game.where) && !is_contested_battle_field(game.where)) @@ -3659,7 +3663,6 @@ function make_battle_view() { for (let b in BLOCKS) if (game.location[b] === game.where & block_owner(b) === owner && fn(b)) cell.push(b) - // cell.sort((a,b) => compare_block_initiative(a[0], b[0])); } fill_cell(battle.FR, FRANKS, b => is_reserve(b)); @@ -671,6 +671,10 @@ function update_battle() { if (game.battle.jihad === block_owner(block)) class_name += " jihad"; + if (game.battle.sallying.includes(block)) + show = true; + if (game.battle.storming.includes(block)) + show = true; if (show || block_owner(block) === player) { class_name += " known"; ui.battle_block[block].className = class_name; @@ -690,21 +694,21 @@ function update_battle() { } if (player === FRANKS) { - fill_cell("FR", game.battle.FR, true); - fill_cell("FC", game.battle.FC, true); - fill_cell("FF", game.battle.FF, game.battle.show_castle); // saracens in frank castle - fill_cell("EF", game.battle.SF, game.battle.show_field); // saracens in field battle - fill_cell("EC", game.battle.SC, game.battle.show_castle); // saracens in saracen castle fill_cell("ER", game.battle.SR, false); + fill_cell("EC", game.battle.SC, game.battle.show_castle); + fill_cell("EF", game.battle.SF, game.battle.show_field); + fill_cell("FF", game.battle.FF, game.battle.show_field); + fill_cell("FC", game.battle.FC, game.battle.show_castle); + fill_cell("FR", game.battle.FR, false); document.getElementById("FC").className = "c" + game.battle.FCS; document.getElementById("EC").className = "c" + game.battle.SCS; } else { fill_cell("ER", game.battle.FR, false); fill_cell("EC", game.battle.FC, game.battle.show_castle); fill_cell("EF", game.battle.FF, game.battle.show_field); - fill_cell("FF", game.battle.SF, game.battle.show_castle); - fill_cell("FC", game.battle.SC, true); - fill_cell("FR", game.battle.SR, true); + fill_cell("FF", game.battle.SF, game.battle.show_field); + fill_cell("FC", game.battle.SC, game.battle.show_castle); + fill_cell("FR", game.battle.SR, false); document.getElementById("EC").className = "c" + game.battle.FCS; document.getElementById("FC").className = "c" + game.battle.SCS; } |