Mercurial > touhou
changeset 734:7886a1a5d226
ecl_vm: instruction 122 beginnings, sf 12 done
author | Gauvain "GovanifY" Roussel-Tarbouriech <gauvain@govanify.com> |
---|---|
date | Sun, 03 Nov 2019 04:42:58 +0100 (2019-11-03) |
parents | 770e5057f6bc |
children | b9928db975e1 |
files | src/th06/ecl_vm.rs |
diffstat | 1 files changed, 26 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/th06/ecl_vm.rs +++ b/src/th06/ecl_vm.rs @@ -1235,12 +1235,37 @@ impl EclRunner { self.frame.floats[3] = (rand_y * fy + (96. - fy / 2.)) as f32; } } - _ => unimplemented!("spellcards are a bitch and a half") + _ => unimplemented!("Special function {:?} not found!", function) } } + // 122 + // Here lies the Di Sword of despair + SubInstruction::SetSpecialFunctionCallback(function) => { + //TODO: those functions are executed at each frame and needs to be written to the + //callback function but so far i'm simply focusing on the implementation + //NB: the original engine doesn't differenciate between function blocks for ins 121 + //and 122 but we do here, since it wouldn't make sense the other way around. + match function { + 12 => { + for i in 0..8 { + /* + if ((enemy->lasers[i] != (laser *)0x0) && (enemy->lasers[i]->state != 0)) { + (enemy->bullet_attributes).pos[0] = cos(enemy->lasers[i]->angle) * 64. + enemy.pos.x; + // yes, it reads pos[0] after it has been modified and yes, this most + // likely is a bug + (enemy->bullet_attributes).pos[1] = cos(enemy->lasers[i]->angle) * (enemy->bullet_attributes).pos[0] + enemy.pos.y; + (enemy->bullet_attributes).pos[2] = enemy.z; + bullet_fire(&enemy->bullet_attributes,&ETAMA_ARRAY); + }*/ + } + } + _ => unimplemented!("Special function {:?} not found!", function) + } + } _ => unimplemented!("{:?}", instruction) } + } }