From b72d0451a6ce3592e1daa0922e2defe5d0fd201e Mon Sep 17 00:00:00 2001 From: Alula Date: Thu, 10 Sep 2020 12:25:40 +0200 Subject: [PATCH] armsitem.tsc loading --- src/{weapon.rs => inventory.rs} | 0 src/npc/egg_corridor.rs | 0 src/scene/loading_scene.rs | 6 ++++-- src/text_script.rs | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) rename src/{weapon.rs => inventory.rs} (100%) create mode 100644 src/npc/egg_corridor.rs diff --git a/src/weapon.rs b/src/inventory.rs similarity index 100% rename from src/weapon.rs rename to src/inventory.rs diff --git a/src/npc/egg_corridor.rs b/src/npc/egg_corridor.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/scene/loading_scene.rs b/src/scene/loading_scene.rs index 3919c78..da4bd3d 100644 --- a/src/scene/loading_scene.rs +++ b/src/scene/loading_scene.rs @@ -27,8 +27,10 @@ impl Scene for LoadingScene { state.stages = stages; let npc_table = NPCTable::load_from(filesystem::open(ctx, [&state.base_path, "/npc.tbl"].join(""))?)?; state.npc_table = npc_table; - let script = TextScript::load_from(filesystem::open(ctx, [&state.base_path, "/Head.tsc"].join(""))?)?; - state.textscript_vm.set_global_script(script); + let head_script = TextScript::load_from(filesystem::open(ctx, [&state.base_path, "/Head.tsc"].join(""))?)?; + let arms_item_script = TextScript::load_from(filesystem::open(ctx, [&state.base_path, "/ArmsItem.tsc"].join(""))?)?; + state.textscript_vm.set_global_script(head_script); + state.textscript_vm.append_global_script(arms_item_script); let mut next_scene = GameScene::new(state, ctx, 13)?; next_scene.player.x = 10 * 16 * 0x200; diff --git a/src/text_script.rs b/src/text_script.rs index 8fe3656..6fc2758 100644 --- a/src/text_script.rs +++ b/src/text_script.rs @@ -347,6 +347,22 @@ impl TextScriptVM { if !self.suspend { self.reset(); } } + pub fn append_global_script(&mut self, script: TextScript) { + for (key, val) in script.event_map { + self.scripts.global_script.event_map.insert(key, val); + } + + if !self.suspend { self.reset(); } + } + + pub fn append_scene_script(&mut self, script: TextScript) { + for (key, val) in script.event_map { + self.scripts.scene_script.event_map.insert(key, val); + } + + if !self.suspend { self.reset(); } + } + pub fn reset(&mut self) { self.state = TextScriptExecutionState::Ended; self.clear_text_box();