Mercurial > touhou
comparison src/th06/ecl_vm.rs @ 672:d20cf9ede914
Verified some more of ecl_vm.
| author | Gauvain "GovanifY" Roussel-Tarbouriech <gauvain@govanify.com> |
|---|---|
| date | Mon, 12 Aug 2019 20:26:12 +0200 |
| parents | 838d9402b12f |
| children | 81ad01910f4b |
comparison
equal
deleted
inserted
replaced
| 671:266911c0ccfd | 672:d20cf9ede914 |
|---|---|
| 476 let mut enemy = self.enemy.borrow_mut(); | 476 let mut enemy = self.enemy.borrow_mut(); |
| 477 enemy.set_pos(self.get_f32(x), self.get_f32(y), self.get_f32(z)); | 477 enemy.set_pos(self.get_f32(x), self.get_f32(y), self.get_f32(z)); |
| 478 } | 478 } |
| 479 // 44 | 479 // 44 |
| 480 /* | 480 /* |
| 481 SubInstruction::SetPositionInterlacing(x, y, z) => { | 481 SubInstruction::SetAngularSpeed(x, y, z) => { |
| 482 //TODO: almost the same as setpos, except with 3 different values and sets the | 482 // same as above, except for angular speed |
| 483 //interlacing, should double check | 483 let mut enemy = self.enemy.borrow_mut(); |
| 484 let mut enemy = self.enemy.borrow_mut(); | 484 enemy.set_angular_speed(self.get_f32(x), self.get_f32(y), self.get_f32(z)); |
| 485 enemy.set_pos(self.get_f32(x), self.get_f32(y), self.get_f32(z)); | |
| 486 } | 485 } |
| 487 */ | 486 */ |
| 488 // 45 | 487 // 45 |
| 489 SubInstruction::SetAngleAndSpeed(angle, speed) => { | 488 SubInstruction::SetAngleAndSpeed(angle, speed) => { |
| 490 let angle = self.get_f32(angle); | 489 let angle = self.get_f32(angle); |
| 522 | 521 |
| 523 // 83 -> star items >>> life items | 522 // 83 -> star items >>> life items |
| 524 | 523 |
| 525 // 97 | 524 // 97 |
| 526 SubInstruction::SetAnim(index) => { | 525 SubInstruction::SetAnim(index) => { |
| 527 // TODO: check in ghidra! | 526 // seems correct, game internally gets base_addr =(iVar13 + 0x1c934), pointer_addr = iVar14 * 4 |
| 528 let mut enemy = self.enemy.borrow_mut(); | 527 let mut enemy = self.enemy.borrow_mut(); |
| 529 enemy.set_anim(index as u8); | 528 enemy.set_anim(index as u8); |
| 530 } | 529 } |
| 531 // 98 | 530 // 98 |
| 532 SubInstruction::SetMultipleAnims(default, end_left, end_right, left, right, _unused) => { | 531 SubInstruction::SetMultipleAnims(default, end_left, end_right, left, right, _unused) => { |
| 533 // TODO: check in ghidra! | 532 // _unused was supposed to set movement_dependant_sprites, but internally the game |
| 533 // assigns it 0xff | |
| 534 // TODO: THIS DOES NOT CALL set_anim. this only assigns all parameters to their | |
| 535 // internal struct. To check if the anims are set somewhere else | |
| 534 let mut enemy = self.enemy.borrow_mut(); | 536 let mut enemy = self.enemy.borrow_mut(); |
| 535 enemy.movement_dependant_sprites = if left == -1 { | 537 enemy.movement_dependant_sprites = if left == -1 { |
| 536 None | 538 None |
| 537 } else { | 539 } else { |
| 538 enemy.set_anim(default as u8); | 540 enemy.set_anim(default as u8); |
| 540 }; | 542 }; |
| 541 } | 543 } |
| 542 | 544 |
| 543 // 100 | 545 // 100 |
| 544 SubInstruction::SetDeathAnim(index) => { | 546 SubInstruction::SetDeathAnim(index) => { |
| 545 // TODO: check in ghidra! | 547 // TODO: takes 3 parameters in game, first one is death anim and 2 others are |
| 548 // unknown. To reverse! | |
| 546 let mut enemy = self.enemy.borrow_mut(); | 549 let mut enemy = self.enemy.borrow_mut(); |
| 547 enemy.death_anim = index; | 550 enemy.death_anim = index; |
| 548 } | 551 } |
| 549 | 552 |
| 550 // 103 | 553 // 103 |
| 551 SubInstruction::SetHitbox(width, height, depth) => { | 554 SubInstruction::SetHitbox(width, height, depth) => { |
| 552 // TODO: check in ghidra! | |
| 553 assert_eq!(depth, 32.); | 555 assert_eq!(depth, 32.); |
| 554 let mut enemy = self.enemy.borrow_mut(); | 556 let mut enemy = self.enemy.borrow_mut(); |
| 555 enemy.set_hitbox(width, height); | 557 enemy.set_hitbox(width, height); |
| 556 } | 558 } |
| 557 | 559 |
