#define scr_placeFire // Based on code written by Tahnok100 in his inventory example. // This script is called when the 'Place fire' option box when is clicked for the 'Wood' item. // The index of the slot that was clicked on is passed in as argument0. { var fireSize; fireSize = 25; var failed; failed = 0; var rightRect, leftRect, aboveRect; rightRect = !collision_rectangle(obj_playerController.x, obj_playerController.y - fireSize/2, (obj_playerController.x + (16+fireSize)) + fireSize/2, obj_playerController.y + fireSize/2, obj_obstacle, false, false) && !collision_rectangle(obj_playerController.x, obj_playerController.y - fireSize/2, (obj_playerController.x + (16+fireSize)) + fireSize/2, obj_playerController.y + fireSize/2, obj_placedFire, false, false); leftRect = !collision_rectangle((obj_playerController.x - (16+fireSize)) - fireSize/2, obj_playerController.y - fireSize/2, obj_playerController.x, obj_playerController.y + fireSize/2, obj_obstacle, false, false) && !collision_rectangle((obj_playerController.x - (16+fireSize)) - fireSize/2, obj_playerController.y - fireSize/2, obj_playerController.x, obj_playerController.y + fireSize/2, obj_placedFire, false, false); belowRect = !collision_rectangle(obj_playerController.x - fireSize/2, obj_playerController.y, obj_playerController.x + fireSize/2, (obj_playerController.y + (16+fireSize)) + fireSize/2, obj_obstacle, false, false) && !collision_rectangle(obj_playerController.x - fireSize/2, obj_playerController.y, obj_playerController.x + fireSize/2, (obj_playerController.y + (16+fireSize)) + fireSize/2, obj_placedFire, false, false); aboveRect = !collision_rectangle(obj_playerController.x - fireSize/2, (obj_playerController.y - (16+fireSize)) - fireSize/2, obj_playerController.x + fireSize/2, obj_playerController.y, obj_obstacle, false, false) && !collision_rectangle(obj_playerController.x - fireSize/2, (obj_playerController.y - (16+fireSize)) - fireSize/2, obj_playerController.x + fireSize/2, obj_playerController.y, obj_placedFire, false, false); // Always place the fire in front of the player if possible for realism // Fires must not be placed outside room. Fires can be placed partially outside room. // Fires must not be placed under or partially under objects (including other fires) if(obj_playerController.direction = 0) { // Right facing if (obj_playerController.x + (16+fireSize) < room_width && rightRect) { // Can place fire in front of player (right) instance_create((obj_playerController.x + 16) + fireSize, obj_playerController.y, obj_placedFire); } else { if (obj_playerController.y + (16+fireSize) < room_height - 100 && belowRect) // Can place fire below player instance_create(obj_playerController.x, (obj_playerController.y + 16) + fireSize, obj_placedFire); else if (obj_playerController.y - (16+fireSize) > 32 && aboveRect) // Can place fire above player instance_create(obj_playerController.x, (obj_playerController.y - 16) - fireSize, obj_placedFire); else if (obj_playerController.x - (16+fireSize) > 0 && leftRect) // Can place fire behind player (left) instance_create((obj_playerController.x - 16) - fireSize, obj_playerController.y, obj_placedFire); else // Cannot place fire failed = 1; } } else if (obj_playerController.direction = 180) { // Left facing if (obj_playerController.x - (16+fireSize) > 0 && leftRect) { // Can place fire in front of player (left) instance_create((obj_playerController.x - 16) - fireSize, obj_playerController.y, obj_placedFire); } else { if (obj_playerController.y - (16+fireSize) > 32 && aboveRect) // Can place fire above player instance_create(obj_playerController.x, (obj_playerController.y - 16) - fireSize, obj_placedFire); else if (obj_playerController.y + (16+fireSize) < room_height - 100 && belowRect) // Can place fire below player instance_create(obj_playerController.x, (obj_playerController.y + 16) + fireSize, obj_placedFire); else if (obj_playerController.x + (16+fireSize) < room_width && rightRect) // Can place fire behind player (right) instance_create((obj_playerController.x + 16) + fireSize, obj_playerController.y, obj_placedFire); else // Cannot place fire failed = 1; } } else if(obj_playerController.direction == 90) { // Upwards facing if (obj_playerController.y - (16+fireSize) > 32 && aboveRect) { // Can place fire in front of player (above) instance_create(obj_playerController.x, (obj_playerController.y - 16) - fireSize, obj_placedFire); } else { if (obj_playerController.x + (16+fireSize) < room_width && rightRect) // Can place fire to right of player instance_create((obj_playerController.x + 16) + fireSize, obj_playerController.y, obj_placedFire); else if (obj_playerController.x - (16+fireSize) > 0 && leftRect) // Can place fire to left of player instance_create((obj_playerController.x - 16) - fireSize, obj_playerController.y, obj_placedFire); else if (obj_playerController.y + (16+fireSize) < room_height - 100 && belowRect) // Can place fire behind player (below) instance_create(obj_playerController.x, (obj_playerController.y + 16) + fireSize, obj_placedFire); else // Cannot place fire failed = 1; } } else if (obj_playerController.direction == 270) { // Downwards facing if (obj_playerController.y + (16+fireSize) < room_height - 100 && belowRect) { // Can place fire in front of player (below) instance_create(obj_playerController.x, (obj_playerController.y + 16) + fireSize, obj_placedFire); } else { if (obj_playerController.x - (16+fireSize) > 0 && leftRect) // Can place fire to left of player instance_create((obj_playerController.x - 16) - fireSize, obj_playerController.y, obj_placedFire); else if (obj_playerController.x + (16+fireSize) < room_width && rightRect) // Can place fire to right of player instance_create((obj_playerController.x + 16) + fireSize, obj_playerController.y, obj_placedFire); else if (obj_playerController.y - (16+fireSize) > 32 && aboveRect) // Can place fire behind player (above) instance_create(obj_playerController.x, (obj_playerController.y - 16) - fireSize, obj_placedFire); else // Cannot place fire failed = 1; } } if (failed != 1) // Fire successfully placed destroyObject(argument0); // Remove used Wood item from inventory else // Rare for fire to be unable to be placed but if happens play sound sound_play(snd_cannotUse); }