#define dropObject /////////////////////////////////////////////////////////////////////////// // This script is called by one of the option boxes when it's clicked. // // Creating custom scripts like this allow your object to do anything you'd // // like. The index of the slot that was clicked on is passed in as argument0.// /////////////////////////////////////////////////////////////////////////// // Editted to suit game (clipping added) var positionX; var positionY; var maximumItemSize; var dropPointFound; dropPointFound = false; // Set when find free space to drop item positionX = 0; maximumItemSize = 25; // Find where item can be dropped // Must not drop outside room boundary or under menu bars // Use 2 * maximumItemSize so can be sure there is room to put whole item with no clipping problems. Approximates items to square sprites. // Use collision_line to make sure can not drop item over obstacle eg. wall if((obj_playerController.y - 18) - 2*maximumItemSize > 32) { if (!collision_line(obj_playerController.x, obj_playerController.y, obj_playerController.x, (obj_playerController.y - 18) - 2*maximumItemSize, obj_obstacle, false, false)) { // Free space above positionX = obj_playerController.x; positionY = (obj_playerController.y - 18) - maximumItemSize; // Consider height of dropped item so do not immedately pickup again dropPointFound = true; } } if(dropPointFound == false && (obj_playerController.y + 18) + 2*maximumItemSize < room_height - 100) { if(!collision_line(obj_playerController.x, obj_playerController.y, obj_playerController.x, (obj_playerController.y + 18) + 2*maximumItemSize, obj_obstacle, false, false)) { // Free space below positionX = obj_playerController.x; positionY = (obj_playerController.y + 18) + maximumItemSize; // Consider height of dropped item so do not immedately pickup again dropPointFound = true; } } if(dropPointFound == false &&(obj_playerController.x + 18) + 2*maximumItemSize < room_width) { if(!collision_line(obj_playerController.x, obj_playerController.y, (obj_playerController.x + 18) + 2*maximumItemSize, obj_playerController.y, obj_obstacle, false, false)) { // Free space right positionX = (obj_playerController.x + 18) + maximumItemSize; // Consider width of dropped item so do not immedately pickup again positionY = obj_playerController.y; dropPointFound = true; } } if(dropPointFound == false && (obj_playerController.x - 18) - 2*maximumItemSize > 0) { if(!collision_line(obj_playerController.x, obj_playerController.y, (obj_playerController.x - 18) - 2*maximumItemSize, obj_playerController.y, obj_obstacle, false, false)) { // Free space left positionX = (obj_playerController.x - 18) - maximumItemSize; // Consider width of dropped item so do not immedately pickup again positionY = obj_playerController.y; dropPointFound = true; } } if(dropPointFound == false) { // Do not drop item if no room (Rare case) sound_play(snd_cannotUse); exit; } // Item dropped so delete from inventory instance_create(positionX, positionY, Inventory.slotItems[argument0]); destroyObject(argument0);