Mercurial > touhou
comparison src/th06/ecl_vm.rs @ 682:d6cc9086058c
ecl_vm: more instructions
| author | Gauvain "GovanifY" Roussel-Tarbouriech <gauvain@govanify.com> |
|---|---|
| date | Fri, 16 Aug 2019 21:31:00 +0200 |
| parents | 1209e7f855a4 |
| children | 8c50a7b19425 |
comparison
equal
deleted
inserted
replaced
| 681:1209e7f855a4 | 682:d6cc9086058c |
|---|---|
| 516 SubInstruction::SetRandomAngle(min_angle, max_angle) => { | 516 SubInstruction::SetRandomAngle(min_angle, max_angle) => { |
| 517 let angle = self.get_prng().borrow_mut().get_f64() as f32 * (max_angle - min_angle) + min_angle; | 517 let angle = self.get_prng().borrow_mut().get_f64() as f32 * (max_angle - min_angle) + min_angle; |
| 518 let mut enemy = self.enemy.borrow_mut(); | 518 let mut enemy = self.enemy.borrow_mut(); |
| 519 enemy.angle = angle; | 519 enemy.angle = angle; |
| 520 } | 520 } |
| 521 | 521 // 51 |
| 522 /* | |
| 523 SubInstruction::TargetPlayer(angle, speed) => { | |
| 524 let mut enemy = self.enemy.borrow_mut(); | |
| 525 let player = enemy.select_player(); | |
| 526 enemy.update_mode = 0; | |
| 527 enemy.speed = speed; | |
| 528 enemy.angle = enemy.get_angle(player) + angle; | |
| 529 | |
| 530 } | |
| 531 */ | |
| 532 // 52 to 64 are different interlacing fields | |
| 533 | |
| 534 // 65 | |
| 535 // to note: in game a flag is set to enable the screenbox and is set by 66 to disable | |
| 536 // it on top of setting our values. But we have a good engine and can detect if that's | |
| 537 // changed without setting a flag :) | |
| 538 SubInstruction::SetScreenBox(xmin, ymin, xmax, ymax) => { | |
| 539 let mut enemy = self.enemy.borrow_mut(); | |
| 540 enemy.screen_box = Some((xmin, ymin, xmax, ymax)); | |
| 541 } | |
| 542 // 66 | |
| 543 SubInstruction::ClearScreenBox() => { | |
| 544 let mut enemy = self.enemy.borrow_mut(); | |
| 545 enemy.screen_box = None; | |
| 546 } | |
| 547 // 67 to 75 are set bullet attributes and it seems a pain to reverse rn | |
| 548 | |
| 549 | |
| 550 | |
| 551 // 78-79 are more interpolation flags | |
| 522 // 78 | 552 // 78 |
| 523 SubInstruction::DelayAttack() => { | 553 SubInstruction::DelayAttack() => { |
| 524 let mut enemy = self.enemy.borrow_mut(); | 554 let mut enemy = self.enemy.borrow_mut(); |
| 525 enemy.delay_attack = true; | 555 enemy.delay_attack = true; |
| 526 } | 556 } |
| 527 // 79 | 557 // 79 |
| 528 SubInstruction::NoDelayAttack() => { | 558 SubInstruction::NoDelayAttack() => { |
| 529 let mut enemy = self.enemy.borrow_mut(); | 559 let mut enemy = self.enemy.borrow_mut(); |
| 530 enemy.delay_attack = false; | 560 enemy.delay_attack = false; |
| 531 } | 561 } |
| 532 | 562 // 80 |
| 533 // 83 -> star items >>> life items | 563 /* |
| 564 SubInstruction::NoClue() => { | |
| 565 let mut enemy = self.enemy.borrow_mut(); | |
| 566 //bullet_pos = launch offset | |
| 567 (enemy->bullet_attributes).bullets_per_shot = enemy.pos.x + enemy->bullet_pos.pos.x; | |
| 568 (enemy->bullet_attributes).number_of_shots = enemy.pos.pos.y + enemy.bullet_pos.pos.y; | |
| 569 (enemy->bullet_attributes).speed = enemy.z + bullet_pos.z; | |
| 570 enemy.fire(bullet_attributes=bullet_attributes) | |
| 571 } | |
| 572 */ | |
| 573 // 81 | |
| 574 /* | |
| 575 SubInstruction::SetBulletLaunchOffset(x, y, z) => { | |
| 576 let mut enemy = self.enemy.borrow_mut(); | |
| 577 enemy.bullet_launch_offset = (self._getval(x), self._getval(y), self._getval(z)); | |
| 578 } | |
| 579 */ | |
| 580 // 82 | |
| 581 // TODO: correct but how to implement that in a rusty way? | |
| 582 /* | |
| 583 SubInstruction::SetExtendedBulletAttributes(x, y, z) => { | |
| 584 let mut enemy = self.enemy.borrow_mut(); | |
| 585 | |
| 586 // self._enemy.extended_bullet_attributes = tuple(self._getval(attr) for attr in attributes) | |
| 587 } | |
| 588 */ | |
| 589 // 83 | |
| 590 /* | |
| 591 SubInstruction::ChangeBulletsIntoStarBonus() => { | |
| 592 let mut game = self.game.borrow_mut(); | |
| 593 game.change_bullets_into_star_items(); | |
| 594 } | |
| 595 */ | |
| 596 | |
| 597 | |
| 598 | |
| 534 | 599 |
| 535 // 97 | 600 // 97 |
| 536 SubInstruction::SetAnim(index) => { | 601 SubInstruction::SetAnim(index) => { |
| 537 // seems correct, game internally gets base_addr =(iVar13 + 0x1c934), pointer_addr = iVar14 * 4 | 602 // seems correct, game internally gets base_addr =(iVar13 + 0x1c934), pointer_addr = iVar14 * 4 |
| 538 let mut enemy = self.enemy.borrow_mut(); | 603 let mut enemy = self.enemy.borrow_mut(); |
