Merge branch 'doukutsu-rs:master' into ballos

This commit is contained in:
dawndus 2022-01-14 21:30:30 -05:00 committed by GitHub
commit 85b1b71a0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 11 deletions

View File

@ -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;
}

View File

@ -272,12 +272,13 @@ impl GameScene {
let (x, y) = (x * state.scale, y * state.scale);
let canvas_w_scaled = state.canvas_size.0 as f32 * state.scale;
let canvas_h_scaled = state.canvas_size.1 as f32 * state.scale;
let level_width = (self.stage.map.width as f32 - 1.0) * self.stage.map.tile_size.as_float();
let level_height = (self.stage.map.height as f32 - 1.0) * self.stage.map.tile_size.as_float();
let left_side = -x;
let right_side = -x + level_width * state.scale;
let upper_side = -y;
let lower_side = -y + level_height * state.scale;
let half_block = self.stage.map.tile_size.as_float() * 0.5 * state.scale;
let level_width = (self.stage.map.width as f32) * self.stage.map.tile_size.as_float();
let level_height = (self.stage.map.height as f32) * self.stage.map.tile_size.as_float();
let left_side = -x - half_block;
let right_side = left_side + level_width * state.scale;
let upper_side = -y - half_block;
let lower_side = upper_side + level_height * state.scale;
if left_side > 0.0 {
let rect = Rect::new(0, 0, left_side as isize, canvas_h_scaled as isize);
@ -962,11 +963,20 @@ impl GameScene {
325 => {
let size = 0.5 * (npc.anim_num as f32 + 1.0);
self.draw_light(
interpolate_fix9_scale(npc.prev_x - self.frame.prev_x, npc.x - self.frame.x, state.frame_time),
interpolate_fix9_scale(npc.prev_y - self.frame.prev_y, npc.y - self.frame.y, state.frame_time),
interpolate_fix9_scale(
npc.prev_x - self.frame.prev_x,
npc.x - self.frame.x,
state.frame_time,
),
interpolate_fix9_scale(
npc.prev_y - self.frame.prev_y,
npc.y - self.frame.y,
state.frame_time,
),
size,
(255, 255, 255),
batch,)
batch,
)
}
_ => {}
}
@ -1203,6 +1213,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 };

View File

@ -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);

View File

@ -98,7 +98,12 @@ impl OggPlaybackEngine {
let mut buf = match music.read_dec_packet_itl() {
Ok(Some(buf)) => buf,
Ok(None) | Err(_) => {
Ok(None) => {
self.playing_intro = false;
return;
}
Err(e) => {
log::error!("Error decoding intro: {}", e);
self.playing_intro = false;
return;
}
@ -175,7 +180,7 @@ impl OggPlaybackEngine {
let s2 =
(*data.get_unchecked(clamp(upos + 1, 0, data.len() - 1)) as f32) / 32768.0;
(s1 + (s2 - s1) * pos.fract()) as i16
((s1 + (s2 - s1) * pos.fract()) * 32768.0) as i16
};
tmp_data.push(s);