MCPcopy Create free account
hub / github.com/EasyRPG/Player / CommandPanScreen

Method CommandPanScreen

src/game_interpreter_map.cpp:624–697  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

622}
623
624bool Game_Interpreter_Map::CommandPanScreen(lcf::rpg::EventCommand const& com) { // code 11060
625 int direction;
626 int distance;
627 int speed;
628 bool waiting_pan_screen = false;
629
630 auto& player = *Main_Data::game_player;
631
632 switch (com.parameters[0]) {
633 case 0: // Lock
634 player.LockPan();
635 break;
636 case 1: // Unlock
637 player.UnlockPan();
638 break;
639 case 2: // Pan
640 direction = com.parameters[1];
641 distance = com.parameters[2];
642 // FIXME: For an "instant pan" Yume2kki passes a huge value (53) here
643 // which crashes depending on the hardware
644 speed = Utils::Clamp<int>(com.parameters[3], 1, 6);
645 waiting_pan_screen = com.parameters[4] != 0;
646 player.StartPan(direction, distance, speed);
647 break;
648 case 3: // Reset
649 speed = Utils::Clamp<int>(com.parameters[3], 1, 6);
650 waiting_pan_screen = com.parameters[4] != 0;
651 player.ResetPan(speed);
652 distance = std::max(
653 std::abs(player.GetPanX() - player.GetTargetPanX())
654 , std::abs(player.GetPanY() - player.GetTargetPanY()));
655 distance /= SCREEN_TILE_SIZE;
656 break;
657 }
658
659 if (Player::IsPatchManiac() && com.parameters.size() > 5) {
660 // Pixel scrolling with h/v offsets
661 bool centered = false; // absolute from default pan (centered on hero)
662 bool relative = false; // relative to current camera
663 int h = ValueOrVariableBitfield(com, 1, 0, 2);
664 int v = ValueOrVariableBitfield(com, 1, 1, 3);
665 waiting_pan_screen = (com.parameters[4] & 0x01) != 0;
666 speed = ValueOrVariableBitfield(com, 1, 2, 5);
667 switch (com.parameters[0]) {
668 case 4: // Relative Pixel Pan (speed)
669 centered = false;
670 relative = true;
671 player.StartPixelPan(h, v, speed, false, centered, relative);
672 break;
673 case 5: // Relative Pixel Pan (interpolated)
674 centered = false;
675 relative = true;
676 player.StartPixelPan(h, v, speed, true, centered, relative);
677 break;
678 case 6: // Absolute Pixel Pan (speed)
679 centered = (com.parameters[4] & 0x02) != 0;
680 relative = (com.parameters[4] & 0x04) != 0;
681 player.StartPixelPan(h, v, speed, false, centered, relative);

Callers

nothing calls this directly

Calls 12

maxFunction · 0.85
LockPanMethod · 0.80
UnlockPanMethod · 0.80
StartPanMethod · 0.80
ResetPanMethod · 0.80
GetTargetPanXMethod · 0.80
GetTargetPanYMethod · 0.80
StartPixelPanMethod · 0.80
GetPanWaitMethod · 0.80
GetPanXMethod · 0.45
GetPanYMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected