weiss_core/encode/
constants.rs1use crate::state::REVEAL_HISTORY_LEN;
6
7pub const OBS_ENCODING_VERSION: u32 = 2;
10pub const ACTION_ENCODING_VERSION: u32 = 1;
13pub const POLICY_VERSION: u32 = 2;
15pub const SPEC_HASH: u64 = ((OBS_ENCODING_VERSION as u64) << 32)
17 | ((ACTION_ENCODING_VERSION as u64) << 16)
18 | (POLICY_VERSION as u64);
19
20pub const ACTOR_NONE: i8 = -1;
22pub const DECISION_KIND_NONE: i8 = -1;
24
25pub const MAX_HAND: usize = 50;
27pub const MAX_DECK: usize = 50;
29pub const MAX_STAGE: usize = 5;
31pub const MAX_ABILITIES_PER_CARD: usize = 4;
33pub const ATTACK_SLOT_COUNT: usize = 3;
35pub const MAX_LEVEL: usize = 4;
37pub const TOP_CLOCK: usize = 7;
39pub const TOP_WAITING_ROOM: usize = 5;
41pub const TOP_STOCK: usize = 5;
43pub const TOP_RESOLUTION: usize = 5;
45
46pub const MULLIGAN_CONFIRM_ID: usize = 0;
48pub const MULLIGAN_SELECT_BASE: usize = MULLIGAN_CONFIRM_ID + 1;
50pub const MULLIGAN_SELECT_COUNT: usize = MAX_HAND;
52
53pub const PASS_ACTION_ID: usize = MULLIGAN_SELECT_BASE + MULLIGAN_SELECT_COUNT;
55pub const CLOCK_HAND_BASE: usize = PASS_ACTION_ID + 1;
57pub const CLOCK_HAND_COUNT: usize = MAX_HAND;
59
60pub const MAIN_PLAY_CHAR_BASE: usize = CLOCK_HAND_BASE + CLOCK_HAND_COUNT;
62pub const MAIN_PLAY_CHAR_COUNT: usize = MAX_HAND * MAX_STAGE;
64pub const MAIN_PLAY_EVENT_BASE: usize = MAIN_PLAY_CHAR_BASE + MAIN_PLAY_CHAR_COUNT;
66pub const MAIN_PLAY_EVENT_COUNT: usize = MAX_HAND;
68pub const MAIN_MOVE_BASE: usize = MAIN_PLAY_EVENT_BASE + MAIN_PLAY_EVENT_COUNT;
70pub const MAIN_MOVE_COUNT: usize = MAX_STAGE * (MAX_STAGE - 1);
72
73pub const CLIMAX_PLAY_BASE: usize = MAIN_MOVE_BASE + MAIN_MOVE_COUNT;
75pub const CLIMAX_PLAY_COUNT: usize = MAX_HAND;
77
78pub const ATTACK_BASE: usize = CLIMAX_PLAY_BASE + CLIMAX_PLAY_COUNT;
80pub const ATTACK_COUNT: usize = ATTACK_SLOT_COUNT * 3;
82
83pub const LEVEL_UP_BASE: usize = ATTACK_BASE + ATTACK_COUNT;
85pub const LEVEL_UP_COUNT: usize = 7;
87
88pub const ENCORE_PAY_BASE: usize = LEVEL_UP_BASE + LEVEL_UP_COUNT;
90pub const ENCORE_PAY_COUNT: usize = MAX_STAGE;
92pub const ENCORE_DECLINE_BASE: usize = ENCORE_PAY_BASE + ENCORE_PAY_COUNT;
94pub const ENCORE_DECLINE_COUNT: usize = MAX_STAGE;
96
97pub const TRIGGER_ORDER_BASE: usize = ENCORE_DECLINE_BASE + ENCORE_DECLINE_COUNT;
99pub const TRIGGER_ORDER_COUNT: usize = 10;
101
102pub const CHOICE_BASE: usize = TRIGGER_ORDER_BASE + TRIGGER_ORDER_COUNT;
104pub const CHOICE_COUNT: usize = 16;
106pub const CHOICE_PREV_ID: usize = CHOICE_BASE + CHOICE_COUNT;
108pub const CHOICE_NEXT_ID: usize = CHOICE_PREV_ID + 1;
110
111pub const CONCEDE_ID: usize = CHOICE_NEXT_ID + 1;
113pub const ACTION_SPACE_SIZE: usize = CONCEDE_ID + 1;
115const _: [(); 1] = [(); (ACTION_SPACE_SIZE <= u16::MAX as usize) as usize];
117pub const ACTION_SPACE_WORDS: usize = ACTION_SPACE_SIZE.div_ceil(64);
119
120pub const OBS_HEADER_LEN: usize = 16;
122pub const OBS_REASON_LEN: usize = 8;
124pub const OBS_REASON_IN_MAIN: usize = 0;
126pub const OBS_REASON_IN_CLIMAX: usize = 1;
128pub const OBS_REASON_IN_ATTACK: usize = 2;
130pub const OBS_REASON_IN_COUNTER_WINDOW: usize = 3;
132pub const OBS_REASON_NO_STOCK: usize = 4;
134pub const OBS_REASON_NO_COLOR: usize = 5;
136pub const OBS_REASON_NO_HAND: usize = 6;
138pub const OBS_REASON_NO_TARGETS: usize = 7;
140pub const OBS_REVEAL_LEN: usize = REVEAL_HISTORY_LEN;
142pub const OBS_CONTEXT_LEN: usize = 4;
144pub const OBS_CONTEXT_PRIORITY_WINDOW: usize = 0;
146pub const OBS_CONTEXT_CHOICE_ACTIVE: usize = 1;
148pub const OBS_CONTEXT_STACK_NONEMPTY: usize = 2;
150pub const OBS_CONTEXT_ENCORE_PENDING: usize = 3;
152pub const PER_PLAYER_COUNTS: usize = 9;
154pub const PER_STAGE_SLOT: usize = 7;
156pub const PER_PLAYER_STAGE: usize = MAX_STAGE * PER_STAGE_SLOT;
158pub const PER_PLAYER_CLIMAX_TOP: usize = 1;
160pub const PER_PLAYER_LEVEL: usize = MAX_LEVEL;
162pub const PER_PLAYER_CLOCK_TOP: usize = TOP_CLOCK;
164pub const PER_PLAYER_WAITING_TOP: usize = TOP_WAITING_ROOM;
166pub const PER_PLAYER_RESOLUTION_TOP: usize = TOP_RESOLUTION;
168pub const PER_PLAYER_STOCK_TOP: usize = TOP_STOCK;
170pub const PER_PLAYER_HAND: usize = MAX_HAND;
172pub const PER_PLAYER_DECK: usize = MAX_DECK;
174pub const PER_PLAYER_BLOCK_LEN: usize = PER_PLAYER_COUNTS
176 + PER_PLAYER_STAGE
177 + PER_PLAYER_CLIMAX_TOP
178 + PER_PLAYER_LEVEL
179 + PER_PLAYER_CLOCK_TOP
180 + PER_PLAYER_WAITING_TOP
181 + PER_PLAYER_RESOLUTION_TOP
182 + PER_PLAYER_STOCK_TOP
183 + PER_PLAYER_HAND
184 + PER_PLAYER_DECK;
185pub const OBS_REASON_BASE: usize = OBS_HEADER_LEN + 2 * PER_PLAYER_BLOCK_LEN;
187pub const OBS_REVEAL_BASE: usize = OBS_REASON_BASE + OBS_REASON_LEN;
189pub const OBS_CONTEXT_BASE: usize = OBS_REVEAL_BASE + OBS_REVEAL_LEN;
191pub const OBS_LEN: usize = OBS_CONTEXT_BASE + OBS_CONTEXT_LEN;