Viewports are actually dynamic (and as far as I can tell, are usually made for 3D games), Windows/Areas on the other hand are created with the intent to be within your monitor region (usually for retro 2D games) and the idea is that the last thing you draw is what takes priority. So if I was to draw rain before drawing a level, any rain sprite that was at the same position as any part of the level would be hidden, same for if I was drawing a player just after an enemy; if the player was standing where an enemy was you wouldn't see the enemy. SDL/OPEN_GL uses this for 2D games. RPG Maker uses viewports though, so everything that's closer to you by the z axis is more visible than others, I'll stop there because I'll feel like I'm insulting your intelligence if I keep on blabering; sorry if you feel that way
Logan, that was the script I saw earlier. It affects sprites mainly and masks them somehow, by default it doesn't really affect the viewport and I'm not 100% sure on how I can use this for rewriting the default viewport class, I am in fact a bit lost on how to rewrite the viewport class in the first place because there seems to be literally no documentation on it whatsoever (so I have no idea how it's doing most of what it's doing anyway).
Getting it to draw as a circle shouldn't be too difficult once I know the basics behind it; the following code used in OPEN_GL draws a circle just fine, so I should have that art covered at least
void DrawCircle::Draw( float fScreenRightBorder, float fScreenBottomBorder )
{
float fRed = m_iRandomRedColour * 0.003921f; // Red Divided by 255 to get a float value
float fGreen = m_iRandomGreenColour * 0.003921f;
float fBlue = m_iRandomBlueColour * 0.003921f;
glBegin(GL_TRIANGLE_FAN);
glColor4f(fRed, fGreen, fBlue, 1.f);
glVertex2f((fScreenRightBorder * 0.5f) , (fScreenBottomBorder * 0.5f));
for (float i=0; i <= 360; i += 10)
{
m_fAngle = m_oUtilities->DegToRad(i);
if (m_fRadious <= 500)
{
m_fRadious+= 0.1f;
if (m_fRadious >= 500)
{
m_fRadious = 1000;
}
}
else
{
m_fRadious -= 0.1f;
}
glColor4f(fRed * 0.5f, fGreen * 0.5f, fBlue * 0.5f, 1.f);
glVertex2f((fScreenRightBorder * 0.5f) + (cos(m_fAngle) * m_fRadious),
(fScreenBottomBorder * 0.5f) + (sin(m_fAngle) * m_fRadious));
}
glEnd();
}