Mercurial > touhou
changeset 728:414f8611f344
ecl: Add support for bullet sounds, instruction 84.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 30 Oct 2019 16:27:43 +0100 |
parents | eea03c9ca604 |
children | f953ae5b3732 |
files | src/th06/ecl.rs src/th06/ecl_vm.rs src/th06/enemy.rs |
diffstat | 3 files changed, 14 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/th06/ecl.rs +++ b/src/th06/ecl.rs @@ -271,7 +271,7 @@ declare_sub_instructions!{ 82 => fn SetExtendedBulletAttributes(a: i32, b: i32, c: i32, d: i32, e: f32, f: f32, g: f32, h: f32), 83 => fn ChangeBulletsInStarBonus(), // TODO: Found in stage 4 onward. - 84 => fn UNK_ins84(param: i32), + 84 => fn SetBulletSound(sound: i32), 85 => fn NewLaser(laser_type: i16, sprite_idx_offset: i16, angle: f32, speed: f32, start_offset: f32, end_offset: f32, max_length: f32, width: f32, start_duration: i32, duration: i32, end_duration: i32, grazing_delay: i32, grazing_extra_duration: i32, UNK1: i32), 86 => fn NewLaserTowardsPlayer(laser_type: i16, sprite_idx_offset: i16, angle: f32, speed: f32, start_offset: f32, end_offset: f32, max_length: f32, width: f32, start_duration: i32, duration: i32, end_duration: i32, grazing_delay: i32, grazing_extra_duration: i32, UNK1: i32), 87 => fn SetUpcomingLaserId(id: u32),
--- a/src/th06/ecl_vm.rs +++ b/src/th06/ecl_vm.rs @@ -679,15 +679,19 @@ impl EclRunner { game.change_bullets_into_star_items(); } */ + // 84 - // WARNING: dead code. If the parameter is < 0 it unsets a bullet_flag, otherwise it - // sets it, never using the parameter ever - /* - SubInstruction::UNK_ins84() => { + SubInstruction::SetBulletSound(sound) => { let mut enemy = self.enemy.borrow_mut(); - enemy.bullet_flag_something + if sound < 0 { + enemy.bullet_attributes.sound = None; + } else { + // This assert isn’t part of the original engine, but it would crash on high + // values anyway. + assert!(sound <= 255); + enemy.bullet_attributes.sound = Some(sound as u8); + } } - */ // 85-86 ire newlaser functions
--- a/src/th06/enemy.rs +++ b/src/th06/enemy.rs @@ -209,7 +209,9 @@ pub(crate) struct BulletAttributes { pub(crate) bullet_type: i16, // zero: x32, pub(crate) flags: u32, - pub(crate) ins84_param: i32, + + /// Which sound to play when the bullet gets fired. + pub sound: Option<u8>, } impl BulletAttributes {