mirror of
https://github.com/doukutsu-rs/doukutsu-rs
synced 2025-11-22 13:03:38 +00:00
tsc: skip_until bug fix
This commit is contained in:
parent
fcf477444c
commit
ff2f87133f
|
|
@ -625,6 +625,11 @@ impl TextScriptVM {
|
||||||
|
|
||||||
exec_state = TextScriptExecutionState::WaitFade(event, cursor.position() as u32);
|
exec_state = TextScriptExecutionState::WaitFade(event, cursor.position() as u32);
|
||||||
}
|
}
|
||||||
|
OpCode::CMU => {
|
||||||
|
let song_id = read_cur_varint(&mut cursor)? as usize;
|
||||||
|
state.sound_manager.play_song(song_id, &state.constants, ctx)?;
|
||||||
|
exec_state = TextScriptExecutionState::Running(event, cursor.position() as u32);
|
||||||
|
}
|
||||||
// unimplemented opcodes
|
// unimplemented opcodes
|
||||||
// Zero operands
|
// Zero operands
|
||||||
OpCode::AEp | OpCode::CAT | OpCode::CIL | OpCode::CPS |
|
OpCode::AEp | OpCode::CAT | OpCode::CIL | OpCode::CPS |
|
||||||
|
|
@ -641,7 +646,7 @@ impl TextScriptVM {
|
||||||
OpCode::MYB | OpCode::GIT | OpCode::NUM | OpCode::DNA | OpCode::DNP |
|
OpCode::MYB | OpCode::GIT | OpCode::NUM | OpCode::DNA | OpCode::DNP |
|
||||||
OpCode::MPp | OpCode::SKm | OpCode::SKp | OpCode::EQp | OpCode::EQm |
|
OpCode::MPp | OpCode::SKm | OpCode::SKp | OpCode::EQp | OpCode::EQm |
|
||||||
OpCode::ITp | OpCode::ITm | OpCode::AMm | OpCode::UNJ | OpCode::MPJ | OpCode::YNJ |
|
OpCode::ITp | OpCode::ITm | OpCode::AMm | OpCode::UNJ | OpCode::MPJ | OpCode::YNJ |
|
||||||
OpCode::XX1 | OpCode::SIL | OpCode::LIp | OpCode::SOU | OpCode::CMU |
|
OpCode::XX1 | OpCode::SIL | OpCode::LIp | OpCode::SOU |
|
||||||
OpCode::SSS | OpCode::ACH => {
|
OpCode::SSS | OpCode::ACH => {
|
||||||
let par_a = read_cur_varint(&mut cursor)?;
|
let par_a = read_cur_varint(&mut cursor)?;
|
||||||
|
|
||||||
|
|
@ -750,12 +755,15 @@ impl TextScript {
|
||||||
|
|
||||||
let mut event_map = HashMap::new();
|
let mut event_map = HashMap::new();
|
||||||
let mut iter = data.iter().copied().peekable();
|
let mut iter = data.iter().copied().peekable();
|
||||||
|
let mut last_event = 0;
|
||||||
|
|
||||||
while let Some(&chr) = iter.peek() {
|
while let Some(&chr) = iter.peek() {
|
||||||
match chr {
|
match chr {
|
||||||
b'#' => {
|
b'#' => {
|
||||||
iter.next();
|
iter.next();
|
||||||
let event_num = TextScript::read_number(&mut iter)? as u16;
|
let event_num = TextScript::read_number(&mut iter)? as u16;
|
||||||
TextScript::skip_until(b'\n', &mut iter)?;
|
TextScript::skip_until(b'\n', &mut iter)?;
|
||||||
|
last_event = event_num;
|
||||||
|
|
||||||
if event_map.contains_key(&event_num) {
|
if event_map.contains_key(&event_num) {
|
||||||
if strict {
|
if strict {
|
||||||
|
|
@ -777,7 +785,7 @@ impl TextScript {
|
||||||
iter.next();
|
iter.next();
|
||||||
}
|
}
|
||||||
n => {
|
n => {
|
||||||
return Err(ParseError(format!("Unexpected token: {}", n as char)));
|
return Err(ParseError(format!("Unexpected token in event {}: {}", last_event, n as char)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -957,10 +965,12 @@ impl TextScript {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn skip_until<I: Iterator<Item=u8>>(expect: u8, iter: &mut I) -> GameResult {
|
fn skip_until<I: Iterator<Item=u8>>(expect: u8, iter: &mut Peekable<I>) -> GameResult {
|
||||||
for chr in iter {
|
while let Some(&chr) = iter.peek() {
|
||||||
if chr == expect {
|
if chr == expect {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
} else {
|
||||||
|
iter.next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue