diff --git a/src/player/mod.rs b/src/player/mod.rs index 089a32c..f08d41a 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -835,6 +835,10 @@ impl GameEntity<&NPCList> for Player { return Ok(()); } + if state.textscript_vm.reset_invicibility { + self.shock_counter = 0; + } + if self.damage_counter != 0 { self.damage_counter -= 1; } diff --git a/src/scene/game_scene.rs b/src/scene/game_scene.rs index 627f5aa..cdfd8cd 100644 --- a/src/scene/game_scene.rs +++ b/src/scene/game_scene.rs @@ -1203,6 +1203,7 @@ impl GameScene { }; self.player1.tick(state, &self.npc_list)?; self.player2.tick(state, &self.npc_list)?; + state.textscript_vm.reset_invicibility = false; if self.player1.damage > 0 { let xp_loss = self.player1.damage * if self.player1.equip.has_arms_barrier() { 1 } else { 2 }; diff --git a/src/scripting/tsc/text_script.rs b/src/scripting/tsc/text_script.rs index 52d3c0d..b260af5 100644 --- a/src/scripting/tsc/text_script.rs +++ b/src/scripting/tsc/text_script.rs @@ -119,6 +119,7 @@ pub struct TextScriptVM { /// while parsing no one noticed them. pub strict_mode: bool, pub suspend: bool, + pub reset_invicibility: bool, pub numbers: [u16; 4], pub face: u16, pub item: u16, @@ -184,6 +185,7 @@ impl TextScriptVM { executor_player: TargetPlayer::Player1, strict_mode: false, suspend: true, + reset_invicibility: false, numbers: [0; 4], face: 0, item: 0, @@ -253,6 +255,7 @@ impl TextScriptVM { pub fn start_script(&mut self, event_num: u16) { self.reset(); + self.reset_invicibility = true; self.state = TextScriptExecutionState::Running(event_num, 0); log::info!("Started script: #{:04}", event_num);