From d49c261a174f20da5dc07d8d0d7ac7822ecbcde1 Mon Sep 17 00:00:00 2001 From: dawnDus <96957561+dawndus@users.noreply.github.com> Date: Thu, 17 Feb 2022 19:54:22 -0500 Subject: [PATCH] Even more bugfixes --- src/engine_constants/mod.rs | 3 +++ src/mod_list.rs | 9 +++++++-- src/npc/ai/doctor.rs | 2 +- src/player/mod.rs | 2 +- src/scripting/tsc/text_script.rs | 9 +++------ 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/engine_constants/mod.rs b/src/engine_constants/mod.rs index b7d3c84..119c61a 100644 --- a/src/engine_constants/mod.rs +++ b/src/engine_constants/mod.rs @@ -208,6 +208,7 @@ pub struct AnimatedFace { pub struct TextScriptConsts { pub encoding: TextScriptEncoding, pub encrypted: bool, + pub reset_invicibility_on_any_script: bool, pub animated_face_pics: bool, pub textbox_rect_top: Rect, pub textbox_rect_middle: Rect, @@ -1467,6 +1468,7 @@ impl EngineConstants { textscript: TextScriptConsts { encoding: TextScriptEncoding::ShiftJIS, encrypted: true, + reset_invicibility_on_any_script: true, animated_face_pics: false, textbox_rect_top: Rect { left: 0, top: 0, right: 244, bottom: 8 }, textbox_rect_middle: Rect { left: 0, top: 8, right: 244, bottom: 16 }, @@ -1619,6 +1621,7 @@ impl EngineConstants { self.tex_sizes.insert("MyChar".to_owned(), (200, 384)); self.tex_sizes.insert("Npc/NpcRegu".to_owned(), (320, 410)); self.tex_sizes.insert("ui".to_owned(), (128, 32)); + self.textscript.reset_invicibility_on_any_script = false; self.title.logo_rect = Rect { left: 0, top: 0, right: 214, bottom: 50 }; self.title.menu_left_top = Rect { left: 0, top: 0, right: 4, bottom: 4 }; diff --git a/src/mod_list.rs b/src/mod_list.rs index 051040b..019e736 100644 --- a/src/mod_list.rs +++ b/src/mod_list.rs @@ -11,6 +11,7 @@ pub struct ModInfo { pub id: String, pub requirement: Requirement, pub priority: u32, + pub save_slot: i32, pub path: String, pub name: String, pub description: String, @@ -137,11 +138,15 @@ impl ModList { let mut name = String::new(); let mut description = String::new(); + let mut save_slot = -1; if let Ok(file) = filesystem::open(ctx, [&path, "/mod.txt"].join("")) { let reader = BufReader::new(file); let mut lines = reader.lines(); - if let Some(line) = lines.nth(2) { + if let Some(line) = lines.nth(1) { + save_slot = line.unwrap_or("-1".to_string()).parse::().unwrap_or(-1); + } + if let Some(line) = lines.next() { let read_name = line.unwrap_or("No Mod Name".to_string()).to_string(); name = string_table.get(&read_name).unwrap_or(&read_name).to_string(); } @@ -150,7 +155,7 @@ impl ModList { } } - mods.push(ModInfo { id, requirement, priority, path, name, description }) + mods.push(ModInfo { id, requirement, priority, save_slot, path, name, description }) } } diff --git a/src/npc/ai/doctor.rs b/src/npc/ai/doctor.rs index f5e38cf..22e989f 100644 --- a/src/npc/ai/doctor.rs +++ b/src/npc/ai/doctor.rs @@ -452,7 +452,7 @@ impl NPC { if self.action_num == 102 { state.npc_super_pos = (self.target_x, self.target_y); - } else { + } else if self.action_num >= 10 { state.npc_super_pos = (self.x, self.y); } diff --git a/src/player/mod.rs b/src/player/mod.rs index fa54ad1..1014e29 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -844,7 +844,7 @@ impl GameEntity<&NPCList> for Player { return Ok(()); } - if state.textscript_vm.reset_invicibility { + if state.textscript_vm.reset_invicibility && state.constants.textscript.reset_invicibility_on_any_script { self.shock_counter = 0; } diff --git a/src/scripting/tsc/text_script.rs b/src/scripting/tsc/text_script.rs index 7512e19..71824cd 100644 --- a/src/scripting/tsc/text_script.rs +++ b/src/scripting/tsc/text_script.rs @@ -121,6 +121,7 @@ pub struct TextScriptVM { /// while parsing no one noticed them. pub strict_mode: bool, pub suspend: bool, + /// Requires `constants.textscript.reset_invicibility_on_any_script` pub reset_invicibility: bool, pub numbers: [u16; 4], pub face: u16, @@ -375,7 +376,7 @@ impl TextScriptVM { _ => {} } - if remaining > 1 || new_line { + if remaining > 1 { let ticks = if state.textscript_vm.flags.fast() || state.textscript_vm.flags.cutscene_skip() { 0 @@ -424,11 +425,7 @@ impl TextScriptVM { state.textscript_vm.line_1.clear(); state.textscript_vm.line_1.append(&mut state.textscript_vm.line_2); state.textscript_vm.line_2.append(&mut state.textscript_vm.line_3); - if remaining == 0 { - state.textscript_vm.state = TextScriptExecutionState::Running(event, ip); - } else { - state.textscript_vm.state = TextScriptExecutionState::Msg(event, ip, remaining, ticks); - } + state.textscript_vm.state = TextScriptExecutionState::Msg(event, ip, remaining, ticks); } else { state.textscript_vm.state = TextScriptExecutionState::MsgNewLine(event, ip, remaining, ticks, counter);