bugfixes for #120 and #122

This commit is contained in:
dawnDus 2022-05-11 20:19:43 -04:00
parent 588b0d53dd
commit 8a2e9fa569
No known key found for this signature in database
GPG Key ID: 972AABDE81848F21
4 changed files with 52 additions and 55 deletions

View File

@ -8,6 +8,7 @@ use crate::framework::graphics::screen_insets_scaled;
use crate::inventory::Inventory;
use crate::player::Player;
use crate::shared_game_state::SharedGameState;
use crate::weapon::WeaponType;
pub struct HUD {
pub alignment: Alignment,
@ -111,12 +112,26 @@ impl GameEntity<(&Player, &mut Inventory)> for HUD {
if player.controller.trigger_next_weapon() {
state.sound_manager.play_sfx(4);
inventory.next_weapon();
if let Some(weapon) = inventory.get_current_weapon_mut() {
if weapon.wtype == WeaponType::Spur {
weapon.reset_xp();
}
}
self.weapon_x_pos = 32;
}
if player.controller.trigger_prev_weapon() {
state.sound_manager.play_sfx(4);
inventory.prev_weapon();
if let Some(weapon) = inventory.get_current_weapon_mut() {
if weapon.wtype == WeaponType::Spur {
weapon.reset_xp();
}
}
self.weapon_x_pos = 0;
}
}

View File

@ -889,7 +889,7 @@ impl NPC {
self.target_x = player.x;
if player.up {
self.target_y = player.y + if grounded { -0x1400 } else { 0x1000 };
self.target_y = player.y + if grounded { -0x1800 } else { 0x1000 };
self.anim_num = if grounded { 1 } else { 2 };
self.direction = if grounded { Direction::Up } else { Direction::Bottom };
} else if player.down && !grounded {
@ -926,56 +926,41 @@ impl NPC {
npc_list: &NPCList,
bullet_manager: &mut BulletManager,
) -> GameResult {
if self.action_num == 0 {
if let Some(npc) = self.get_parent_ref_mut(npc_list) {
let player = &players[0];
if let Some(npc) = self.get_parent_ref_mut(npc_list) {
let player = &players[0];
self.direction = npc.direction;
self.x = npc.x;
self.y = npc.y;
self.direction = npc.direction;
self.x = npc.x;
self.y = npc.y;
match self.direction {
Direction::Right => {
self.x += 0x1000;
}
Direction::Left => {
self.x -= 0x1000;
}
Direction::Up => {
self.y -= 0x1400;
}
Direction::Bottom => {
self.y += 0x1400;
}
_ => (),
match self.direction {
Direction::Right => {
self.x += 0x1000;
}
if player.controller.trigger_shoot()
&& state.control_flags.control_enabled()
&& bullet_manager.count_bullets_multi(&[43], TargetPlayer::Player1) < 2
{
bullet_manager.create_bullet(
npc.x,
npc.y,
43,
TargetPlayer::Player1,
self.direction,
&state.constants,
);
state.create_caret(npc.x, npc.y, CaretType::Shoot, self.direction);
state.sound_manager.play_sfx(117);
Direction::Left => {
self.x -= 0x1000;
}
let mut dir_offset = if self.direction == Direction::Left { 0 } else { 3 };
if self.direction == Direction::Up {
dir_offset += 2
};
if self.direction == Direction::Bottom {
dir_offset += 1
};
self.anim_rect = state.constants.npc.n321_curly_nemesis[dir_offset];
Direction::Up => {
self.y -= 0x1400;
}
Direction::Bottom => {
self.y += 0x1400;
}
_ => (),
}
if player.controller.trigger_shoot()
&& state.control_flags.control_enabled()
&& bullet_manager.count_bullets_multi(&[43], TargetPlayer::Player1) < 2
{
bullet_manager.create_bullet(npc.x, npc.y, 43, TargetPlayer::Player1, self.direction, &state.constants);
state.create_caret(npc.x, npc.y, CaretType::Shoot, Direction::Left);
state.sound_manager.play_sfx(117);
}
let dir_offset = if player.direction == Direction::Right { 0 } else { 3 };
self.anim_rect = state.constants.npc.n321_curly_nemesis[npc.anim_num as usize + dir_offset];
}
Ok(())

View File

@ -586,14 +586,15 @@ impl NPC {
self.face_player(player);
self.animate(40, 0, 1);
self.action_counter += 1;
if player.x > self.x - 0x28000
&& player.x < self.x + 0x28000
&& player.y > self.y - 0x14000
&& player.y < self.y + 0x14000
&& self.action_counter > 50
{
self.action_num = 10
self.action_counter += 1;
if self.action_counter > 50 {
self.action_num = 10
}
}
}
10 | 11 => {

View File

@ -1549,12 +1549,8 @@ impl Bullet {
Direction::FacingPlayer => unreachable!(),
},
38 => match self.direction {
Direction::Left | Direction::Right => {
self.enemy_hit_height = 0x800;
}
Direction::Up | Direction::Bottom => {
self.enemy_hit_width = 0x800;
}
Direction::Left | Direction::Right => self.enemy_hit_height = 0x800,
Direction::Up | Direction::Bottom => self.enemy_hit_width = 0x800,
Direction::FacingPlayer => unreachable!(),
},
39 => {