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:
Anyone know why this happens? Could it just be that I need to do some rounding in the above script?
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: