Various graphics fixes.

This commit is contained in:
Steve 2018-12-06 16:52:13 +00:00
parent 6d8cb00e3e
commit 934b2a6d67
24 changed files with 234 additions and 145 deletions

View File

@ -224,6 +224,8 @@ static void draw(void)
drawBackground(battle.background); drawBackground(battle.background);
setAtlasColor(255, 255, 255, 255);
blitScaled(battle.planetTexture, battle.planet.x, battle.planet.y, battle.planetWidth, battle.planetHeight, 0); blitScaled(battle.planetTexture, battle.planet.x, battle.planet.y, battle.planetWidth, battle.planetHeight, 0);
if (battle.destroyTorelli) if (battle.destroyTorelli)

View File

@ -90,6 +90,7 @@ extern void awardTrophy(char *id);
extern void initCredits(void); extern void initCredits(void);
extern void showOKCancelDialog(void (*okCallback)(void), void (*cancelCallback)(void), const char *format, ...); extern void showOKCancelDialog(void (*okCallback)(void), void (*cancelCallback)(void), const char *format, ...);
extern char *getTranslatedString(char *string); extern char *getTranslatedString(char *string);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -139,8 +139,10 @@ void drawEffects(void)
{ {
SDL_SetRenderDrawColor(app.renderer, e->r, e->g, e->b, e->a); SDL_SetRenderDrawColor(app.renderer, e->r, e->g, e->b, e->a);
if (e->texture != NULL)
{
SDL_SetTextureBlendMode(e->texture->texture, SDL_BLENDMODE_ADD); SDL_SetTextureBlendMode(e->texture->texture, SDL_BLENDMODE_ADD);
SDL_SetTextureAlphaMod(e->texture->texture, e->a); }
switch (e->type) switch (e->type)
{ {
@ -153,24 +155,26 @@ void drawEffects(void)
break; break;
case EFFECT_TEXTURE: case EFFECT_TEXTURE:
SDL_SetTextureColorMod(e->texture->texture, e->r, e->g, e->b); setAtlasColor(e->r, e->g, e->b, e->a);
blitScaled(e->texture, e->x - battle.camera.x, e->y - battle.camera.y, e->size, e->size, 0); blitScaled(e->texture, e->x - battle.camera.x, e->y - battle.camera.y, e->size, e->size, 0);
break; break;
case EFFECT_HALO: case EFFECT_HALO:
SDL_SetTextureColorMod(e->texture->texture, e->r, e->g, e->b); setAtlasColor(e->r, e->g, e->b, e->a);
blitScaled(e->texture, e->x - battle.camera.x - (e->size / 2), e->y - battle.camera.y - (e->size / 2), e->size, e->size, 0); blitScaled(e->texture, e->x - battle.camera.x - (e->size / 2), e->y - battle.camera.y - (e->size / 2), e->size, e->size, 0);
break; break;
case EFFECT_ECM: case EFFECT_ECM:
SDL_SetTextureColorMod(e->texture->texture, e->r, e->g, e->b); setAtlasColor(e->r, e->g, e->b, e->a);
blitScaled(e->texture, SCREEN_WIDTH / 2 - (e->size / 2), SCREEN_HEIGHT / 2 - (e->size / 2), e->size, e->size, 0); blitScaled(e->texture, SCREEN_WIDTH / 2 - (e->size / 2), SCREEN_HEIGHT / 2 - (e->size / 2), e->size, e->size, 0);
break; break;
} }
SDL_SetTextureAlphaMod(e->texture->texture, 255); if (e->texture != NULL)
{
SDL_SetTextureBlendMode(e->texture->texture, SDL_BLENDMODE_BLEND); SDL_SetTextureBlendMode(e->texture->texture, SDL_BLENDMODE_BLEND);
} }
}
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE); SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
} }

View File

@ -27,6 +27,7 @@ extern AtlasImage *getAtlasImage(char *name);
extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2); extern int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2);
extern void *resize(void *array, int oldSize, int newSize); extern void *resize(void *array, int oldSize, int newSize);
extern int isOnBattleScreen(int x, int y, int w, int h); extern int isOnBattleScreen(int x, int y, int w, int h);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -420,21 +420,21 @@ void drawEntities(void)
static void drawEntity(Entity *e) static void drawEntity(Entity *e)
{ {
SDL_SetTextureColorMod(e->texture->texture, 255, 255, 255); setAtlasColor(255, 255, 255, 255);
if (e->armourHit > 0) if (e->armourHit > 0)
{ {
SDL_SetTextureColorMod(e->texture->texture, 255, 255 - e->armourHit, 255 - e->armourHit); setAtlasColor(255, 255 - e->armourHit, 255 - e->armourHit, 255);
} }
if (e->systemHit > 0) if (e->systemHit > 0)
{ {
SDL_SetTextureColorMod(e->texture->texture, 255 - e->systemHit, 255, 255); setAtlasColor(255 - e->systemHit, 255, 255, 255);
} }
if (e->flags & EF_DISABLED) if (e->flags & EF_DISABLED)
{ {
SDL_SetTextureColorMod(e->texture->texture, disabledGlow, disabledGlow, 255); setAtlasColor(disabledGlow, disabledGlow, 255, 255);
} }
blitRotated(e->texture, e->x - battle.camera.x, e->y - battle.camera.y, e->angle); blitRotated(e->texture, e->x - battle.camera.x, e->y - battle.camera.y, e->angle);
@ -443,8 +443,6 @@ static void drawEntity(Entity *e)
{ {
drawShieldHitEffect(e); drawShieldHitEffect(e);
} }
SDL_SetTextureColorMod(e->texture->texture, 255, 255, 255);
} }
static void drawHealthBar(Entity *e) static void drawHealthBar(Entity *e)

View File

@ -39,6 +39,7 @@ extern int isOnBattleScreen(int x, int y, int w, int h);
extern long lookup(char *name); extern long lookup(char *name);
extern void awardTrophy(char *id); extern void awardTrophy(char *id);
extern void resetFighter(Entity *e); extern void resetFighter(Entity *e);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -928,12 +928,11 @@ static void addFighterStat(char *key)
t = malloc(sizeof(Tuple)); t = malloc(sizeof(Tuple));
memset(t, 0, sizeof(Tuple)); memset(t, 0, sizeof(Tuple));
tail->next = t;
STRNCPY(t->key, key, MAX_NAME_LENGTH); STRNCPY(t->key, key, MAX_NAME_LENGTH);
t->value = 0; t->value = 0;
tail->next = t;
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Added '%s' to fighter stats", key); SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Added '%s' to fighter stats", key);
} }
@ -1079,6 +1078,12 @@ void destroyFighterDefs(void)
{ {
e = defHead.next; e = defHead.next;
defHead.next = e->next; defHead.next = e->next;
if (e->description)
{
free(e->description);
}
free(e); free(e);
} }
} }

View File

@ -223,6 +223,8 @@ static void drawHealthBars(void)
g = 200; g = 200;
} }
setAtlasColor(255, 255, 255, 255);
blit(armour, 6, 9, 0); blit(armour, 6, 9, 0);
drawHealthShieldBar(player->health, player->maxHealth, 30, 10, r, g, b, 1); drawHealthShieldBar(player->health, player->maxHealth, 30, 10, r, g, b, 1);
@ -273,6 +275,8 @@ static void drawHealthShieldBar(int current, int max, int x, int y, int r, int g
static void drawAbilityBars(void) static void drawAbilityBars(void)
{ {
setAtlasColor(255, 255, 255, 255);
blit(boost, 6, 49, 0); blit(boost, 6, 49, 0);
drawBoostECMBar(battle.boostTimer, BOOST_RECHARGE_TIME, 30, 50, 128, 128, 255); drawBoostECMBar(battle.boostTimer, BOOST_RECHARGE_TIME, 30, 50, 128, 128, 255);
@ -320,6 +324,8 @@ static void drawWeaponInfo(void)
{ {
int i, y; int i, y;
setAtlasColor(255, 255, 255, 255);
if (!player->combinedGuns) if (!player->combinedGuns)
{ {
if (battle.numPlayerGuns) if (battle.numPlayerGuns)
@ -367,19 +373,19 @@ static void drawPlayerTargeter(void)
{ {
if (player->target) if (player->target)
{ {
SDL_SetTextureColorMod(targetCircle->texture, 255, 0, 0); setAtlasColor(255, 0, 0, 255);
} }
else if (battle.missionTarget) else if (battle.missionTarget)
{ {
SDL_SetTextureColorMod(targetCircle->texture, 0, 255, 0); setAtlasColor(0, 255, 0, 255);
} }
else if (battle.messageSpeaker) else if (battle.messageSpeaker)
{ {
SDL_SetTextureColorMod(targetCircle->texture, 255, 255, 255); setAtlasColor(255, 255, 255, 255);
} }
else else
{ {
SDL_SetTextureColorMod(targetCircle->texture, 255, 255, 0); setAtlasColor(255, 255, 0, 255);
} }
blit(targetCircle, player->x - battle.camera.x, player->y - battle.camera.y, 1); blit(targetCircle, player->x - battle.camera.x, player->y - battle.camera.y, 1);
@ -394,7 +400,7 @@ static void drawPlayerTargeter(void)
x += sin(TO_RAIDANS(angle)) * 45; x += sin(TO_RAIDANS(angle)) * 45;
y += -cos(TO_RAIDANS(angle)) * 45; y += -cos(TO_RAIDANS(angle)) * 45;
SDL_SetTextureColorMod(targetPointer->texture, 255, 0, 0); setAtlasColor(255, 0, 0, 255);
blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle); blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle);
} }
@ -408,7 +414,7 @@ static void drawPlayerTargeter(void)
x += sin(TO_RAIDANS(angle)) * 45; x += sin(TO_RAIDANS(angle)) * 45;
y += -cos(TO_RAIDANS(angle)) * 45; y += -cos(TO_RAIDANS(angle)) * 45;
SDL_SetTextureColorMod(targetPointer->texture, 0, 255, 0); setAtlasColor(0, 255, 0, 255);
blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle); blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle);
} }
@ -422,7 +428,7 @@ static void drawPlayerTargeter(void)
x += sin(TO_RAIDANS(angle)) * 45; x += sin(TO_RAIDANS(angle)) * 45;
y += -cos(TO_RAIDANS(angle)) * 45; y += -cos(TO_RAIDANS(angle)) * 45;
SDL_SetTextureColorMod(targetPointer->texture, 255, 255, 0); setAtlasColor(255, 255, 0, 255);
blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle); blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle);
} }
@ -436,7 +442,7 @@ static void drawPlayerTargeter(void)
x += sin(TO_RAIDANS(angle)) * 45; x += sin(TO_RAIDANS(angle)) * 45;
y += -cos(TO_RAIDANS(angle)) * 45; y += -cos(TO_RAIDANS(angle)) * 45;
SDL_SetTextureColorMod(targetPointer->texture, 255, 255, 255); setAtlasColor(255, 255, 255, 255);
blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle); blitRotated(targetPointer, x - battle.camera.x, y - battle.camera.y, angle);
} }
@ -445,12 +451,12 @@ static void drawPlayerTargeter(void)
static void drawNumFighters(void) static void drawNumFighters(void)
{ {
/* Allies */ /* Allies */
SDL_SetTextureColorMod(smallFighter->texture, 150, 200, 255); setAtlasColor(150, 200, 255, 255);
blit(smallFighter, 400, 15, 0); blit(smallFighter, 400, 15, 0);
drawText(425, 11, 14, TA_LEFT, colors.white, battle.numAllies < 1000 ? "(%d)" : "(999+)", battle.numAllies); drawText(425, 11, 14, TA_LEFT, colors.white, battle.numAllies < 1000 ? "(%d)" : "(999+)", battle.numAllies);
/* Enemies */ /* Enemies */
SDL_SetTextureColorMod(smallFighter->texture, 255, 100, 100); setAtlasColor(255, 100, 100, 255);
blit(smallFighter, SCREEN_WIDTH - 410, 15, 0); blit(smallFighter, SCREEN_WIDTH - 410, 15, 0);
drawText(SCREEN_WIDTH - 420, 11, 14, TA_RIGHT, colors.white, !battle.unlimitedEnemies ? "(%d)" : "(999+)", battle.numEnemies); drawText(SCREEN_WIDTH - 420, 11, 14, TA_RIGHT, colors.white, !battle.unlimitedEnemies ? "(%d)" : "(999+)", battle.numEnemies);
} }
@ -459,6 +465,8 @@ static void drawObjectives(void)
{ {
int timeRemaining; int timeRemaining;
setAtlasColor(255, 255, 255, 255);
if (!game.currentMission->challengeData.isChallenge) if (!game.currentMission->challengeData.isChallenge)
{ {
blit(objectives, (SCREEN_WIDTH / 2) - 50, 14, 0); blit(objectives, (SCREEN_WIDTH / 2) - 50, 14, 0);
@ -608,7 +616,7 @@ static void drawPlayerSelect(void)
SDL_RenderFillRect(app.renderer, NULL); SDL_RenderFillRect(app.renderer, NULL);
SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE); SDL_SetRenderDrawBlendMode(app.renderer, SDL_BLENDMODE_NONE);
SDL_SetTextureColorMod(targetCircle->texture, 0, 200, 255); setAtlasColor(0, 200, 255, 255);
blit(targetCircle, player->x - battle.camera.x, player->y - battle.camera.y, 1); blit(targetCircle, player->x - battle.camera.x, player->y - battle.camera.y, 1);
@ -619,6 +627,8 @@ static void drawPlayerSelect(void)
drawText(SCREEN_WIDTH / 2, 540, 20, TA_CENTER, colors.white, "%s (%d%% / %d%%)", player->defName, getPercent(player->health, player->maxHealth), getPercent(player->shield, player->maxShield)); drawText(SCREEN_WIDTH / 2, 540, 20, TA_CENTER, colors.white, "%s (%d%% / %d%%)", player->defName, getPercent(player->health, player->maxHealth), getPercent(player->shield, player->maxShield));
} }
setAtlasColor(255, 255, 255, 255);
blit(arrowLeft, (SCREEN_WIDTH / 2) - 200, 520, 1); blit(arrowLeft, (SCREEN_WIDTH / 2) - 200, 520, 1);
blit(arrowRight, (SCREEN_WIDTH / 2) + 200, 520, 1); blit(arrowRight, (SCREEN_WIDTH / 2) + 200, 520, 1);
} }

View File

@ -35,6 +35,7 @@ extern int playerHasGun(int type);
extern char *getTranslatedString(char *string); extern char *getTranslatedString(char *string);
extern char *timeToString(long millis, int showHours); extern char *timeToString(long millis, int showHours);
extern int jumpgateEnabled(void); extern int jumpgateEnabled(void);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -552,19 +552,21 @@ static void drawGalaxy(void)
switch (starSystem->type) switch (starSystem->type)
{ {
case SS_NORMAL: case SS_NORMAL:
SDL_SetTextureColorMod(arrowTexture->texture, 255, 0, 0); setAtlasColor(255, 0, 0, 255);
break; break;
case SS_SOL: case SS_SOL:
SDL_SetTextureColorMod(arrowTexture->texture, 0, 255, 0); setAtlasColor(0, 255, 0, 255);
break; break;
case SS_PANDORAN: case SS_PANDORAN:
SDL_SetTextureColorMod(arrowTexture->texture, 64, 128, 255); setAtlasColor(64, 128, 255, 255);
break; break;
} }
blitRotated(arrowTexture, ax, ay, aa); blitRotated(arrowTexture, ax, ay, aa);
setAtlasColor(255, 255, 255, 255);
} }
} }
} }
@ -696,7 +698,7 @@ static void drawStarSystemDetail(void)
drawText(525, 160, 18, TA_LEFT, colors.lightGrey, CRAFT_TEXT, game.currentMission->craft); drawText(525, 160, 18, TA_LEFT, colors.lightGrey, CRAFT_TEXT, game.currentMission->craft);
drawText(525, 185, 18, TA_LEFT, colors.lightGrey, SQUADRON_TEXT, game.currentMission->squadron); drawText(525, 185, 18, TA_LEFT, colors.lightGrey, SQUADRON_TEXT, game.currentMission->squadron);
app.textWidth = 500; app.textWidth = 550;
drawText(525, 230, 22, TA_LEFT, colors.white, game.currentMission->description); drawText(525, 230, 22, TA_LEFT, colors.white, game.currentMission->description);

View File

@ -73,6 +73,7 @@ extern void doFighterDatabase(void);
extern void initFighterDatabaseDisplay(void); extern void initFighterDatabaseDisplay(void);
extern void drawFighterDatabase(void); extern void drawFighterDatabase(void);
extern void autoSizeWidgetButtons(char *group, int recenter); extern void autoSizeWidgetButtons(char *group, int recenter);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Colors colors; extern Colors colors;

View File

@ -182,7 +182,7 @@ static void draw(void)
drawStars(); drawStars();
SDL_SetTextureColorMod(earthTexture->texture, 255, 255, 255); setAtlasColor(255, 255, 255, 255);
blit(earthTexture, earth.x, earth.y, 1); blit(earthTexture, earth.x, earth.y, 1);
@ -190,7 +190,7 @@ static void draw(void)
drawEffects(); drawEffects();
SDL_SetTextureColorMod(logo[0]->texture, 255, 255, 255); setAtlasColor(255, 255, 255, 255);
blit(logo[0], (SCREEN_WIDTH / 2) - logo[0]->rect.w, 30, 0); blit(logo[0], (SCREEN_WIDTH / 2) - logo[0]->rect.w, 30, 0);
blit(logo[1], (SCREEN_WIDTH / 2), 30, 0); blit(logo[1], (SCREEN_WIDTH / 2), 30, 0);
@ -228,10 +228,10 @@ static void drawFighters(void)
{ {
int i; int i;
setAtlasColor(255, 255, 255, 255);
for (i = 0 ; i < NUM_FIGHTERS ; i++) for (i = 0 ; i < NUM_FIGHTERS ; i++)
{ {
SDL_SetTextureColorMod(fighters[i].texture->texture, 255, 255, 255);
blit(fighters[i].texture, fighters[i].x, fighters[i].y, 1); blit(fighters[i].texture, fighters[i].x, fighters[i].y, 1);
} }
} }

View File

@ -66,6 +66,7 @@ extern void drawFighterDatabase(void);
extern void initFighterDatabaseDisplay(void); extern void initFighterDatabaseDisplay(void);
extern void doFighterDatabase(void); extern void doFighterDatabase(void);
extern void autoSizeWidgetButtons(char *group, int recenter); extern void autoSizeWidgetButtons(char *group, int recenter);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -171,7 +171,7 @@ void drawTrophies(void)
blitRotated(sparkle, x + 32, y + 32, sparkleAngle); blitRotated(sparkle, x + 32, y + 32, sparkleAngle);
blitRotated(sparkle, x + 32, y + 32, -sparkleAngle); blitRotated(sparkle, x + 32, y + 32, -sparkleAngle);
SDL_SetTextureColorMod(trophyIcons[t->value]->texture, 255, 255, 255); setAtlasColor(255, 255, 255, 255);
blitScaled(trophyIcons[t->value], x, y, 64, 64, 0); blitScaled(trophyIcons[t->value], x, y, 64, 64, 0);
drawText(x + 85, y - 10, 20, TA_LEFT, colors.yellow, t->title); drawText(x + 85, y - 10, 20, TA_LEFT, colors.yellow, t->title);
drawText(x + 85, y + 20, 18, TA_LEFT, colors.white, t->description); drawText(x + 85, y + 20, 18, TA_LEFT, colors.white, t->description);
@ -512,19 +512,19 @@ static void setSparkleColor(Trophy *t)
switch (t->value) switch (t->value)
{ {
case TROPHY_BRONZE: case TROPHY_BRONZE:
SDL_SetTextureColorMod(sparkle->texture, 255, 128, 0); setAtlasColor(255, 128, 0, 255);
break; break;
case TROPHY_SILVER: case TROPHY_SILVER:
SDL_SetTextureColorMod(sparkle->texture, 192, 192, 192); setAtlasColor(192, 192, 192, 255);
break; break;
case TROPHY_GOLD: case TROPHY_GOLD:
SDL_SetTextureColorMod(sparkle->texture, 255, 255, 0); setAtlasColor(255, 255, 0, 255);
break; break;
case TROPHY_PLATINUM: case TROPHY_PLATINUM:
SDL_SetTextureColorMod(sparkle->texture, 0, 128, 255); setAtlasColor(0, 128, 255, 255);
break; break;
} }
} }

View File

@ -42,6 +42,7 @@ extern char *timeToDate(long millis);
extern void calcTextDimensions(char *text, int size, int *w, int *h); extern void calcTextDimensions(char *text, int size, int *w, int *h);
extern void awardPandoranCraftTrophy(void); extern void awardPandoranCraftTrophy(void);
extern float mod(float n, float x); extern float mod(float n, float x);
extern void setAtlasColor(int r, int g, int b, int a);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -28,7 +28,6 @@ int main(int argc, char *argv[])
{ {
long then, lastFrameTime, frames; long then, lastFrameTime, frames;
float remainder; float remainder;
SDL_Event event;
memset(&app, 0, sizeof(App)); memset(&app, 0, sizeof(App));
memset(&dev, 0, sizeof(Dev)); memset(&dev, 0, sizeof(Dev));
@ -65,51 +64,7 @@ int main(int argc, char *argv[])
{ {
capFrameRate(&then, &remainder); capFrameRate(&then, &remainder);
while (SDL_PollEvent(&event)) doInput();
{
switch (event.type)
{
case SDL_MOUSEMOTION:
doMouseMotion(&event.motion);
break;
case SDL_MOUSEWHEEL:
doMouseWheel(&event.wheel);
break;
case SDL_MOUSEBUTTONDOWN:
doMouseDown(&event.button);
break;
case SDL_MOUSEBUTTONUP:
doMouseUp(&event.button);
break;
case SDL_KEYDOWN:
doKeyDown(&event.key);
break;
case SDL_KEYUP:
doKeyUp(&event.key);
break;
case SDL_QUIT:
exit(0);
break;
case SDL_WINDOWEVENT:
switch (event.window.event)
{
case SDL_WINDOWEVENT_FOCUS_GAINED:
musicSetPlaying(1);
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
musicSetPlaying(0);
break;
}
break;
}
}
if (app.modalDialog.type != MD_NONE) if (app.modalDialog.type != MD_NONE)
{ {
@ -209,7 +164,7 @@ static void handleLoggingArgs(int argc, char *argv[])
{ {
int i; int i;
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN);
for (i = 1 ; i < argc ; i++) for (i = 1 ; i < argc ; i++)
{ {
@ -220,11 +175,6 @@ static void handleLoggingArgs(int argc, char *argv[])
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG); SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG);
} }
if (strcmp(argv[i], "-warn") == 0)
{
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN);
}
if (strcmp(argv[i], "-info") == 0) if (strcmp(argv[i], "-info") == 0)
{ {
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);

View File

@ -54,7 +54,7 @@ extern void saveGame(void);
extern void initCredits(void); extern void initCredits(void);
extern void doTrophyAlerts(void); extern void doTrophyAlerts(void);
extern void drawTrophyAlert(void); extern void drawTrophyAlert(void);
extern void musicSetPlaying(int playing); extern void doInput(void);
App app; App app;
Colors colors; Colors colors;

View File

@ -34,6 +34,12 @@ void initAtlas(void)
loadAtlasData(); loadAtlasData();
} }
void setAtlasColor(int r, int g, int b, int a)
{
SDL_SetTextureColorMod(atlasTexture, r, g, b);
SDL_SetTextureAlphaMod(atlasTexture, a);
}
AtlasImage *getAtlasImage(char *filename) AtlasImage *getAtlasImage(char *filename)
{ {
AtlasImage *a; AtlasImage *a;

View File

@ -188,10 +188,16 @@ void scrollBackground(float x, float y)
void drawBackground(SDL_Texture *texture) void drawBackground(SDL_Texture *texture)
{ {
int i; int i;
SDL_Rect dstRect;
for (i = 0 ; i < 4 ; i++) for (i = 0 ; i < 4 ; i++)
{ {
/*blitScaled(texture, backgroundPoint[i].x, backgroundPoint[i].y, SCREEN_WIDTH, SCREEN_HEIGHT, 0);*/ dstRect.x = backgroundPoint[i].x;
dstRect.y = backgroundPoint[i].y;
dstRect.w = SCREEN_WIDTH;
dstRect.h = SCREEN_HEIGHT;
SDL_RenderCopy(app.renderer, texture, NULL, &dstRect);
} }
} }

View File

@ -118,6 +118,57 @@ void drawMouse(void)
blit(mousePointer, app.mouse.x, app.mouse.y, 1); blit(mousePointer, app.mouse.x, app.mouse.y, 1);
} }
void doInput(void)
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_MOUSEMOTION:
doMouseMotion(&event.motion);
break;
case SDL_MOUSEWHEEL:
doMouseWheel(&event.wheel);
break;
case SDL_MOUSEBUTTONDOWN:
doMouseDown(&event.button);
break;
case SDL_MOUSEBUTTONUP:
doMouseUp(&event.button);
break;
case SDL_KEYDOWN:
doKeyDown(&event.key);
break;
case SDL_KEYUP:
doKeyUp(&event.key);
break;
case SDL_QUIT:
exit(0);
break;
case SDL_WINDOWEVENT:
switch (event.window.event)
{
case SDL_WINDOWEVENT_FOCUS_GAINED:
musicSetPlaying(1);
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
musicSetPlaying(0);
break;
}
break;
}
}
}
void clearInput(void) void clearInput(void)
{ {
SDL_Event event; SDL_Event event;

View File

@ -22,5 +22,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern AtlasImage *getAtlasImage(char *filename); extern AtlasImage *getAtlasImage(char *filename);
extern void blit(AtlasImage *atlasImage, int x, int y, int centered); extern void blit(AtlasImage *atlasImage, int x, int y, int centered);
extern void musicSetPlaying(int playing);
extern App app; extern App app;

View File

@ -154,6 +154,8 @@ static void loadFighterStats(cJSON *fighterStatsJSON)
Tuple *t, *tail; Tuple *t, *tail;
cJSON *fighterStatJSON; cJSON *fighterStatJSON;
destroyFighterStats();
tail = &game.fighterStatHead; tail = &game.fighterStatHead;
if (fighterStatsJSON) if (fighterStatsJSON)

View File

@ -30,5 +30,6 @@ extern char *getSaveFilePath(char *filename);
extern char *getLookupName(char *prefix, long num); extern char *getLookupName(char *prefix, long num);
extern StarSystem *getStarSystem(char *name); extern StarSystem *getStarSystem(char *name);
extern Trophy *getTrophy(char *id); extern Trophy *getTrophy(char *id);
extern void destroyFighterStats(void);
extern Game game; extern Game game;

View File

@ -3,7 +3,7 @@
<?php <?php
/* /*
Copyright (C) 2015-2016 Parallel Realities Copyright (C) 2015-2018 Parallel Realities
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
@ -24,6 +24,51 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
$UPDATE_FILES = false; $UPDATE_FILES = false;
function funcSort($a, $b)
{
$a = str_replace("*", "", $a);
$b = str_replace("*", "", $b);
$aParts = explode(" ", $a);
$bParts = explode(" ", $b);
return strcmp($aParts[2], $bParts[2]);
}
function updateExterns($header, $defines, $functions, $structs)
{
asort($defines);
usort($functions, "funcSort");
asort($structs);
$newHeader = [];
foreach ($header as $line)
{
$newHeader[] = $line;
}
if (count($defines) > 0)
{
$newHeader[] = "\n";
$newHeader = array_merge($newHeader, $defines);
}
if (count($functions) > 0)
{
$newHeader[] = "\n";
$newHeader = array_merge($newHeader, $functions);
}
if (count($structs) > 0)
{
$newHeader[] = "\n";
$newHeader = array_merge($newHeader, $structs);
}
return $newHeader;
}
function cleanHeader($headerFile) function cleanHeader($headerFile)
{ {
global $UPDATE_FILES; global $UPDATE_FILES;
@ -39,22 +84,28 @@ function cleanHeader($headerFile)
{ {
$header = file($headerFile); $header = file($headerFile);
$body = file_get_contents($bodyFile); $body = file_get_contents($bodyFile);
$isMain = strpos($body, "int main(int argc, char *argv[])");
$lines = []; $lines = [];
$defines = [];
$functions = [];
$structs = [];
$i = 0; $i = 0;
$hasChanges = false; $hasChanges = false;
foreach ($header as $line) foreach ($header as $line)
{ {
if (preg_match("/extern|define/", $line) && strstr($line, "getTranslatedString") === FALSE) if ((preg_match("/extern|define/", $line) || preg_match("/;$/", $line)) && strstr($line, "getTranslatedString") === FALSE)
{ {
preg_match($func_pattern, $line, $matches); preg_match($func_pattern, $line, $matches);
if (count($matches) == 3) if (count($matches) == 3)
{ {
unset($header[$i]);
$extern = $matches[2]; $extern = $matches[2];
if (!preg_match_all("/\b[(]?${extern}[\\(;,)\\n]/", $body)) if (!preg_match_all("/\b${extern}\b/", $body))
{ {
if (!$hasChanges) if (!$hasChanges)
{ {
@ -62,22 +113,10 @@ function cleanHeader($headerFile)
$hasChanges = true; $hasChanges = true;
} }
echo "\t- $line"; echo "\t- $line";
unset($header[$i]);
} }
else if (!in_array($line, $lines))
if (!in_array($line, $lines))
{ {
$lines[] = $line; $functions[] = $line;
}
else
{
if (!$hasChanges)
{
echo "$headerFile\n";
$hasChanges = true;
}
echo "\t- $line";
unset($header[$i]);
} }
} }
@ -85,11 +124,15 @@ function cleanHeader($headerFile)
if (count($matches) == 2) if (count($matches) == 2)
{ {
unset($header[$i]);
$extern = $matches[1]; $extern = $matches[1];
$externs[] = $extern; $externs[] = $extern;
if (!preg_match_all("/\b${extern}[\\.\\-\\)]/", $body)) if (!$isMain)
{
if (!preg_match_all("/\b${extern}\b/", $body))
{ {
if (!$hasChanges) if (!$hasChanges)
{ {
@ -97,22 +140,15 @@ function cleanHeader($headerFile)
$hasChanges = true; $hasChanges = true;
} }
echo "\t- $line"; echo "\t- $line";
unset($header[$i]);
} }
else if (!in_array($line, $lines))
if (!in_array($line, $lines))
{ {
$lines[] = $line; $structs[] = $line;
} }
else
{
if (!$hasChanges)
{
echo "$headerFile\n";
$hasChanges = true;
} }
echo "\t- $line"; else if (!in_array($line, $lines))
unset($header[$i]); {
$structs[] = $line;
} }
} }
@ -120,6 +156,8 @@ function cleanHeader($headerFile)
if (count($matches) == 2) if (count($matches) == 2)
{ {
unset($header[$i]);
$extern = $matches[1]; $extern = $matches[1];
$externs[] = $extern; $externs[] = $extern;
@ -132,22 +170,10 @@ function cleanHeader($headerFile)
$hasChanges = true; $hasChanges = true;
} }
echo "\t- $line"; echo "\t- $line";
unset($header[$i]);
} }
else if (!in_array($line, $lines))
if (!in_array($line, $lines))
{ {
$lines[] = $line; $defines[] = $line;
}
else
{
if (!$hasChanges)
{
echo "$headerFile\n";
$hasChanges = true;
}
echo "\t- $line";
unset($header[$i]);
} }
} }
} }
@ -155,7 +181,25 @@ function cleanHeader($headerFile)
$i++; $i++;
} }
if ($UPDATE_FILES && $hasChanges) do
{
$wasBlank = false;
$line = trim(end($header));
if (strlen($line) == 0)
{
array_pop($header);
$wasBlank = true;
}
}
while ($wasBlank);
$defines = array_unique($defines);
$functions = array_unique($functions);
$structs = array_unique($structs);
$header = updateExterns($header, $defines, $functions, $structs);
if ($UPDATE_FILES)
{ {
file_put_contents($headerFile, $header); file_put_contents($headerFile, $header);
} }
@ -174,7 +218,7 @@ function recurseDir($dir)
{ {
recurseDir("$dir/$file"); recurseDir("$dir/$file");
} }
else if (strstr($file, ".h") !== FALSE) else if (strstr($file, ".h") !== FALSE && $file != 'i18n.h')
{ {
cleanHeader("$dir/$file"); cleanHeader("$dir/$file");
} }