summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorJoël Simoneau <simoneaujoel@gmail.com>2025-01-15 13:40:22 -0500
committerJoël Simoneau <simoneaujoel@gmail.com>2025-01-15 13:40:22 -0500
commit18416aa5490342334c53ab806d06669f5d17a5de (patch)
tree8f7532b2803ef5b0056a364e8aa17444d5c818fb /rules.js
parent33d213ce1547fa295854ade306e71b91c46460e9 (diff)
downloadvijayanagara-18416aa5490342334c53ab806d06669f5d17a5de.tar.gz
Basic event structure.
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js553
1 files changed, 549 insertions, 4 deletions
diff --git a/rules.js b/rules.js
index f8de694..0336d77 100644
--- a/rules.js
+++ b/rules.js
@@ -8,6 +8,7 @@ let view = null
const data = require("./data.js")
const SPACES = data.spaces
const SPACE_NAME = data.space_name
+const CITIES = data.city
function get_space_id(name) {
return SPACE_NAME.indexOf(name);
@@ -40,6 +41,15 @@ const S_VE_INF_2 = 23
const S_VE_INF_3 = 24
const S_VE_INF_4 = 25
+const C_CHITTOR = 0
+const C_DEVAGIRI = 1
+const C_GOA = 2
+const C_GULBARGA = 3
+const C_VIJAYANAGARA = 4
+const C_WARANGAL = 5
+
+const SINGLE_EVENTS = [26]
+
const first_piece = data.first_piece
const last_piece = data.last_piece
const first_space = S_ANDHRA
@@ -521,7 +531,6 @@ states.eligible = {
states.main_phase = {
inactive: "Eligible Faction",
prompt() {
-
if (game.cmd && game.cmd.limited === 1) {
view.prompt = "Select a limited Command."
gen_any_command()
@@ -532,7 +541,7 @@ states.main_phase = {
} else if (game.cmd && game.cmd.event === 1) {
view.prompt = "Select a Command or the Event."
gen_any_command()
- // gen_event()
+ gen_any_event()
} else if (game.cmd) {
view.prompt = "Select a Command."
gen_any_command()
@@ -559,6 +568,9 @@ states.main_phase = {
rebel: goto_rebel,
tax: goto_tax,
trade: goto_trade,
+ event() { goto_event(0) },
+ unshaded() { goto_event(0) },
+ shaded() { goto_event(1) },
end_of_turn: resume_event_card,
}
@@ -2368,6 +2380,10 @@ function move_all_faction_piece_from(faction, type, from, to) {
})
}
+function is_adjacent_to_city(city, s) {
+ return set_has(CITIES[city].adjacent, s)
+}
+
function is_selected_cmd_space(s) {
return game.cmd.spaces && set_has(game.cmd.spaces, s)
}
@@ -3114,6 +3130,108 @@ function for_each_movable(faction, f) {
}
}
+// === EVENTS ===
+
+function gen_any_event() {
+ if (set_has(SINGLE_EVENTS, this_card())) {
+ view.actions.event = 1
+ } else {
+ console.log("GEN ANY EVENT!")
+ view.actions.unshaded = 1
+ view.actions.shaded = 1
+ console.log(view.actions)
+ }
+}
+
+function goto_event(shaded) {
+ push_undo()
+ let c = this_card()
+
+ game.cmd = 0
+
+ if (shaded) {
+ log_h2(faction_name[game.current] + " - Shaded Event")
+ log("C" + c)
+ log(".i " + data.card_flavor_shaded[c] + ".")
+ log_br()
+ goto_vm(c * 2 + 1)
+ } else {
+ log_h2(faction_name[game.current] + " - Event")
+ log("C" + c)
+ if (data.card_flavor[c])
+ log(".i " + data.card_flavor[c] + ".")
+ log_br()
+ goto_vm(c * 2 + 0)
+ }
+}
+
+function end_event() {
+ game.vm = null
+ resume_event_card()
+}
+
+function event_prompt(str) {
+ if (typeof str === "undefined")
+ str = CODE[game.vm.fp][game.vm.prompt][1]
+ if (typeof str === "function")
+ str = str()
+ view.prompt = data.card_title[this_card()] + ": " + str
+}
+
+// === VM ===
+
+function goto_vm(proc) {
+ game.state = "vm"
+ game.vm = {
+ prompt: 0,
+ fp: proc,
+ ip: 0,
+ ss: [],
+ s: -1,
+ pp: [],
+ p: -1,
+ m: 0,
+ }
+ vm_exec()
+}
+
+function vm_exec() {
+ vm_inst(0)()
+}
+
+function vm_inst(a) {
+ return CODE[game.vm.fp][game.vm.ip][a]
+}
+
+function vm_log() {
+ log(vm_operand(1))
+ vm_next()
+}
+
+function vm_next() {
+ game.vm.ip ++
+ vm_exec()
+}
+
+function vm_operand(a) {
+ let x = CODE[game.vm.fp][game.vm.ip][a]
+ if (a > 0 && typeof x === "function")
+ return x()
+ return x
+}
+
+function vm_return() {
+ game.state = "vm_return"
+}
+
+states.vm_return = {
+ prompt() {
+ event_prompt("Done.")
+ view.actions.end_event = 1
+ },
+ end_event,
+}
+
// === CONST ===
// Factions
@@ -3151,5 +3269,432 @@ const SOP_LIMITED_COMMAND = 1
const SOP_COMMAND_DECREE = 2
const SOP_EVENT_OR_COMMAND = 3
const SOP_PASS = 4
-const INELIGIBLE = 5
-// === CONST === \ No newline at end of file
+const INELIGIBLE = 5// === CONST ===
+
+const CODE = []
+
+// EVENT 1
+CODE[1 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 1
+CODE[1 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 2
+CODE[2 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 2
+CODE[2 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 3
+CODE[3 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 3
+CODE[3 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 4
+CODE[4 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 4
+CODE[4 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 5
+CODE[5 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 5
+CODE[5 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 6
+CODE[6 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 6
+CODE[6 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 7
+CODE[7 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 7
+CODE[7 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 8
+CODE[8 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 8
+CODE[8 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 9
+CODE[9 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 9
+CODE[9 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 10
+CODE[10 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 10
+CODE[10 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 11
+CODE[11 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 11
+CODE[11 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 12
+CODE[12 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 12
+CODE[12 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 13
+CODE[13 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 13
+CODE[13 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 14
+CODE[14 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 14
+CODE[14 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 15
+CODE[15 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 15
+CODE[15 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 16
+CODE[16 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 16
+CODE[16 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 17
+CODE[17 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 17
+CODE[17 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 18
+CODE[18 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 18
+CODE[18 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 19
+CODE[19 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 19
+CODE[19 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 20
+CODE[20 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 20
+CODE[20 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 21
+CODE[21 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 21
+CODE[21 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 22
+CODE[22 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 22
+CODE[22 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 23
+CODE[23 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 23
+CODE[23 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 24
+CODE[24 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 24
+CODE[24 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 25
+CODE[25 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 25
+CODE[25 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 26
+CODE[26 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 27
+CODE[27 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 27
+CODE[27 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 28
+CODE[28 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 28
+CODE[28 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 29
+CODE[29 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 29
+CODE[29 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 30
+CODE[30 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 30
+CODE[30 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 31
+CODE[31 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 31
+CODE[31 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 32
+CODE[32 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 32
+CODE[32 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 33
+CODE[33 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 33
+CODE[33 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 34
+CODE[34 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 34
+CODE[34 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 35
+CODE[35 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 35
+CODE[35 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// EVENT 36
+CODE[36 * 2 + 0] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]
+
+// SHADED 36
+CODE[36 * 2 + 1] = [
+ [ vm_log, "NOT IMPLEMENTED" ],
+ [ vm_return ],
+]