Legacy GM Outline around views after using display_reset()

M

Maximus

Guest
Hi all,

I've been working on a room wrapping solution using views. Everything works fine but if I add display_reset() to the room creation code with an aa level other than 0, I get outlines around my views.


(I used Shaun Spaulding's platformer tute to start with)

Project: https://sourceforge.net/projects/gm-room-wrapping/files/room_wrapping.gmx.zip/download

Unless this is just something Gamemaker does, I assume the problem is this script:
Code:
/// camera_set_position_xywrap(xx,yy)
//
//  void
//
//  sets centre postion of view[0] to (xx,yy)
//  and wraps around the room horizontally and
//  vertically using multiple views that scale
//  to the size of view[0].
//  
// @author Max Carroll
//
/// GMLscripts.com/license
{
    var xx, yy;
    xx = argument0;
    yy = argument1;
    view_xview[0] = xx - 0.5*view_wview[0];
    view_yview[0] = yy - 0.5*view_hview[0];
    if (xx < 0.5*view_wview[0]) // the view is colliding with the left edge of the room
    {
        if (yy < 0.5*view_hview[0]) // the view is colliding with the top left corner of the room
        {
            view_visible[0] = false;
            view_visible[1] = true;
            view_visible[2] = true;
            view_visible[3] = true;
            view_visible[4] = true;
            view_xview[1] = room_width + xx - 0.5*view_wview[0];
            view_yview[1] = room_height + yy - 0.5*view_hview[0];
            view_wview[1] = 0.5*view_wview[0] - xx;
            view_hview[1] = 0.5*view_hview[0] - yy;
            view_xport[1] = 0;
            view_yport[1] = 0;
            view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
            view_hport[1] = view_hport[0] / view_hview[0] * view_hview[1];
            view_xview[2] = 0;
            view_yview[2] = room_height + yy - 0.5*view_hview[0];
            view_wview[2] = 0.5*view_wview[0] + xx;
            view_hview[2] = 0.5*view_hview[0] - yy;
            view_xport[2] = view_wport[1];
            view_yport[2] = 0;
            view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
            view_hport[2] = view_hport[0] / view_hview[0] * view_hview[2];
            view_xview[3] = room_width + xx - 0.5*view_wview[0];
            view_yview[3] = 0;
            view_wview[3] = 0.5*view_wview[0] - xx;
            view_hview[3] = yy + 0.5*view_hview[0];
            view_xport[3] = 0;
            view_yport[3] = view_hport[1];
            view_wport[3] = view_wport[0] / view_wview[0] * view_wview[3];
            view_hport[3] = view_hport[0] / view_hview[0] * view_hview[3];
            view_xview[4] = 0;
            view_yview[4] = 0;
            view_wview[4] = xx + 0.5*view_wview[0];
            view_hview[4] = yy + 0.5*view_hview[0];
            view_xport[4] = view_wport[3];
            view_yport[4] = view_hport[2];
            view_wport[4] = view_wport[0] / view_wview[0] * view_wview[4];
            view_hport[4] = view_hport[0] / view_hview[0] * view_hview[4];
        }
        else if (yy + 0.5*view_hview[0] > room_height) // the view is colliding with the bottom left corner of the room
        {
            view_visible[0] = false;
            view_visible[1] = true;
            view_visible[2] = true;
            view_visible[3] = true;
            view_visible[4] = true;
            view_xview[1] = xx - 0.5*view_wview[0] + room_width;
            view_yview[1] = yy - 0.5*view_hview[0];
            view_wview[1] = 0.5*view_wview[0] - xx;
            view_hview[1] = room_height - yy + 0.5*view_hview[0];
            view_xport[1] = 0;
            view_yport[1] = 0;
            view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
            view_hport[1] = view_hport[0] / view_hview[0] * view_hview[1];
            view_xview[2] = 0;
            view_yview[2] = yy - 0.5*view_hview[0];
            view_wview[2] = xx + 0.5*view_wview[0];
            view_hview[2] = 0.5*view_hview[0] + room_height - yy;
            view_xport[2] = view_wport[1];
            view_yport[2] = 0;
            view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
            view_hport[2] = view_hport[0] / view_hview[0] * view_hview[2];
            view_xview[3] = xx - 0.5*view_wview[0] + room_width;
            view_yview[3] = 0;
            view_wview[3] = 0.5*view_wview[0] - xx;
            view_hview[3] = yy + 0.5*view_hview[0] - room_height;
            view_xport[3] = 0;
            view_yport[3] = view_hport[1];
            view_wport[3] = view_wport[0] / view_wview[0] * view_wview[3];
            view_hport[3] = view_hport[0] / view_hview[0] * view_hview[3];
            view_xview[4] = 0;
            view_yview[4] = 0;
            view_wview[4] = x + 0.5*view_wview[0];
            view_hview[4] = y + 0.5*view_hview[0] - room_height;
            view_xport[4] = view_wport[3];
            view_yport[4] = view_hport[2];
            view_wport[4] = view_wport[0] / view_wview[0] * view_wview[4];
            view_hport[4] = view_hport[0] / view_hview[0] * view_hview[4];
        }
        else  // the view is colliding with the left edge of the room
        {
            view_visible[0] = false;
            view_visible[1] = true;
            view_visible[2] = true;
            view_visible[3] = false;
            view_visible[4] = false;
            view_xview[1] = room_width - 0.5*view_wview[0] + xx;
            view_yview[1] = yy - 0.5*view_hview[0];
            view_wview[1] = 0.5*view_wview[0] - xx;
            view_hview[1] = view_hview[0];
            view_xport[1] = 0;
            view_yport[1] = 0;
            view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
            view_hport[1] = view_hport[0];
            view_xview[2] = 0;
            view_yview[2] = yy - 0.5*view_hview[0];
            view_wview[2] = xx + 0.5*view_wview[0];
            view_hview[2] = view_hview[0];
            view_xport[2] = view_wport[1];
            view_yport[2] = 0;
            view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
            view_hport[2] = view_hport[0];
        }
    }
    else if (xx + 0.5*view_wview[0] > room_width) // the view is colliding with the rigth edge of the room
    {
        if (yy < 0.5*view_hview[0]) // the view is colliding with the top rigth edge of the room
        {  
            view_visible[0] = false;
            view_visible[1] = true;
            view_visible[2] = true;
            view_visible[3] = true;
            view_visible[4] = true;
            view_xview[1] = xx - 0.5*view_wview[0];
            view_yview[1] = room_height + yy - 0.5*view_hview[0];
            view_wview[1] = room_width - xx + 0.5*view_wview[0];
            view_hview[1] = 0.5*view_hview[0] - yy;
            view_xport[1] = 0;
            view_yport[1] = 0;
            view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
            view_hport[1] = view_hport[0] / view_hview[0] * view_hview[1];
            view_xview[2] = 0;
            view_yview[2] = room_height + yy - 0.5*view_hview[0];
            view_wview[2] = xx + 0.5*view_wview[0] - room_width;
            view_hview[2] = 0.5*view_hview[0] - yy;
            view_xport[2] = view_wport[1];
            view_yport[2] = 0;
            view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
            view_hport[2] = view_hport[0] / view_hview[0] * view_hview[2];
            view_xview[3] = xx - 0.5*view_wview[0];
            view_yview[3] = 0;
            view_wview[3] = 0.5*view_wview[0] + room_width - xx;
            view_hview[3] = yy + 0.5*view_hview[0];
            view_xport[3] = 0;
            view_yport[3] = view_hport[1];
            view_wport[3] = view_wport[0] / view_wview[0] * view_wview[3];
            view_hport[3] = view_hport[0] / view_hview[0] * view_hview[3];
            view_xview[4] = 0;
            view_yview[4] = 0;
            view_wview[4] = xx + 0.5*view_wview[0] - room_width;
            view_hview[4] = yy + 0.5*view_hview[0]
            view_xport[4] = view_wport[3];
            view_yport[4] = view_hport[2];
            view_wport[4] = view_wport[0] / view_wview[0] * view_wview[4];
            view_hport[4] = view_hport[0] / view_hview[0] * view_hview[4];
        }
        else if (yy + 0.5*view_hview[0] > room_height) // the view is colliding with the bottom right edge of the room
        {
            view_visible[0] = false;
            view_visible[1] = true;
            view_visible[2] = true;
            view_visible[3] = true;
            view_visible[4] = true;
          
            view_xview[1] = xx - 0.5*view_wview[0];
            view_yview[1] = yy - 0.5*view_hview[0];
            view_wview[1] = room_width - xx + 0.5*view_wview[0];
            view_hview[1] = room_height - yy + 0.5*view_hview[0];
          
            view_xport[1] = 0;
            view_yport[1] = 0;
            view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
            view_hport[1] = view_hport[0] / view_hview[0] * view_hview[1];
          
            view_xview[2] = 0;
            view_yview[2] = yy - 0.5*view_hview[0];
            view_wview[2] = xx + 0.5*view_wview[0] - room_width;
            view_hview[2] = 0.5*view_hview[0] + room_height - yy;
          
            view_xport[2] = view_wport[1];
            view_yport[2] = 0;
            view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
            view_hport[2] = view_hport[0] / view_hview[0] * view_hview[2];
          
            view_xview[3] = xx - 0.5*view_wview[0];
            view_yview[3] = 0;
            view_wview[3] = room_width - xx + 0.5*view_wview[0];
            view_hview[3] = yy + 0.5*view_hview[0] - room_height;
          
            view_xport[3] = 0;
            view_yport[3] = view_hport[1];
            view_wport[3] = view_wport[0] / view_wview[0] * view_wview[3];
            view_hport[3] = view_hport[0] / view_hview[0] * view_hview[3];
          
            view_xview[4] = 0;
            view_yview[4] = 0;
            view_wview[4] = xx + 0.5*view_wview[0] - room_width;
            view_hview[4] = yy + 0.5*view_hview[0] - room_height;
          
            view_xport[4] = view_wport[3];
            view_yport[4] = view_hport[2];
            view_wport[4] = view_wport[0] / view_wview[0] * view_wview[4];
            view_hport[4] = view_hport[0] / view_hview[0] * view_hview[4];  
        }
        else // the view is colliding with the right edge of the room
        {
            view_visible[0] = false;
            view_visible[1] = true;
            view_visible[2] = true;
            view_visible[3] = false;
            view_visible[4] = false;
            view_xview[1] = xx - 0.5*view_wview[0];
            view_yview[1] = yy - 0.5*view_hview[0];
            view_wview[1] = 0.5*view_wview[0] + room_width - xx;
            view_hview[1] = view_hview[0];
            view_xport[1] = 0;
            view_yport[1] = 0;
            view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
            view_hport[1] = view_hport[0];
            view_xview[2] = 0;
            view_yview[2] = yy - 0.5*view_hview[0];
            view_wview[2] = 0.5*view_wview[0] + xx - room_width;
            view_hview[2] = view_hview[0];
            view_xport[2] = view_wport[1];
            view_yport[2] = 0;
            view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
            view_hport[2] = view_hport[0];  
        }
    }
    else if (yy < 0.5*view_hview[0]) // the view is colliding with the top edge of the room
    {
        view_visible[0] = false;
        view_visible[1] = true;
        view_visible[2] = true;
        view_visible[3] = false;
        view_visible[4] = false;
        view_yview[1] = room_height - 0.5*view_hview[0] + yy;
        view_xview[1] = xx - 0.5*view_wview[0];
        view_hview[1] = 0.5*view_hview[0] - yy;
        view_wview[1] = view_wview[0];
        view_yport[1] = 0;
        view_xport[1] = 0;
        view_hport[1] = view_hport[0] / view_hview[0] * view_hview[1];
        view_wport[1] = view_wport[0];
        view_yview[2] = 0;
        view_xview[2] = xx - 0.5*view_wview[0];
        view_hview[2] = yy + 0.5*view_hview[0];
        view_wview[2] = view_wview[0];
        view_yport[2] = view_hport[1];
        view_xport[2] = 0;
        view_hport[2] = view_hport[0] / view_hview[0] * view_hview[2];
        view_wport[2] = view_wport[0];  
    }
    else if (yy + 0.5*view_hview[0] > room_height) // the view is colliding with the bottom edge of the room
    {
        view_visible[0] = false;
        view_visible[1] = true;
        view_visible[2] = true;
        view_visible[3] = false;
        view_visible[4] = false;
        view_xview[1] = xx - 0.5*view_wview[0];
        view_yview[1] = yy - 0.5*view_hview[0];
        view_wview[1] = view_wview[0];
        view_hview[1] = 0.5*view_hview[0] + room_height - yy;
        view_xport[1] = 0;
        view_yport[1] = 0;
        view_wport[1] = view_wport[0] / view_wview[0] * view_wview[1];
        view_hport[1] = view_hport[0] / view_hview[0] * view_hview[1];
        view_xview[2] = xx - 0.5*view_wview[0];
        view_yview[2] = 0;
        view_wview[2] = view_wview[0];
        view_hview[2] = 0.5*view_hview[0] + yy - room_height;
        view_xport[2] = 0;
        view_yport[2] = view_hport[1];
        view_wport[2] = view_wport[0] / view_wview[0] * view_wview[2];
        view_hport[2] = view_hport[0] / view_hview[0] * view_hview[2];
    }
    else
    {
        view_visible[0] = true;
        view_visible[1] = false;
        view_visible[2] = false;
        view_visible[3] = false;
        view_visible[4] = false;
    }
}

Anyone know why this happens? Could it just be that I need to do some rounding in the above script?
 
Last edited by a moderator:
Top