summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriainp5 <iain.pearce.ip@gmail.com>2024-10-07 16:55:32 +0100
committeriainp5 <iain.pearce.ip@gmail.com>2024-10-07 16:55:32 +0100
commit1fc8bfad7cfa6028180108e9103e904fdbb6a76f (patch)
tree00f02a047d60e05b919e3731bbef9657d6c337b3
parentb05884c4412a403a8fde4e58d30d96da14a9eee9 (diff)
download1989-dawn-of-freedom-1fc8bfad7cfa6028180108e9103e904fdbb6a76f.tar.gz
Adding Stasi update
-rw-r--r--play.html28
-rw-r--r--play.js22
-rw-r--r--rules.js386
3 files changed, 393 insertions, 43 deletions
diff --git a/play.html b/play.html
index ed0fe1e..6d674a3 100644
--- a/play.html
+++ b/play.html
@@ -25,10 +25,30 @@
<li class="title">TITLE
<li class="separator">
<li data-action="card_event"><span>&#x1f3b4;</span> Event
- <li data-action="card_event"><span>&#x1f3b4;</span> Resolve Opponent Event
- <li data-action="card_campaigning"><span>&#x1F4E3;</span> Place SPs
- <li data-action="card_organizing"><span>&#x1F4AA;</span> Support Check
- <li data-action="card_lobbying"><span>&#x1F9BB;</span> Tiananmen Square Track
+ <!-- <li data-action="card_opp_event"><span>&#x1f3b4;</span> Resolve Opponent Event -->
+ <li data-action="card_influence"><span>&#x1F4E3;</span> Place SPs
+ <li data-action="card_support_check"><span>&#x1F4AA;</span> Support Check
+ <li data-action="card_tst"><span>&#x1F9BB;</span> Tiananmen Square Track
+</menu>
+
+<menu id="popup_opp_event" class="popup">
+ <li class="title">TITLE
+ <li class="separator">
+ <!--<li data-action="card_event"><span>&#x1f3b4;</span> Event -->
+ <li data-action="card_opp_event"><span>&#x1f3b4;</span> Resolve Opponent Event
+ <li data-action="card_influence"><span>&#x1F4E3;</span> Place SPs
+ <li data-action="card_support_check"><span>&#x1F4AA;</span> Support Check
+ <li data-action="card_tst"><span>&#x1F9BB;</span> Tiananmen Square Track
+</menu>
+
+<menu id="popup_ceh_check" class="popup">
+ <li class="title">TITLE
+ <li class="separator">
+ <li data-action="card_ceh"><span>&#x1f3b4;</span> Play with Common European Home
+ <li data-action="card_opp_event"><span>&#x1f3b4;</span> Resolve Opponent Event
+ <li data-action="card_influence"><span>&#x1F4E3;</span> Place SPs
+ <li data-action="card_support_check"><span>&#x1F4AA;</span> Support Check
+ <li data-action="card_tst"><span>&#x1F9BB;</span> Tiananmen Square Track
</menu>
<menu id="popup_select_card" class="popup">
diff --git a/play.js b/play.js
index 31d916f..fcbf6e7 100644
--- a/play.js
+++ b/play.js
@@ -173,13 +173,14 @@ function show_popup_menu(evt, menu_id, target_id, title) {
console.log('show_popup_menu called with evt',evt, 'menu_id',menu_id, 'target_id', target_id, 'title', title)
let show = false
+ console.log(`menu.querySelectorAll("li")`, menu.querySelectorAll("li"))
for (let item of menu.querySelectorAll("li")) {
let action = item.dataset.action
console.log('item', item, 'action', action)
if (action) {
- console.log('in if action')
+ //console.log('in if action')
if (is_card_action(action, target_id)) {
- console.log('in is_card_action')
+ console.log('in is_card_action',)
show = true
item.classList.add("action")
item.classList.remove("disabled")
@@ -222,7 +223,8 @@ function show_popup_menu(evt, menu_id, target_id, title) {
function hide_popup_menu() {
document.getElementById("popup").style.display = "none"
- document.getElementById("popup_select_card").style.display = "none"
+ document.getElementById("popup_ceh_check").style.display = "none"
+ document.getElementById("popup_opp_event").style.display = "none"
}
@@ -266,19 +268,23 @@ function on_click_card(evt) {
if (send_action('card', card)) {
evt.stopPropagation();
}
- } else if (is_action('card_select', card)) {
- console.log('in action card_select')
- show_popup_menu(evt, "popup_select_card", card, cards[card].name)
+ //Check for Common European Home
+ } else if (is_card_action('card_ceh', card)) {
+ show_popup_menu(evt, "popup_ceh_check", card, cards[card].name)
+ } else if (is_card_action('card_opp_event', card)) {
+ console.log('in action card_opp_event')
+ show_popup_menu(evt, "popup_opp_event", card, cards[card].name)
}
else {
- // console.log('send_action failed for card:', card);
+ console.log('in action card_my_event')
+ show_popup_menu(evt, "popup", card, cards[card].name)
}
}
}
function is_action(action) {
//console.log('is_action called with: ', action)
- //console.log('view.actions', view.actions)
+ console.log('view.actions', view.actions)
if (view.actions && view.actions[action])
return true
return false
diff --git a/rules.js b/rules.js
index 520de48..870c061 100644
--- a/rules.js
+++ b/rules.js
@@ -420,7 +420,7 @@ states.choose_card = {
view.prompt = 'No cards remaining: you must pass.'
gen_action('pass')
} else {
- view.prompt = 'Choose a card.'
+ view.prompt = 'Play a card.'
let available_cards
if (game.active === DEM) {
available_cards = game.democrat_hand
@@ -428,11 +428,62 @@ states.choose_card = {
available_cards = game.communist_hand
}
for (let card of available_cards) {
- gen_action('card_select', card)
+ //gen_action('card_event', card)
+
+ if (scoring_cards.includes(card)) {
+ /*view.prompt = 'Play for:'*/
+ gen_action('card_event', card)
+ return
+ }
+
+
+ //Check for Tiananmen Square Track awards special abilities
+ if ((game.active === DEM && cards[card].side !== 'C' && game.dem_tst_position >= 8 && game.com_tst_position < 8 && !game.tst_8) || (game.active === COM && cards[card].side !== 'D' && game.com_tst_position >= 8 && game.dem_tst_position < 8 && !game.tst_8)){
+ gen_action('card_tst_8', card)
+ }
+
+ // Check for Reformer Rehabilitated
+
+ //console.log('game.active', game.active, 'game.playable_cards[67].playable', game.playable_cards[67].playable)
+
+
+ if (card === 67 && game.playable_cards.includes(67)){
+ if (game.active === DEM && (game.dem_tst_position > game.com_tst_position)) {
+ gen_action('card_event', card)
+ }
+ if (game.active === COM && (game.dem_tst_position < game.com_tst_position)) {
+ gen_action('card_event', card)
+ }
+ }
+
+ //Continue with normal logic
+
+ //Check if it is a card with an event which is always playable
+
+ if (cards[card].playable) {
+ get_events(card)
+ }
+
+ // Resolve cards with variable events (not Reformer)
+
+ if (card !== 67 && game.playable_cards.includes(card)) {
+ get_events(card)
+ } /*
+ if ((game.active === DEM && cards[game.played_card].side === 'D' && game.playable_cards[game.played_card].playable === 1) || (game.active === COM && cards[game.played_card].side === 'C' && game.playable_cards[game.played_card].playable ===1) || (cards[game.played_card].side === 'N'&& game.playable_cards[game.played_card].playable ===1)) {
+ gen_action('event')
+ } else if ((game.active === DEM && (cards[game.played_card].side === 'C' && game.playable_cards[game.played_card].playable ===1)) || game.active === COM && (cards[game.played_card].side === 'D' && game.playable_cards[game.played_card].playable ===1)) {
+ gen_action('opp_event')
+ } */
+
+ gen_action('card_influence', card)
+ if (game.active === DEM && game.dem_tst_attempted_this_turn === 0 && game.dem_tst_position <=8 || game.active === COM && game.com_tst_attempted_this_turn === 0 && game.com_tst_position <= 8) {
+ gen_action('card_tst', card)
+ }
+ gen_action('card_support_check', card)
}
}
},
- card_select(card) {
+ /*card_event(card) {
push_undo()
//Check if player is at risk of losing game due to held scoring card
if (!scoring_cards.includes(card)) {
@@ -445,11 +496,111 @@ states.choose_card = {
}
}
select_card(card)
- },
+ },*/
pass() {
log('No cards remaining. Passed')
end_round()
- }
+ },
+ card_event(card) {
+ push_undo()
+ select_card(card)
+ console.log('played event, game.active', game.active, 'game.view_opp_hand', game.view_opp_hand)
+ log_gap(`Played C${cards[game.played_card].number} for the event`)
+ if (scoring_cards.includes(game.played_card)) {game.phase = 0}
+ else {game.phase = 1}
+ game.return = game.active
+ if (switch_events.includes(game.played_card)) {next_player()}
+ game.vm_event = game.played_card
+ goto_vm(game.vm_event)
+ },
+ card_opp_event(card) {
+ push_undo()
+ select_card(card)
+ log_gap(`Played C${cards[game.played_card].number} for the event`)
+ game.phase = 1 /*Do I still need this?*/
+ game.vm_infl_to_do = true
+ game.return = game.active
+ game.vm_event = game.played_card
+ if (auto_resolve_events.includes(game.played_card) || switch_events.includes(game.played_card)) {
+ goto_vm(game.vm_event)}
+ else {
+ next_player()
+ log(`C${game.vm_event}`)
+ goto_vm(game.vm_event)
+ }
+ },
+ card_influence(card) {
+ push_undo()
+ select_card(card)
+ log_gap(`Played C${cards[game.played_card].number} to place SPs`)
+
+
+ // Check if Common European Home played for influence
+ if (game.played_card === 21) {
+ if (game.active === DEM) {
+ game.vp --
+ log('-1 VP')
+ if (check_vp()) {
+ return
+ }
+ } else {
+ game.vp ++
+ log('+1 VP')
+ if (check_vp()) {
+ return
+ }
+ }
+ }
+ // Check if card is opponent card with event that needs to be resolved
+
+ if (cards[game.played_card].playable || game.playable_cards.includes(game.played_card)) {
+ if ((game.active === DEM && cards[game.played_card].side === "C" ) || (game.active === COM && cards[game.played_card].side === "D")) {
+ //game.phase = 1 /*Do I need this? */
+ game.vm_event_to_do = true
+ }
+ }
+
+ // If ABHR - Set AHBR tracker to true
+ if (game.persistent_events.includes(58)) {
+ game.austria_hungary_border_reopened_tracker = true
+ }
+ game.state='add_influence'
+ valid_spaces_infl()
+ },
+ card_tst(card) {
+ push_undo()
+ select_card(card)
+ log_gap(`Played C${cards[game.played_card].number} to the Tiananmen Square Track`)
+ game.state='tiananmen_square_attempt'
+ },
+ card_support_check(card) {
+ push_undo()
+ select_card(card)
+ log_gap(`Played C${cards[game.played_card].number} for support checks`)
+
+ // Check if card is opponent card with event that needs to be resolved
+ /*if (game.phase === 0 && game.active === DEM && cards[game.played_card].side === "C" && game.playable_cards[game.played_card].playable === 1 || game.phase === 0 && game.active === COM && cards[game.played_card].side === "D" && game.playable_cards[game.played_card].playable === 1 ) {
+ game.vm_event_to_do = true
+ }*/
+
+ if (cards[game.played_card].playable || game.playable_cards.includes(game.played_card)) {
+ if ((game.active === DEM && cards[game.played_card].side === "C" ) || (game.active === COM && cards[game.played_card].side === "D")) {
+ game.vm_event_to_do = true
+ }
+ }
+
+ game.available_ops = 2
+ game.state='support_check_prep'
+ valid_spaces_sc()
+ },
+ card_tst_8(card) { /*Play card for ops and event */
+ select_card(card)
+ game.vm_event_to_do = true
+ game.vm_infl_to_do = true
+ game.tst_8 = true
+ game.state = 'vm_tst_8'
+ },
+
/*done () {
game.state = 'play_card'
} */
@@ -2095,9 +2246,79 @@ states.stasi_play_card = {
gen_action('pass')
} else {
view.prompt = `Stasi: you must play ${clean_name(cards[game.stasi_card].name)}.`
- let available_cards = [game.stasi_card]
+ /*let available_cards = [game.stasi_card]
for (let card of available_cards) {
gen_action_card(card)
+ }*/
+ let available_cards
+ if (game.active === DEM) {
+ available_cards = game.democrat_hand
+ } else {
+ available_cards = game.communist_hand
+ }
+ for (let card of available_cards) {
+ //gen_action('card_event', card)
+
+ if (scoring_cards.includes(card)) {
+ /*view.prompt = 'Play for:'*/
+ gen_action('card_event', card)
+ return
+ }
+
+ //Check if Player has Common European Home in hand
+ if (game.active === DEM) {
+ if (game.democrat_hand.includes(21) && cards[card].side === "C") {
+ gen_action('card_ceh', card)
+ }
+ } else {
+ if (game.communist_hand.includes(21) && cards[card].side === "D") {
+ gen_action('card_ceh', card)
+ }
+ }
+
+ //Check for Tiananmen Square Track awards special abilities
+ if ((game.active === DEM && cards[card].side !== 'C' && game.dem_tst_position >= 8 && game.com_tst_position < 8 && !game.tst_8) || (game.active === COM && cards[card].side !== 'D' && game.com_tst_position >= 8 && game.dem_tst_position < 8 && !game.tst_8)){
+ gen_action('card_tst_8', card)
+ }
+
+ // Check for Reformer Rehabilitated
+
+ //console.log('game.active', game.active, 'game.playable_cards[67].playable', game.playable_cards[67].playable)
+
+
+ if (card === 67 && game.playable_cards.includes(67)){
+ if (game.active === DEM && (game.dem_tst_position > game.com_tst_position)) {
+ gen_action('card_event', card)
+ }
+ if (game.active === COM && (game.dem_tst_position < game.com_tst_position)) {
+ gen_action('card_event', card)
+ }
+ }
+
+ //Continue with normal logic
+
+ //Check if it is a card with an event which is always playable
+
+ if (cards[card].playable) {
+ get_events(card)
+ }
+
+ // Resolve cards with variable events (not Reformer)
+
+ if (card !== 67 && game.playable_cards.includes(card)) {
+ get_events(card)
+ } /*
+ if ((game.active === DEM && cards[game.played_card].side === 'D' && game.playable_cards[game.played_card].playable === 1) || (game.active === COM && cards[game.played_card].side === 'C' && game.playable_cards[game.played_card].playable ===1) || (cards[game.played_card].side === 'N'&& game.playable_cards[game.played_card].playable ===1)) {
+ gen_action('event')
+ } else if ((game.active === DEM && (cards[game.played_card].side === 'C' && game.playable_cards[game.played_card].playable ===1)) || game.active === COM && (cards[game.played_card].side === 'D' && game.playable_cards[game.played_card].playable ===1)) {
+ gen_action('opp_event')
+ } */
+
+ gen_action('card_influence', card)
+ if (game.active === DEM && game.dem_tst_attempted_this_turn === 0 && game.dem_tst_position <=8 || game.active === COM && game.com_tst_attempted_this_turn === 0 && game.com_tst_position <= 8) {
+ gen_action('card_tst', card)
+ }
+ gen_action('card_support_check', card)
}
}
},
@@ -2109,24 +2330,7 @@ states.stasi_play_card = {
find_card = game.democrat_hand.indexOf(card);
game.democrat_hand.splice(find_card, 1);
game.available_ops = get_card_ops(card)
- /*
- //Check for events which influence ops
- if (game.persistent_events['sinatra_doctrine'] && game.active === DEM) {
- log('+1 op from C50')
- game.available_ops ++
- }
- if ((game.active === DEM && game.dem_tst_position >= 2 && game.com_tst_position <= 1 && cards[card].ops === 1) || (game.active === COM && game.com_tst_position >=2 && game.dem_tst_position <= 1 && cards[card].ops === 1)) {
- log('+1 op from Tiananmen Square Track')
- game.available_ops ++
- }
- if (game.available_ops > 1 && game.prudence.DEM !== 0) {
- log(`${pluralize(game.prudence.DEM, ' op')} from C8`)
- game.available_ops += game.prudence.DEM
- if (game.available_ops < 1) {
- game.available_ops = 1
- }
- }*/
game.stasi_card = 0
if (game.democrat_hand.includes(21)) {
game.state = 'stasi_resolve_common_european_home'
@@ -2139,6 +2343,120 @@ states.stasi_play_card = {
log('No cards remaining. Passed')
end_round()
},
+ card_ceh(card) {
+ push_undo()
+ select_card(card)
+ game.stasi_card = 0
+ log(`${clean_name(cards[game.played_card].name)} played with Common European Home`)
+ //silent_discard(21)
+ game.vm_infl_to_do = true
+ game.vm_event_to_do = false
+ game.state = 'resolve_opponent_event'
+ },
+
+ card_event(card) {
+ push_undo()
+ select_card(card)
+ game.stasi_card = 0
+ console.log('played event, game.active', game.active, 'game.view_opp_hand', game.view_opp_hand)
+ log_gap(`Played C${cards[game.played_card].number} for the event`)
+ if (scoring_cards.includes(game.played_card)) {game.phase = 0}
+ else {game.phase = 1}
+ game.return = game.active
+ if (switch_events.includes(game.played_card)) {next_player()}
+ game.vm_event = game.played_card
+ goto_vm(game.vm_event)
+ },
+ card_opp_event(card) {
+ push_undo()
+ select_card(card)
+ game.stasi_card = 0
+ log_gap(`Played C${cards[game.played_card].number} for the event`)
+ game.phase = 1 /*Do I still need this?*/
+ game.vm_infl_to_do = true
+ game.return = game.active
+ game.vm_event = game.played_card
+ if (auto_resolve_events.includes(game.played_card) || switch_events.includes(game.played_card)) {
+ goto_vm(game.vm_event)}
+ else {
+ next_player()
+ log(`C${game.vm_event}`)
+ goto_vm(game.vm_event)
+ }
+ },
+ card_influence(card) {
+ push_undo()
+ select_card(card)
+ game.stasi_card = 0
+ log_gap(`Played C${cards[game.played_card].number} to place SPs`)
+
+
+ // Check if Common European Home played for influence
+ if (game.played_card === 21) {
+ if (game.active === DEM) {
+ game.vp --
+ log('-1 VP')
+ if (check_vp()) {
+ return
+ }
+ } else {
+ game.vp ++
+ log('+1 VP')
+ if (check_vp()) {
+ return
+ }
+ }
+ }
+ // Check if card is opponent card with event that needs to be resolved
+
+ if (cards[game.played_card].playable || game.playable_cards.includes(game.played_card)) {
+ if ((game.active === DEM && cards[game.played_card].side === "C" ) || (game.active === COM && cards[game.played_card].side === "D")) {
+ //game.phase = 1 /*Do I need this? */
+ game.vm_event_to_do = true
+ }
+ }
+
+ // If ABHR - Set AHBR tracker to true
+ if (game.persistent_events.includes(58)) {
+ game.austria_hungary_border_reopened_tracker = true
+ }
+ game.state='add_influence'
+ valid_spaces_infl()
+ },
+ card_tst(card) {
+ push_undo()
+ select_card(card)
+ game.stasi_card = 0
+ log_gap(`Played C${cards[game.played_card].number} to the Tiananmen Square Track`)
+ game.state='tiananmen_square_attempt'
+ },
+ card_support_check(card) {
+ push_undo()
+ select_card(card)
+ log_gap(`Played C${cards[game.played_card].number} for support checks`)
+
+ // Check if card is opponent card with event that needs to be resolved
+ /*if (game.phase === 0 && game.active === DEM && cards[game.played_card].side === "C" && game.playable_cards[game.played_card].playable === 1 || game.phase === 0 && game.active === COM && cards[game.played_card].side === "D" && game.playable_cards[game.played_card].playable === 1 ) {
+ game.vm_event_to_do = true
+ }*/
+
+ if (cards[game.played_card].playable || game.playable_cards.includes(game.played_card)) {
+ if ((game.active === DEM && cards[game.played_card].side === "C" ) || (game.active === COM && cards[game.played_card].side === "D")) {
+ game.vm_event_to_do = true
+ }
+ }
+
+ game.available_ops = 2
+ game.state='support_check_prep'
+ valid_spaces_sc()
+ },
+ card_tst_8(card) { /*Play card for ops and event */
+ select_card(card)
+ game.vm_event_to_do = true
+ game.vm_infl_to_do = true
+ game.tst_8 = true
+ game.state = 'vm_tst_8'
+ },
done () {
game.stasi_card = 0
if (game.democrat_hand.includes(21)) {
@@ -3253,14 +3571,14 @@ function find_event(card) {
function get_events(card){
if (cards[card].side === 'D') {
- if (game.active === DEM) {gen_action('event')}
- if (game.active === COM) {gen_action('opp_event')}
+ if (game.active === DEM) {gen_action('card_event', card)}
+ if (game.active === COM) {gen_action('card_opp_event', card)}
}
else if (cards[card].side === 'C') {
- if (game.active === COM) {gen_action('event')}
- if (game.active === DEM) {gen_action('opp_event')}
+ if (game.active === COM) {gen_action('card_event', card)}
+ if (game.active === DEM) {gen_action('card_opp_event', card)}
} else {
- gen_action('event')
+ gen_action('card_event', card)
}
}
@@ -3433,11 +3751,13 @@ function end_round() {
}
// Resolve end action round
-
+ //Stasi check
if(game.round_player === COM && game.persistent_events.includes(13)) {
game.round_player = DEM
if (game.active !== DEM) {
next_player()
+ } else {
+ log_h3('Democratic Action Round')
}
if (game.democrat_hand.includes(game.stasi_card)) {
game.state = 'stasi_play_card'
@@ -3446,11 +3766,15 @@ function end_round() {
game.state = 'choose_card'
}
return
- } else if (game.round_player === COM && game.round === 8) {
+ }
+ //Check if in extra Action Round
+ else if (game.round_player === COM && game.round === 8) {
clear_undo()
game.state = 'end_turn_4_5_4'
return
- } else if (game.round_player===COM) {
+ }
+ //Normal round end
+ else if (game.round_player===COM) {
game.round_player = DEM
if (game.active !== DEM) {
next_player()