siglus_scene_vm/runtime/forms/
script.rs1use anyhow::Result;
2
3use crate::runtime::{CommandContext, Value};
4
5use super::prop_access;
6
7const SET_AUTO_SAVEPOINT_OFF: i32 =
8 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_SAVEPOINT_OFF;
9const SET_AUTO_SAVEPOINT_ON: i32 =
10 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_SAVEPOINT_ON;
11const SET_SKIP_DISABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_SKIP_DISABLE;
12const SET_SKIP_ENABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_SKIP_ENABLE;
13const SET_SKIP_DISABLE_FLAG: i32 =
14 crate::runtime::constants::elm_value::SCRIPT_SET_SKIP_DISABLE_FLAG;
15const GET_SKIP_DISABLE_FLAG: i32 =
16 crate::runtime::constants::elm_value::SCRIPT_GET_SKIP_DISABLE_FLAG;
17const SET_CTRL_SKIP_DISABLE: i32 =
18 crate::runtime::constants::elm_value::SCRIPT_SET_CTRL_SKIP_DISABLE;
19const SET_CTRL_SKIP_ENABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_CTRL_SKIP_ENABLE;
20const SET_CTRL_SKIP_DISABLE_FLAG: i32 =
21 crate::runtime::constants::elm_value::SCRIPT_SET_CTRL_SKIP_DISABLE_FLAG;
22const GET_CTRL_SKIP_DISABLE_FLAG: i32 =
23 crate::runtime::constants::elm_value::SCRIPT_GET_CTRL_SKIP_DISABLE_FLAG;
24const CHECK_SKIP: i32 = crate::runtime::constants::elm_value::SCRIPT_CHECK_SKIP;
25const SET_STOP_SKIP_BY_KEY_DISABLE: i32 =
26 crate::runtime::constants::elm_value::SCRIPT_SET_STOP_SKIP_BY_KEY_DISABLE;
27const SET_STOP_SKIP_BY_KEY_ENABLE: i32 =
28 crate::runtime::constants::elm_value::SCRIPT_SET_STOP_SKIP_BY_KEY_ENABLE;
29const SET_END_MSG_BY_KEY_DISABLE: i32 =
30 crate::runtime::constants::elm_value::SCRIPT_SET_END_MSG_BY_KEY_DISABLE;
31const SET_END_MSG_BY_KEY_ENABLE: i32 =
32 crate::runtime::constants::elm_value::SCRIPT_SET_END_MSG_BY_KEY_ENABLE;
33const SET_SKIP_UNREAD_MESSAGE_FLAG: i32 =
34 crate::runtime::constants::elm_value::SCRIPT_SET_SKIP_UNREAD_MESSAGE_FLAG;
35const GET_SKIP_UNREAD_MESSAGE_FLAG: i32 =
36 crate::runtime::constants::elm_value::SCRIPT_GET_SKIP_UNREAD_MESSAGE_FLAG;
37const START_AUTO_MODE: i32 = crate::runtime::constants::elm_value::SCRIPT_START_AUTO_MODE;
38const END_AUTO_MODE: i32 = crate::runtime::constants::elm_value::SCRIPT_END_AUTO_MODE;
39const SET_AUTO_MODE_MOJI_WAIT: i32 =
40 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_MODE_MOJI_WAIT;
41const SET_AUTO_MODE_MOJI_WAIT_DEFAULT: i32 =
42 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_MODE_MOJI_WAIT_DEFAULT;
43const GET_AUTO_MODE_MOJI_WAIT: i32 =
44 crate::runtime::constants::elm_value::SCRIPT_GET_AUTO_MODE_MOJI_WAIT;
45const SET_AUTO_MODE_MIN_WAIT: i32 =
46 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_MODE_MIN_WAIT;
47const SET_AUTO_MODE_MIN_WAIT_DEFAULT: i32 =
48 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_MODE_MIN_WAIT_DEFAULT;
49const GET_AUTO_MODE_MIN_WAIT: i32 =
50 crate::runtime::constants::elm_value::SCRIPT_GET_AUTO_MODE_MIN_WAIT;
51const SET_AUTO_MODE_MOJI_CNT: i32 =
52 crate::runtime::constants::elm_value::SCRIPT_SET_AUTO_MODE_MOJI_CNT;
53const SET_MOUSE_CURSOR_HIDE_ONOFF: i32 =
54 crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_CURSOR_HIDE_ONOFF;
55const SET_MOUSE_CURSOR_HIDE_ONOFF_DEFAULT: i32 =
56 crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_CURSOR_HIDE_ONOFF_DEFAULT;
57const GET_MOUSE_CURSOR_HIDE_ONOFF: i32 =
58 crate::runtime::constants::elm_value::SCRIPT_GET_MOUSE_CURSOR_HIDE_ONOFF;
59const SET_MOUSE_CURSOR_HIDE_TIME: i32 =
60 crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_CURSOR_HIDE_TIME;
61const SET_MOUSE_CURSOR_HIDE_TIME_DEFAULT: i32 =
62 crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_CURSOR_HIDE_TIME_DEFAULT;
63const GET_MOUSE_CURSOR_HIDE_TIME: i32 =
64 crate::runtime::constants::elm_value::SCRIPT_GET_MOUSE_CURSOR_HIDE_TIME;
65const SET_MESSAGE_SPEED: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MESSAGE_SPEED;
66const SET_MESSAGE_SPEED_DEFAULT: i32 =
67 crate::runtime::constants::elm_value::SCRIPT_SET_MESSAGE_SPEED_DEFAULT;
68const GET_MESSAGE_SPEED: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_MESSAGE_SPEED;
69const SET_MESSAGE_NOWAIT_FLAG: i32 =
70 crate::runtime::constants::elm_value::SCRIPT_SET_MESSAGE_NOWAIT_FLAG;
71const GET_MESSAGE_NOWAIT_FLAG: i32 =
72 crate::runtime::constants::elm_value::SCRIPT_GET_MESSAGE_NOWAIT_FLAG;
73const SET_MSG_ASYNC_MODE_ON: i32 =
74 crate::runtime::constants::elm_value::SCRIPT_SET_MSG_ASYNC_MODE_ON;
75const SET_MSG_ASYNC_MODE_ON_ONCE: i32 =
76 crate::runtime::constants::elm_value::SCRIPT_SET_MSG_ASYNC_MODE_ON_ONCE;
77const SET_MSG_ASYNC_MODE_OFF: i32 =
78 crate::runtime::constants::elm_value::SCRIPT_SET_MSG_ASYNC_MODE_OFF;
79const SET_HIDE_MWND_DISABLE: i32 =
80 crate::runtime::constants::elm_value::SCRIPT_SET_HIDE_MWND_DISABLE;
81const SET_HIDE_MWND_ENABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_HIDE_MWND_ENABLE;
82const SET_MSG_BACK_DISABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MSG_BACK_DISABLE;
83const SET_MSG_BACK_ENABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MSG_BACK_ENABLE;
84const SET_MSG_BACK_OFF: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MSG_BACK_OFF;
85const SET_MSG_BACK_ON: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MSG_BACK_ON;
86const SET_MSG_BACK_DISP_OFF: i32 =
87 crate::runtime::constants::elm_value::SCRIPT_SET_MSG_BACK_DISP_OFF;
88const SET_MSG_BACK_DISP_ON: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MSG_BACK_DISP_ON;
89const SET_MOUSE_DISP_OFF: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_DISP_OFF;
90const SET_MOUSE_DISP_ON: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_DISP_ON;
91const SET_MOUSE_MOVE_BY_KEY_DISABLE: i32 =
92 crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_MOVE_BY_KEY_DISABLE;
93const SET_MOUSE_MOVE_BY_KEY_ENABLE: i32 =
94 crate::runtime::constants::elm_value::SCRIPT_SET_MOUSE_MOVE_BY_KEY_ENABLE;
95const SET_KEY_DISABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_KEY_DISABLE;
96const SET_KEY_ENABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_KEY_ENABLE;
97const SET_MWND_ANIME_OFF_FLAG: i32 =
98 crate::runtime::constants::elm_value::SCRIPT_SET_MWND_ANIME_OFF_FLAG;
99const GET_MWND_ANIME_OFF_FLAG: i32 =
100 crate::runtime::constants::elm_value::SCRIPT_GET_MWND_ANIME_OFF_FLAG;
101const SET_MWND_ANIME_ON_FLAG: i32 =
102 crate::runtime::constants::elm_value::SCRIPT_SET_MWND_ANIME_ON_FLAG;
103const GET_MWND_ANIME_ON_FLAG: i32 =
104 crate::runtime::constants::elm_value::SCRIPT_GET_MWND_ANIME_ON_FLAG;
105const SET_MWND_DISP_OFF_FLAG: i32 =
106 crate::runtime::constants::elm_value::SCRIPT_SET_MWND_DISP_OFF_FLAG;
107const GET_MWND_DISP_OFF_FLAG: i32 =
108 crate::runtime::constants::elm_value::SCRIPT_GET_MWND_DISP_OFF_FLAG;
109const SET_KOE_DONT_STOP_ON_FLAG: i32 =
110 crate::runtime::constants::elm_value::SCRIPT_SET_KOE_DONT_STOP_ON_FLAG;
111const GET_KOE_DONT_STOP_ON_FLAG: i32 =
112 crate::runtime::constants::elm_value::SCRIPT_GET_KOE_DONT_STOP_ON_FLAG;
113const SET_KOE_DONT_STOP_OFF_FLAG: i32 =
114 crate::runtime::constants::elm_value::SCRIPT_SET_KOE_DONT_STOP_OFF_FLAG;
115const GET_KOE_DONT_STOP_OFF_FLAG: i32 =
116 crate::runtime::constants::elm_value::SCRIPT_GET_KOE_DONT_STOP_OFF_FLAG;
117const SET_SHORTCUT_ENABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_SHORTCUT_ENABLE;
118const SET_SHORTCUT_DISABLE: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_SHORTCUT_DISABLE;
119const SET_QUAKE_STOP_FLAG: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_QUAKE_STOP_FLAG;
120const GET_QUAKE_STOP_FLAG: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_QUAKE_STOP_FLAG;
121const SET_EMOTE_MOUTH_STOP_FLAG: i32 =
122 crate::runtime::constants::elm_value::SCRIPT_SET_EMOTE_MOUTH_STOP_FLAG;
123const GET_EMOTE_MOUTH_STOP_FLAG: i32 =
124 crate::runtime::constants::elm_value::SCRIPT_GET_EMOTE_MOUTH_STOP_FLAG;
125const START_BGMFADE: i32 = crate::runtime::constants::elm_value::SCRIPT_START_BGMFADE;
126const END_BGMFADE: i32 = crate::runtime::constants::elm_value::SCRIPT_END_BGMFADE;
127const SET_VSYNC_WAIT_OFF_FLAG: i32 =
128 crate::runtime::constants::elm_value::SCRIPT_SET_VSYNC_WAIT_OFF_FLAG;
129const GET_VSYNC_WAIT_OFF_FLAG: i32 =
130 crate::runtime::constants::elm_value::SCRIPT_GET_VSYNC_WAIT_OFF_FLAG;
131const SET_SKIP_TRIGGER: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_SKIP_TRIGGER;
132const IGNORE_R_ON: i32 = crate::runtime::constants::elm_value::SCRIPT_IGNORE_R_ON;
133const IGNORE_R_OFF: i32 = crate::runtime::constants::elm_value::SCRIPT_IGNORE_R_OFF;
134const SET_CURSOR_NO: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_CURSOR_NO;
135const GET_CURSOR_NO: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_CURSOR_NO;
136const SET_TIME_STOP_FLAG: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_TIME_STOP_FLAG;
137const GET_TIME_STOP_FLAG: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_TIME_STOP_FLAG;
138const SET_COUNTER_TIME_STOP_FLAG: i32 =
139 crate::runtime::constants::elm_value::SCRIPT_SET_COUNTER_TIME_STOP_FLAG;
140const GET_COUNTER_TIME_STOP_FLAG: i32 =
141 crate::runtime::constants::elm_value::SCRIPT_GET_COUNTER_TIME_STOP_FLAG;
142const SET_FRAME_ACTION_TIME_STOP_FLAG: i32 =
143 crate::runtime::constants::elm_value::SCRIPT_SET_FRAME_ACTION_TIME_STOP_FLAG;
144const GET_FRAME_ACTION_TIME_STOP_FLAG: i32 =
145 crate::runtime::constants::elm_value::SCRIPT_GET_FRAME_ACTION_TIME_STOP_FLAG;
146const SET_STAGE_TIME_STOP_FLAG: i32 =
147 crate::runtime::constants::elm_value::SCRIPT_SET_STAGE_TIME_STOP_FLAG;
148const GET_STAGE_TIME_STOP_FLAG: i32 =
149 crate::runtime::constants::elm_value::SCRIPT_GET_STAGE_TIME_STOP_FLAG;
150const SET_FONT_NAME: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_FONT_NAME;
151const SET_FONT_NAME_DEFAULT: i32 =
152 crate::runtime::constants::elm_value::SCRIPT_SET_FONT_NAME_DEFAULT;
153const GET_FONT_NAME: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_FONT_NAME;
154const SET_FONT_BOLD: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_FONT_BOLD;
155const SET_FONT_BOLD_DEFAULT: i32 =
156 crate::runtime::constants::elm_value::SCRIPT_SET_FONT_BOLD_DEFAULT;
157const GET_FONT_BOLD: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_FONT_BOLD;
158const SET_FONT_SHADOW: i32 = crate::runtime::constants::elm_value::SCRIPT_SET_FONT_SHADOW;
159const SET_FONT_SHADOW_DEFAULT: i32 =
160 crate::runtime::constants::elm_value::SCRIPT_SET_FONT_SHADOW_DEFAULT;
161const GET_FONT_SHADOW: i32 = crate::runtime::constants::elm_value::SCRIPT_GET_FONT_SHADOW;
162
163const SET_JOYPAD_MODE_OVERRIDE: i32 =
167 crate::runtime::constants::elm_value::SCRIPT_SET_JOYPAD_MODE_OVERRIDE;
168const RESET_JOYPAD_MODE_OVERRIDE: i32 =
169 crate::runtime::constants::elm_value::SCRIPT_RESET_JOYPAD_MODE_OVERRIDE;
170const GET_JOYPAD_MODE_OVERRIDE: i32 =
171 crate::runtime::constants::elm_value::SCRIPT_GET_JOYPAD_MODE_OVERRIDE;
172
173struct Call<'a> {
174 op: i32,
175 params: &'a [Value],
176}
177
178fn parse_call<'a>(ctx: &CommandContext, form_id: u32, args: &'a [Value]) -> Option<Call<'a>> {
179 let (chain_pos, chain) = prop_access::parse_element_chain_ctx(ctx, form_id, args)?;
180 if chain.len() < 2 {
181 return None;
182 }
183 let params = prop_access::script_args(args, chain_pos);
184 Some(Call {
185 op: chain[1],
186 params,
187 })
188}
189
190fn p_i64(params: &[Value], idx: usize) -> i64 {
191 params.get(idx).and_then(|v| v.as_i64()).unwrap_or(0)
192}
193
194fn p_bool(params: &[Value], idx: usize) -> bool {
195 p_i64(params, idx) != 0
196}
197
198fn p_str(params: &[Value], idx: usize) -> String {
199 params
200 .get(idx)
201 .and_then(|v| v.as_str())
202 .unwrap_or("")
203 .to_string()
204}
205
206pub fn dispatch_excall(ctx: &mut CommandContext, op: i32, params: &[Value]) -> Result<bool> {
213 match op {
214 SET_FONT_NAME => ctx.excall_state.font_name = p_str(params, 0),
215 SET_FONT_NAME_DEFAULT => ctx.excall_state.font_name.clear(),
216 GET_FONT_NAME => {
217 ctx.push(Value::Str(ctx.excall_state.font_name.clone()));
218 return Ok(true);
219 }
220 SET_FONT_BOLD => ctx.excall_state.font_bold = p_i64(params, 0),
221 SET_FONT_BOLD_DEFAULT => ctx.excall_state.font_bold = -1,
222 GET_FONT_BOLD => {
223 ctx.push(Value::Int(ctx.excall_state.font_bold));
224 return Ok(true);
225 }
226 SET_FONT_SHADOW => ctx.excall_state.font_shadow = p_i64(params, 0),
227 SET_FONT_SHADOW_DEFAULT => ctx.excall_state.font_shadow = -1,
228 GET_FONT_SHADOW => {
229 ctx.push(Value::Int(ctx.excall_state.font_shadow));
230 return Ok(true);
231 }
232 SET_JOYPAD_MODE_OVERRIDE => {
233 ctx.excall_state.joypad_mode_override = p_i64(params, 0);
234 }
235 RESET_JOYPAD_MODE_OVERRIDE => {
236 ctx.excall_state.joypad_mode_override = -1;
237 }
238 GET_JOYPAD_MODE_OVERRIDE => {
239 ctx.push(Value::Int(ctx.excall_state.joypad_mode_override));
240 return Ok(true);
241 }
242 _ => return Ok(false),
243 }
244
245 ctx.push(Value::Int(0));
246 Ok(true)
247}
248
249pub fn dispatch(ctx: &mut CommandContext, form_id: u32, args: &[Value]) -> Result<bool> {
250 let Some(call) = parse_call(ctx, form_id, args) else {
251 return Ok(false);
252 };
253 let op = call.op;
254 let params = call.params;
255
256 if op == SET_JOYPAD_MODE_OVERRIDE {
257 ctx.globals.script.joypad_mode_override = p_i64(params, 0);
258 ctx.push(Value::Int(0));
259 return Ok(true);
260 }
261
262 if op == RESET_JOYPAD_MODE_OVERRIDE {
263 ctx.globals.script.joypad_mode_override = -1;
264 ctx.push(Value::Int(0));
265 return Ok(true);
266 }
267
268 if op == GET_JOYPAD_MODE_OVERRIDE {
269 ctx.push(Value::Int(ctx.globals.script.joypad_mode_override));
270 return Ok(true);
271 }
272
273 if op == CHECK_SKIP {
274 let v = ctx.runtime_is_skipping();
277 if env_is_set!("SG_DEBUG")
278 && ctx.current_scene_name.as_deref() == Some("sys10_cf01")
279 && matches!(ctx.current_line_no, 700..=730 | 870..=895)
280 {
281 let scene_no = ctx
282 .current_scene_no
283 .map(|n| n.to_string())
284 .unwrap_or_else(|| "-".to_string());
285 eprintln!(
286 "[SG_DEBUG][CF_CONDITION_TRACE] scene=sys10_cf01 scene_no={} line={} kind=SCRIPT_CHECK_SKIP result={}",
287 scene_no,
288 ctx.current_line_no,
289 if v { 1 } else { 0 }
290 );
291 }
292 ctx.push(Value::Int(if v { 1 } else { 0 }));
293 return Ok(true);
294 }
295
296 let st = &mut ctx.globals.script;
297
298 match op {
299 SET_AUTO_SAVEPOINT_OFF => st.dont_set_save_point = true,
300 SET_AUTO_SAVEPOINT_ON => st.dont_set_save_point = false,
301 SET_SKIP_DISABLE => st.skip_disable = true,
302 SET_SKIP_ENABLE => st.skip_disable = false,
303 SET_SKIP_DISABLE_FLAG => st.skip_disable = p_bool(params, 0),
304 GET_SKIP_DISABLE_FLAG => {
305 let v = if st.skip_disable { 1 } else { 0 };
306 ctx.push(Value::Int(v));
307 return Ok(true);
308 }
309 SET_CTRL_SKIP_DISABLE => st.ctrl_disable = true,
310 SET_CTRL_SKIP_ENABLE => st.ctrl_disable = false,
311 SET_CTRL_SKIP_DISABLE_FLAG => st.ctrl_disable = p_bool(params, 0),
312 GET_CTRL_SKIP_DISABLE_FLAG => {
313 let v = if st.ctrl_disable { 1 } else { 0 };
314 ctx.push(Value::Int(v));
315 return Ok(true);
316 }
317 SET_STOP_SKIP_BY_KEY_DISABLE => st.not_stop_skip_by_click = true,
318 SET_STOP_SKIP_BY_KEY_ENABLE => st.not_stop_skip_by_click = false,
319 SET_END_MSG_BY_KEY_DISABLE => st.not_skip_msg_by_click = true,
320 SET_END_MSG_BY_KEY_ENABLE => st.not_skip_msg_by_click = false,
321 SET_SKIP_UNREAD_MESSAGE_FLAG => st.skip_unread_message = p_bool(params, 0),
322 GET_SKIP_UNREAD_MESSAGE_FLAG => {
323 let v = if st.skip_unread_message { 1 } else { 0 };
324 ctx.push(Value::Int(v));
325 return Ok(true);
326 }
327 START_AUTO_MODE => st.auto_mode_flag = true,
328 END_AUTO_MODE => st.auto_mode_flag = false,
329 SET_AUTO_MODE_MOJI_WAIT => st.auto_mode_moji_wait = p_i64(params, 0),
330 SET_AUTO_MODE_MOJI_WAIT_DEFAULT => st.auto_mode_moji_wait = -1,
331 GET_AUTO_MODE_MOJI_WAIT => {
332 let v = st.auto_mode_moji_wait;
333 ctx.push(Value::Int(v));
334 return Ok(true);
335 }
336 SET_AUTO_MODE_MIN_WAIT => st.auto_mode_min_wait = p_i64(params, 0),
337 SET_AUTO_MODE_MIN_WAIT_DEFAULT => st.auto_mode_min_wait = -1,
338 GET_AUTO_MODE_MIN_WAIT => {
339 let v = st.auto_mode_min_wait;
340 ctx.push(Value::Int(v));
341 return Ok(true);
342 }
343 SET_AUTO_MODE_MOJI_CNT => st.auto_mode_moji_cnt = p_i64(params, 0),
344 SET_MOUSE_CURSOR_HIDE_ONOFF => st.mouse_cursor_hide_onoff = p_i64(params, 0),
345 SET_MOUSE_CURSOR_HIDE_ONOFF_DEFAULT => st.mouse_cursor_hide_onoff = -1,
346 GET_MOUSE_CURSOR_HIDE_ONOFF => {
347 let v = st.mouse_cursor_hide_onoff;
348 ctx.push(Value::Int(v));
349 return Ok(true);
350 }
351 SET_MOUSE_CURSOR_HIDE_TIME => st.mouse_cursor_hide_time = p_i64(params, 0),
352 SET_MOUSE_CURSOR_HIDE_TIME_DEFAULT => st.mouse_cursor_hide_time = -1,
353 GET_MOUSE_CURSOR_HIDE_TIME => {
354 let v = st.mouse_cursor_hide_time;
355 ctx.push(Value::Int(v));
356 return Ok(true);
357 }
358 SET_MESSAGE_SPEED => st.msg_speed = p_i64(params, 0),
359 SET_MESSAGE_SPEED_DEFAULT => st.msg_speed = -1,
360 GET_MESSAGE_SPEED => {
361 let v = st.msg_speed;
362 ctx.push(Value::Int(v));
363 return Ok(true);
364 }
365 SET_MESSAGE_NOWAIT_FLAG => st.msg_nowait = p_bool(params, 0),
366 GET_MESSAGE_NOWAIT_FLAG => {
367 let v = if st.msg_nowait { 1 } else { 0 };
368 ctx.push(Value::Int(v));
369 return Ok(true);
370 }
371 SET_MSG_ASYNC_MODE_ON => {
372 st.async_msg_mode = true;
373 st.async_msg_mode_once = false;
374 }
375 SET_MSG_ASYNC_MODE_ON_ONCE => {
376 st.async_msg_mode = true;
377 st.async_msg_mode_once = true;
378 }
379 SET_MSG_ASYNC_MODE_OFF => {
380 st.async_msg_mode = false;
381 st.async_msg_mode_once = false;
382 }
383 SET_HIDE_MWND_DISABLE => st.hide_mwnd_disable = true,
384 SET_HIDE_MWND_ENABLE => st.hide_mwnd_disable = false,
385 SET_MSG_BACK_DISABLE => st.msg_back_disable = true,
386 SET_MSG_BACK_ENABLE => st.msg_back_disable = false,
387 SET_MSG_BACK_OFF => st.msg_back_off = true,
388 SET_MSG_BACK_ON => st.msg_back_off = false,
389 SET_MSG_BACK_DISP_OFF => st.msg_back_disp_off = true,
390 SET_MSG_BACK_DISP_ON => st.msg_back_disp_off = false,
391 SET_MOUSE_DISP_OFF => st.cursor_disp_off = true,
392 SET_MOUSE_DISP_ON => st.cursor_disp_off = false,
393 SET_MOUSE_MOVE_BY_KEY_DISABLE => st.cursor_move_by_key_disable = true,
394 SET_MOUSE_MOVE_BY_KEY_ENABLE => st.cursor_move_by_key_disable = false,
395 SET_KEY_DISABLE => {
396 let vk = p_i64(params, 0);
397 if (0..=255).contains(&vk) {
398 st.key_disable.insert(vk as u8);
399 }
400 }
401 SET_KEY_ENABLE => {
402 let vk = p_i64(params, 0);
403 if (0..=255).contains(&vk) {
404 st.key_disable.remove(&(vk as u8));
405 }
406 }
407 SET_MWND_ANIME_OFF_FLAG => st.mwnd_anime_off_flag = p_bool(params, 0),
408 GET_MWND_ANIME_OFF_FLAG => {
409 let v = if st.mwnd_anime_off_flag { 1 } else { 0 };
410 ctx.push(Value::Int(v));
411 return Ok(true);
412 }
413 SET_MWND_ANIME_ON_FLAG => st.mwnd_anime_on_flag = p_bool(params, 0),
414 GET_MWND_ANIME_ON_FLAG => {
415 let v = if st.mwnd_anime_on_flag { 1 } else { 0 };
416 ctx.push(Value::Int(v));
417 return Ok(true);
418 }
419 SET_MWND_DISP_OFF_FLAG => st.mwnd_disp_off_flag = p_bool(params, 0),
420 GET_MWND_DISP_OFF_FLAG => {
421 let v = if st.mwnd_disp_off_flag { 1 } else { 0 };
422 ctx.push(Value::Int(v));
423 return Ok(true);
424 }
425 SET_KOE_DONT_STOP_ON_FLAG => st.koe_dont_stop_on_flag = p_bool(params, 0),
426 GET_KOE_DONT_STOP_ON_FLAG => {
427 let v = if st.koe_dont_stop_on_flag { 1 } else { 0 };
428 ctx.push(Value::Int(v));
429 return Ok(true);
430 }
431 SET_KOE_DONT_STOP_OFF_FLAG => st.koe_dont_stop_off_flag = p_bool(params, 0),
432 GET_KOE_DONT_STOP_OFF_FLAG => {
433 let v = if st.koe_dont_stop_off_flag { 1 } else { 0 };
434 ctx.push(Value::Int(v));
435 return Ok(true);
436 }
437 SET_SHORTCUT_ENABLE => st.shortcut_disable = false,
438 SET_SHORTCUT_DISABLE => st.shortcut_disable = true,
439 SET_QUAKE_STOP_FLAG => st.quake_stop_flag = p_bool(params, 0),
440 GET_QUAKE_STOP_FLAG => {
441 let v = if st.quake_stop_flag { 1 } else { 0 };
442 ctx.push(Value::Int(v));
443 return Ok(true);
444 }
445 SET_EMOTE_MOUTH_STOP_FLAG => st.emote_mouth_stop_flag = p_bool(params, 0),
446 GET_EMOTE_MOUTH_STOP_FLAG => {
447 let v = if st.emote_mouth_stop_flag { 1 } else { 0 };
448 ctx.push(Value::Int(v));
449 return Ok(true);
450 }
451 START_BGMFADE => st.bgmfade_flag = true,
452 END_BGMFADE => st.bgmfade_flag = false,
453 SET_VSYNC_WAIT_OFF_FLAG => st.wait_display_vsync_off_flag = p_bool(params, 0),
454 GET_VSYNC_WAIT_OFF_FLAG => {
455 let v = if st.wait_display_vsync_off_flag { 1 } else { 0 };
456 ctx.push(Value::Int(v));
457 return Ok(true);
458 }
459 SET_SKIP_TRIGGER => st.skip_trigger = true,
460 IGNORE_R_ON => st.ignore_r_flag = true,
461 IGNORE_R_OFF => st.ignore_r_flag = false,
462 SET_CURSOR_NO => st.cursor_no = p_i64(params, 0),
463 GET_CURSOR_NO => {
464 let v = st.cursor_no;
465 ctx.push(Value::Int(v));
466 return Ok(true);
467 }
468 SET_TIME_STOP_FLAG => st.time_stop_flag = p_bool(params, 0),
469 GET_TIME_STOP_FLAG => {
470 let v = if st.time_stop_flag { 1 } else { 0 };
471 ctx.push(Value::Int(v));
472 return Ok(true);
473 }
474 SET_COUNTER_TIME_STOP_FLAG => st.counter_time_stop_flag = p_bool(params, 0),
475 GET_COUNTER_TIME_STOP_FLAG => {
476 let v = if st.counter_time_stop_flag { 1 } else { 0 };
477 ctx.push(Value::Int(v));
478 return Ok(true);
479 }
480 SET_FRAME_ACTION_TIME_STOP_FLAG => st.frame_action_time_stop_flag = p_bool(params, 0),
481 GET_FRAME_ACTION_TIME_STOP_FLAG => {
482 let v = if st.frame_action_time_stop_flag { 1 } else { 0 };
483 ctx.push(Value::Int(v));
484 return Ok(true);
485 }
486 SET_STAGE_TIME_STOP_FLAG => st.stage_time_stop_flag = p_bool(params, 0),
487 GET_STAGE_TIME_STOP_FLAG => {
488 let v = if st.stage_time_stop_flag { 1 } else { 0 };
489 ctx.push(Value::Int(v));
490 return Ok(true);
491 }
492 SET_FONT_NAME => st.font_name = p_str(params, 0),
493 SET_FONT_NAME_DEFAULT => st.font_name.clear(),
494 GET_FONT_NAME => {
495 let v = st.font_name.clone();
496 ctx.push(Value::Str(v));
497 return Ok(true);
498 }
499 SET_FONT_BOLD => st.font_bold = p_i64(params, 0),
500 SET_FONT_BOLD_DEFAULT => st.font_bold = -1,
501 GET_FONT_BOLD => {
502 let v = st.font_bold;
503 ctx.push(Value::Int(v));
504 return Ok(true);
505 }
506 SET_FONT_SHADOW => st.font_shadow = p_i64(params, 0),
507 SET_FONT_SHADOW_DEFAULT => st.font_shadow = -1,
508 GET_FONT_SHADOW => {
509 let v = st.font_shadow;
510 ctx.push(Value::Int(v));
511 return Ok(true);
512 }
513 _ => {
514 return Ok(false);
515 }
516 }
517
518 ctx.push(Value::Int(0));
519 Ok(true)
520}