Fixed edges of the screen slowing you down.

And unlike a fix I previously did, this one is perfect. Rather than
fiddling with ssx and ssy, I just added some new variables, smx and
smy.
This commit is contained in:
onpon4 2015-02-26 23:23:08 -05:00
parent 775be7afb4
commit c404e3611e
14 changed files with 53 additions and 19 deletions

View File

@ -1219,9 +1219,9 @@ void doAliens()
} }
if ((currentGame.area != 18) || (theEnemy->shield < 0)) if ((currentGame.area != 18) || (theEnemy->shield < 0))
theEnemy->x += engine.ssx; theEnemy->x += engine.ssx + engine.smx;
theEnemy->y += engine.ssy; theEnemy->y += engine.ssy + engine.smy;
} }
theEnemy++; theEnemy++;

View File

@ -43,7 +43,7 @@ void addBullet(object *theWeapon, object *attacker, int y, int dy)
{ {
bullet->dx = theWeapon->speed; bullet->dx = theWeapon->speed;
if ((currentGame.area == 18) || (currentGame.area == 24)) if ((currentGame.area == 18) || (currentGame.area == 24))
bullet->dx += fabsf(engine.ssx); bullet->dx += fabsf(engine.ssx + engine.smx);
} }
else else
{ {
@ -556,8 +556,8 @@ void doBullets()
bullet->target = NULL; bullet->target = NULL;
} }
bullet->x += engine.ssx; bullet->x += engine.ssx + engine.smx;
bullet->y += engine.ssy; bullet->y += engine.ssy + engine.smy;
for (int i = 0 ; i < MAX_ALIENS ; i++) for (int i = 0 ; i < MAX_ALIENS ; i++)
{ {

View File

@ -96,8 +96,8 @@ void doCargo()
blit(cargo[i].image[0], (int)cargo[i].x, (int)cargo[i].y); blit(cargo[i].image[0], (int)cargo[i].x, (int)cargo[i].y);
cargo[i].x += engine.ssx; cargo[i].x += engine.ssx + engine.smx;
cargo[i].y += engine.ssy; cargo[i].y += engine.ssy + engine.smy;
limitFloat(&cargo[i].x, cargo[i].owner->x - 50, cargo[i].owner->x + 50); limitFloat(&cargo[i].x, cargo[i].owner->x - 50, cargo[i].owner->x + 50);
limitFloat(&cargo[i].y, cargo[i].owner->y - 50, cargo[i].owner->y + 50); limitFloat(&cargo[i].y, cargo[i].owner->y - 50, cargo[i].owner->y + 50);

View File

@ -242,8 +242,8 @@ void doCollectables()
if ((collectable->x + collectable->image->w > 0) && (collectable->x < 800) && (collectable->y + collectable->image->h > 0) && (collectable->y < 600)) if ((collectable->x + collectable->image->w > 0) && (collectable->x < 800) && (collectable->y + collectable->image->h > 0) && (collectable->y < 600))
blit(collectable->image, (int)collectable->x, (int)collectable->y); blit(collectable->image, (int)collectable->x, (int)collectable->y);
collectable->x += engine.ssx; collectable->x += engine.ssx + engine.smx;
collectable->y += engine.ssy; collectable->y += engine.ssy + engine.smx;
collectable->x += collectable->dx; collectable->x += collectable->dx;
collectable->y += collectable->dy; collectable->y += collectable->dy;

View File

@ -67,8 +67,8 @@ void doDebris()
{ {
debris->thinktime--; debris->thinktime--;
debris->x += engine.ssx; debris->x += engine.ssx + engine.smx;
debris->y += engine.ssy; debris->y += engine.ssy + engine.smy;
debris->x += debris->dx; debris->x += debris->dx;
debris->y += debris->dy; debris->y += debris->dy;

View File

@ -78,8 +78,8 @@ void doExplosions()
if (explosion->active) if (explosion->active)
{ {
explosion->x += engine.ssx; explosion->x += engine.ssx + engine.smx;
explosion->y += engine.ssy; explosion->y += engine.ssy + engine.smy;
if (isOnScreen((int)explosion->x, (int)explosion->y, explosion->image[0]->w, explosion->image[0]->h)) if (isOnScreen((int)explosion->x, (int)explosion->y, explosion->image[0]->w, explosion->image[0]->h))
blit(explosion->image[0], (int)explosion->x, (int)explosion->y); blit(explosion->image[0], (int)explosion->x, (int)explosion->y);

View File

@ -109,6 +109,8 @@ int mainGameLoop()
engine.ssx = 0; engine.ssx = 0;
engine.ssy = 0; engine.ssy = 0;
engine.smx = 0;
engine.smy = 0;
engine.done = 0; engine.done = 0;

View File

@ -29,6 +29,8 @@ void defineGlobals()
engine.ssx = 0; engine.ssx = 0;
engine.ssy = 0; engine.ssy = 0;
engine.smx = 0;
engine.smy = 0;
engine.bulletHead = new object; engine.bulletHead = new object;
engine.bulletHead->next = NULL; engine.bulletHead->next = NULL;

View File

@ -711,8 +711,10 @@ void doStarfield()
else if (star[i].speed == 1) else if (star[i].speed == 1)
color = darkGrey; color = darkGrey;
wrapFloat(&(star[i].x += (engine.ssx * star[i].speed)), 0, screen->w - 1); wrapFloat(&(star[i].x += ((engine.ssx + engine.smx) * star[i].speed)), 0,
wrapFloat(&(star[i].y += (engine.ssy * star[i].speed)), 0, screen->h - 1); screen->w - 1);
wrapFloat(&(star[i].y += ((engine.ssy + engine.smy) * star[i].speed)), 0,
screen->h - 1);
putpixel(screen, (int)star[i].x, (int)star[i].y, color); putpixel(screen, (int)star[i].x, (int)star[i].y, color);
r.x = (int)star[i].x; r.x = (int)star[i].x;

View File

@ -514,7 +514,8 @@ int galaxyMap()
engine.done = 0; engine.done = 0;
engine.keyState[KEY_FIRE] = 0; engine.keyState[KEY_FIRE] = 0;
engine.ssx = engine.ssy = 0; engine.ssx = 0;
engine.ssy = 0;
SDL_Rect r; SDL_Rect r;
SDL_Rect destRect; SDL_Rect destRect;

View File

@ -76,6 +76,9 @@ void doPlayer()
engine.ssx *= 0.99; engine.ssx *= 0.99;
engine.ssy *= 0.99; engine.ssy *= 0.99;
engine.smx = 0;
engine.smy = 0;
int shapeToUse; int shapeToUse;
if (player.shield > -100) if (player.shield > -100)
@ -190,8 +193,26 @@ void doPlayer()
if (engine.done == 0) if (engine.done == 0)
{ {
limitFloat(&player.x, viewBorder, screen->w - viewBorder); if (player.x < viewBorder)
limitFloat(&player.y, viewBorder, screen->h - viewBorder); {
engine.smx += viewBorder - player.x;
player.x = viewBorder;
}
else if (player.x > screen->w - viewBorder)
{
engine.smx += (screen->w - viewBorder) - player.x;
player.x = screen->w - viewBorder;
}
if (player.y < viewBorder)
{
engine.smy += viewBorder - player.y;
player.y = viewBorder;
}
else if (player.y > screen->h - viewBorder)
{
engine.smy += (screen->h - viewBorder) - player.y;
player.y = screen->h - viewBorder;
}
} }
if (player.shield > engine.lowShield) if (player.shield > engine.lowShield)

View File

@ -189,6 +189,8 @@ void doCutscene(int scene)
engine.ssx = -0.5; engine.ssx = -0.5;
engine.ssy = 0; engine.ssy = 0;
engine.smx = 0;
engine.smy = 0;
flushBuffer(); flushBuffer();
freeGraphics(); freeGraphics();
@ -253,7 +255,7 @@ void doCutscene(int scene)
} }
enemy[i].x += enemy[i].dx; enemy[i].x += enemy[i].dx;
enemy[i].y += enemy[i].dy; enemy[i].y += enemy[i].dy;
enemy[i].x += engine.ssx; enemy[i].x += engine.ssx + engine.smx;
blit(enemy[i].image[0], (int)enemy[i].x, (int)enemy[i].y); blit(enemy[i].image[0], (int)enemy[i].x, (int)enemy[i].y);
if (enemy[i].x > (screen->w + 50)) if (enemy[i].x > (screen->w + 50))
{ {

View File

@ -230,6 +230,8 @@ struct globalEngineVariables {
float ssx; float ssx;
float ssy; float ssy;
float smx;
float smy;
Mix_Music *music; Mix_Music *music;

View File

@ -217,6 +217,8 @@ int doTitle()
// Set the star motion // Set the star motion
engine.ssx = -0.5; engine.ssx = -0.5;
engine.ssy = 0; engine.ssy = 0;
engine.smx = 0;
engine.smy = 0;
int then = SDL_GetTicks(); int then = SDL_GetTicks();
int now; int now;