# HG changeset patch # User Emmanuel Gil Peyrot # Date 1578347011 -3600 # Node ID 01915da33b99a6e7c893ab30a2d8f683f605bd56 # Parent 817c453b7223f864a305d05dc274462cae0397e7 ecl_vm: Let enemies spawn other enemies. diff --git a/src/th06/ecl_vm.rs b/src/th06/ecl_vm.rs --- a/src/th06/ecl_vm.rs +++ b/src/th06/ecl_vm.rs @@ -1,7 +1,7 @@ //! ECL runner. use crate::th06::ecl::{Ecl, SubInstruction}; -use crate::th06::enemy::{Enemy, Offset, BulletAttributes}; +use crate::th06::enemy::{Enemy, Offset, BulletAttributes, Position}; use crate::util::prng::Prng; use std::cell::RefCell; use std::rc::Rc; @@ -776,16 +776,18 @@ impl EclRunner { } // 95 - /* - SubInstruction::PopEnemy(sub, x, y, z, life, bonus_dropped, die_score) => { - self._pop_enemy(sub, 0, self.get_f32(x), - self.get_f32(y), - self.get_f32(z), - life, bonus_dropped, die_score) - + SubInstruction::SpawnEnemy(sub, x, y, z, life, bonus, score) => { + let x = self.get_f32(x); + let y = self.get_f32(y); + let _z = self.get_f32(z); + let enemy = self.enemy.borrow_mut(); + let anm0 = enemy.anm0.upgrade().unwrap(); + let game = enemy.game.upgrade().unwrap(); + let enemy = Enemy::new(Position::new(x, y), life, bonus, score as u32, false, Rc::downgrade(&anm0), Rc::downgrade(&game)); + let ecl = self.ecl.clone().unwrap(); + let mut runner = EclRunner::new(&ecl, enemy, sub as u16); + runner.run_frame(); } - */ - // 96 /* @@ -1287,7 +1289,7 @@ mod tests { use super::*; use crate::th06::anm0::Anm0; use crate::th06::ecl::{Sub, CallSub, Rank}; - use crate::th06::enemy::{Game, Position}; + use crate::th06::enemy::Game; use std::io::{self, Read}; use std::fs::File;