Various bug fixes.
This commit is contained in:
parent
3c7b3b5170
commit
383c8c19a3
|
@ -98,6 +98,9 @@ Entity *initBob(void)
|
||||||
static void init(void)
|
static void init(void)
|
||||||
{
|
{
|
||||||
changeSprite(walkSprite);
|
changeSprite(walkSprite);
|
||||||
|
|
||||||
|
world.bob->checkpoints[0].x = world.bob->x;
|
||||||
|
world.bob->checkpoints[0].y = world.bob->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tick(void)
|
static void tick(void)
|
||||||
|
@ -639,10 +642,10 @@ static SDL_Rect *getCurrentSprite(void)
|
||||||
{
|
{
|
||||||
if (world.bob->alive == ALIVE_ALIVE && world.bob->stunTimer <= 0)
|
if (world.bob->alive == ALIVE_ALIVE && world.bob->stunTimer <= 0)
|
||||||
{
|
{
|
||||||
return &world.bob->sprite[world.bob->facing]->frames[0]->rect;
|
return &world.bob->sprite[world.bob->facing]->frames[world.bob->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &world.bob->sprite[FACING_DIE]->frames[0]->rect;
|
return &world.bob->sprite[FACING_DIE]->frames[world.bob->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void animate(void)
|
static void animate(void)
|
||||||
|
|
|
@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define FLY_ACCEL 0.1
|
#define FLY_ACCEL 0.1
|
||||||
#define FLY_SPEED 8
|
#define FLY_SPEED 8
|
||||||
|
|
||||||
extern Unit *createUnit(void);
|
|
||||||
extern Sprite *getSprite(char *name);
|
extern Sprite *getSprite(char *name);
|
||||||
extern char *getLookupName(const char *prefix, long num);
|
extern char *getLookupName(const char *prefix, long num);
|
||||||
extern long lookup(const char *name);
|
extern long lookup(const char *name);
|
||||||
|
|
|
@ -182,10 +182,10 @@ static SDL_Rect *getCurrentSprite(void)
|
||||||
|
|
||||||
if (b->stunTimer > 0 || b->health <= 0)
|
if (b->stunTimer > 0 || b->health <= 0)
|
||||||
{
|
{
|
||||||
return &b->sprite[FACING_DIE]->frames[0]->rect;
|
return &b->sprite[FACING_DIE]->frames[self->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &b->sprite[b->facing]->frames[0]->rect;
|
return &b->sprite[b->facing]->frames[self->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void animate(void)
|
static void animate(void)
|
||||||
|
|
|
@ -386,8 +386,8 @@ static SDL_Rect *getCurrentSprite(void)
|
||||||
{
|
{
|
||||||
if (self->health <= 0)
|
if (self->health <= 0)
|
||||||
{
|
{
|
||||||
return &self->sprite[FACING_DIE]->frames[0]->rect;
|
return &self->sprite[FACING_DIE]->frames[self->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &self->sprite[self->facing]->frames[0]->rect;
|
return &self->sprite[self->facing]->frames[self->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ Unit *createUnit(void)
|
||||||
u->health = u->healthMax = rrnd(1, 4);
|
u->health = u->healthMax = rrnd(1, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u->spriteTime = 0;
|
||||||
u->spriteFrame = 0;
|
u->spriteFrame = 0;
|
||||||
|
|
||||||
u->startX = u->startY = -1;
|
u->startX = u->startY = -1;
|
||||||
|
@ -232,10 +233,10 @@ static SDL_Rect *getCurrentSprite(void)
|
||||||
{
|
{
|
||||||
if (self->alive == ALIVE_ALIVE)
|
if (self->alive == ALIVE_ALIVE)
|
||||||
{
|
{
|
||||||
return &self->sprite[self->facing]->frames[0]->rect;
|
return &self->sprite[self->facing]->frames[self->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &self->sprite[FACING_DIE]->frames[0]->rect;
|
return &self->sprite[FACING_DIE]->frames[self->spriteFrame]->rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load(cJSON *root)
|
static void load(cJSON *root)
|
||||||
|
|
|
@ -30,7 +30,7 @@ void initSDL(void)
|
||||||
app.winWidth = SCREEN_WIDTH;
|
app.winWidth = SCREEN_WIDTH;
|
||||||
app.winHeight = SCREEN_HEIGHT;
|
app.winHeight = SCREEN_HEIGHT;
|
||||||
|
|
||||||
rendererFlags = SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC;
|
rendererFlags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC;
|
||||||
|
|
||||||
windowFlags = 0;
|
windowFlags = 0;
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ static void animateSprite(Sprite *s)
|
||||||
|
|
||||||
if (s->currentTime <= 0)
|
if (s->currentTime <= 0)
|
||||||
{
|
{
|
||||||
s->currentFrame = wrap(++s->currentFrame, 0, s->numFrames - 1);
|
s->currentFrame = wrap(s->currentFrame + 1, 0, s->numFrames - 1);
|
||||||
s->currentTime = s->times[s->currentFrame];
|
s->currentTime = s->times[s->currentFrame];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,20 +20,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "atlasTest.h"
|
#include "atlasTest.h"
|
||||||
|
|
||||||
static void logic(void);
|
|
||||||
static void draw(void);
|
|
||||||
|
|
||||||
static Texture *background;
|
|
||||||
|
|
||||||
void initAtlasTest(void)
|
void initAtlasTest(void)
|
||||||
{
|
{
|
||||||
initGame();
|
initGame();
|
||||||
|
|
||||||
initHub();
|
initHub();
|
||||||
|
|
||||||
app.delegate.logic = &logic;
|
|
||||||
app.delegate.draw = &draw;
|
|
||||||
|
|
||||||
loadWorld("data/maps/beachApproach.json");
|
loadWorld("data/maps/beachApproach.json");
|
||||||
|
|
||||||
initWorld();
|
initWorld();
|
||||||
|
@ -41,50 +33,4 @@ void initAtlasTest(void)
|
||||||
initMap();
|
initMap();
|
||||||
|
|
||||||
initEntities();
|
initEntities();
|
||||||
|
|
||||||
background = getTexture(world.background);
|
|
||||||
|
|
||||||
cameraTrack(findEntity("Transmitter"));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void logic(void)
|
|
||||||
{
|
|
||||||
doWorld();
|
|
||||||
|
|
||||||
doEntities();
|
|
||||||
|
|
||||||
doParticles();
|
|
||||||
|
|
||||||
if (app.keyboard[SDL_SCANCODE_UP])
|
|
||||||
{
|
|
||||||
camera.y -= CAMERA_SCROLL_SPEED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (app.keyboard[SDL_SCANCODE_DOWN])
|
|
||||||
{
|
|
||||||
camera.y += CAMERA_SCROLL_SPEED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (app.keyboard[SDL_SCANCODE_LEFT])
|
|
||||||
{
|
|
||||||
camera.x -= CAMERA_SCROLL_SPEED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (app.keyboard[SDL_SCANCODE_RIGHT])
|
|
||||||
{
|
|
||||||
camera.x += CAMERA_SCROLL_SPEED;
|
|
||||||
}
|
|
||||||
|
|
||||||
clipCamera();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void draw(void)
|
|
||||||
{
|
|
||||||
blitScaled(background->texture, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
|
|
||||||
|
|
||||||
drawEntities(PLANE_BACKGROUND);
|
|
||||||
|
|
||||||
drawMap();
|
|
||||||
|
|
||||||
drawEntities(PLANE_FOREGROUND);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,25 +20,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../common.h"
|
||||||
|
|
||||||
#define CAMERA_SCROLL_SPEED 16
|
|
||||||
|
|
||||||
extern void initWorld(void);
|
extern void initWorld(void);
|
||||||
extern void initMap(void);
|
extern void initMap(void);
|
||||||
extern void initHub(void);
|
extern void initHub(void);
|
||||||
extern void initGame(void);
|
extern void initGame(void);
|
||||||
extern void initEntities(void);
|
extern void initEntities(void);
|
||||||
extern void loadWorld(char *filename);
|
extern void loadWorld(char *filename);
|
||||||
extern void drawMap(void);
|
|
||||||
extern void drawEntities(int plane);
|
|
||||||
extern void cameraTrack(Entity *e);
|
|
||||||
extern void doEntities(void);
|
|
||||||
extern void doParticles(void);
|
|
||||||
extern void doWorld(void);
|
|
||||||
extern Entity *findEntity(char *name);
|
|
||||||
extern void clipCamera(void);
|
|
||||||
extern void blitScaled(SDL_Texture *texture, int x, int y, int w, int h, int center);
|
|
||||||
extern Texture *getTexture(const char *filename);
|
|
||||||
|
|
||||||
extern App app;
|
|
||||||
extern Camera camera;
|
|
||||||
extern World world;
|
|
||||||
|
|
|
@ -44,11 +44,15 @@ void doEntities(void)
|
||||||
|
|
||||||
void drawEntities(int plane)
|
void drawEntities(int plane)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y, draw;
|
||||||
|
|
||||||
for (self = world.entityHead.next ; self != NULL ; self = self->next)
|
for (self = world.entityHead.next ; self != NULL ; self = self->next)
|
||||||
{
|
{
|
||||||
if (self->plane == plane)
|
self->isOnScreen = 1;
|
||||||
|
|
||||||
|
draw = self->isOnScreen && !(self->flags & EF_GONE) && self->plane == plane;
|
||||||
|
|
||||||
|
if (draw)
|
||||||
{
|
{
|
||||||
x = (-camera.x + self->x);
|
x = (-camera.x + self->x);
|
||||||
y = (-camera.y + self->y);
|
y = (-camera.y + self->y);
|
||||||
|
|
|
@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
|
|
||||||
|
static void logic(void);
|
||||||
|
static void draw(void);
|
||||||
static void doWorldStart(void);
|
static void doWorldStart(void);
|
||||||
static void doWorldInProgress(void);
|
static void doWorldInProgress(void);
|
||||||
static void doWorldObserving(void);
|
static void doWorldObserving(void);
|
||||||
|
@ -57,12 +59,19 @@ void initWorld(void)
|
||||||
{
|
{
|
||||||
game.missionsPlayed++;
|
game.missionsPlayed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
world.bob->flags |= EF_GONE;
|
||||||
|
|
||||||
|
app.delegate.logic = logic;
|
||||||
|
app.delegate.draw = draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
void doWorld(void)
|
static void logic(void)
|
||||||
{
|
{
|
||||||
if (world.betweenTimer == 0)
|
if (--world.betweenTimer <= 0)
|
||||||
{
|
{
|
||||||
|
world.betweenTimer = 0;
|
||||||
|
|
||||||
switch (world.state)
|
switch (world.state)
|
||||||
{
|
{
|
||||||
case WS_START:
|
case WS_START:
|
||||||
|
@ -97,17 +106,47 @@ void doWorld(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void draw(void)
|
||||||
|
{
|
||||||
|
clearScreen();
|
||||||
|
|
||||||
|
if (world.betweenTimer == 0)
|
||||||
|
{
|
||||||
|
blitScaled(background->texture, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
|
||||||
|
|
||||||
|
drawEntities(PLANE_BACKGROUND);
|
||||||
|
|
||||||
|
drawMap();
|
||||||
|
|
||||||
|
drawEntities(PLANE_FOREGROUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void startMission(void)
|
void startMission(void)
|
||||||
{
|
{
|
||||||
world.state = WS_IN_PROGRESS;
|
world.state = WS_IN_PROGRESS;
|
||||||
world.betweenTimer = FPS / 2;
|
world.betweenTimer = FPS / 2;
|
||||||
resetAtCheckpoint();
|
resetAtCheckpoint();
|
||||||
world.entityToTrack = (Entity*)world.bob;
|
world.entityToTrack = (Entity*)world.bob;
|
||||||
|
world.bob->flags &= ~EF_GONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doWorldStart(void)
|
static void doWorldStart(void)
|
||||||
{
|
{
|
||||||
if (world.entityToTrack == NULL)
|
float dist;
|
||||||
|
|
||||||
|
if (world.entityToTrack != NULL)
|
||||||
|
{
|
||||||
|
dist = cameraChase(world.entityToTrack, 5);
|
||||||
|
|
||||||
|
if ((dist <= world.entityToTrack->w && dist <= world.entityToTrack->h) || world.entityChaseTimer <= 0)
|
||||||
|
{
|
||||||
|
world.entityToTrack = getRandomObjectiveEntity();
|
||||||
|
|
||||||
|
world.entityChaseTimer = FPS * 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
world.entityToTrack = getRandomObjectiveEntity();
|
world.entityToTrack = getRandomObjectiveEntity();
|
||||||
|
|
||||||
|
@ -115,12 +154,14 @@ static void doWorldStart(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
world.entityChaseTimer = MAX(world.entityChaseTimer - 1, 0);
|
world.entityChaseTimer = MAX(world.entityChaseTimer - 1, 0);
|
||||||
|
|
||||||
doCommon();
|
doCommon();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doWorldInProgress(void)
|
static void doWorldInProgress(void)
|
||||||
{
|
{
|
||||||
|
cameraTrack(world.entityToTrack);
|
||||||
|
|
||||||
if (!world.showingInfoMessage)
|
if (!world.showingInfoMessage)
|
||||||
{
|
{
|
||||||
doBob();
|
doBob();
|
||||||
|
|
|
@ -31,6 +31,7 @@ extern void dropCarriedItems(void);
|
||||||
extern void playSound(int snd, int ch);
|
extern void playSound(int snd, int ch);
|
||||||
extern void initEnding(void);
|
extern void initEnding(void);
|
||||||
extern void initTitle(void);
|
extern void initTitle(void);
|
||||||
|
extern float cameraChase(Entity *e, int maxSpeed);
|
||||||
extern int rrnd(int low, int high);
|
extern int rrnd(int low, int high);
|
||||||
extern void hideAllWidgets(void);
|
extern void hideAllWidgets(void);
|
||||||
extern void resetAtCheckpoint(void);
|
extern void resetAtCheckpoint(void);
|
||||||
|
@ -48,7 +49,13 @@ extern void doHud(void);
|
||||||
extern Entity *createEntity(char *typeStr);
|
extern Entity *createEntity(char *typeStr);
|
||||||
extern void dropRandomCherry(int x, int y);
|
extern void dropRandomCherry(int x, int y);
|
||||||
extern void addRandomWeapon(int x, int y);
|
extern void addRandomWeapon(int x, int y);
|
||||||
|
extern void drawEntities(int plane);
|
||||||
|
extern void drawMap(void);
|
||||||
|
extern void blitScaled(SDL_Texture *texture, int x, int y, int w, int h, int center);
|
||||||
|
extern void clearScreen(void);
|
||||||
|
|
||||||
|
extern App app;
|
||||||
|
extern Camera camera;
|
||||||
extern Dev dev;
|
extern Dev dev;
|
||||||
extern Game game;
|
extern Game game;
|
||||||
extern World world;
|
extern World world;
|
||||||
|
|
|
@ -134,6 +134,8 @@ static void loadBob(cJSON *root)
|
||||||
world.bob->load(root);
|
world.bob->load(root);
|
||||||
|
|
||||||
world.bob->init();
|
world.bob->init();
|
||||||
|
|
||||||
|
world.bob->animate();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loadEntities(cJSON *root)
|
static void loadEntities(cJSON *root)
|
||||||
|
@ -155,6 +157,8 @@ static void loadEntities(cJSON *root)
|
||||||
self->load(node);
|
self->load(node);
|
||||||
|
|
||||||
self->init();
|
self->init();
|
||||||
|
|
||||||
|
self->animate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue