What is this about?
For RMer who intent to make puzzle-like minigame that involve moving object on map. This tutorial will achieve specific feature for what might be your need.
Feature
Allows player to "grab" object (not carry!) by holding the action button and release to "ungrab".
While grabbing, player may push or pull the object ONLY forward (push) or backward (pull) direction.
Requirement
Basic knowledge of eventing.
Two variables to store player's direction and button direction to be compared.
Difficulty level : Apprentice
How?
Spoiler: Screenshot of the whole event
Full explanation
Beforehand, we store the player's direction and lock it in place. Then we trapped the event inside a loop to simulate "grabbing" as long as the action button are pressed. Otherwise, if we release the button the loop will break and grabbing is canceled. While inside the loop, we checked the directional input and compare that to the player's direction. If it's the same direction, we move it forward (push). If it's opposite direction, we move it backward (pull).
Points to be noted
If you want the event to wait for the player input, it's necessary to trapped the event inside a loop.
Always leave breathing space (at least wait 1 frame) when using loop. I forgot to put wait on screenshot. MV can handle it so it will still works, but other engine might stuck.
Normally, pulling object toward player will cause stuck because the tile is occupied by the player. Making the player move first is the safest decision, but would make it look weird. I make an alternative so they can move at same time relatively by using an exploit which I will explain on what we learn.
What we learn?
Character direction has an integer value of 2, 4, 6, 8, which respectively represent down, left, right, up direction. Making use of this number, we find the opposite direction if both value addition is equal to 10 (2+8 or 4+6).
The exploit I mentioned is about how movement route can be overwritten. Making use of this trait, we make the event to NOT skip its movement, so it will standby until it's able to move considering it may stuck. Later, we overwrite that movement with an empty movement route so that it will forget the last command regardless it's moving or not.
For the last, let me know if there's something you don't understand or what would you like to suggest to improve this tutorial I made.