Pick up and store items.

This commit is contained in:
Steve 2018-02-04 08:11:42 +00:00
parent 5588abc063
commit 5bfea20534
9 changed files with 90 additions and 54 deletions

View File

@ -58,8 +58,6 @@ Entity *initBob(void)
initEntity((Entity*)b); initEntity((Entity*)b);
b->type = ET_BOB; b->type = ET_BOB;
b->itemTail = &b->itemHead;
walkSprite[FACING_LEFT] = getSprite("BobLeft"); walkSprite[FACING_LEFT] = getSprite("BobLeft");
walkSprite[FACING_RIGHT] = getSprite("BobRight"); walkSprite[FACING_RIGHT] = getSprite("BobRight");
@ -626,20 +624,6 @@ void die(void)
} }
} }
void addBobItem(Item *i)
{
}
int numCarriedItems(void)
{
return 0;
}
void dropCarriedItems(void)
{
}
static SDL_Rect *getCurrentSprite(void) 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)

View File

@ -23,7 +23,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static void init(void); static void init(void);
static void reset(void); static void reset(void);
static void tick(void); static void tick(void);
static void nothing(void);
static void touch(Entity *other); static void touch(Entity *other);
static void preTeleport(void); static void preTeleport(void);
static void teleport(void); static void teleport(void);
@ -54,7 +53,6 @@ Entity *initMIA(void)
m->spriteTime = rand() % 180; m->spriteTime = rand() % 180;
m->init = init; m->init = init;
m->action = nothing;
m->reset = reset; m->reset = reset;
m->tick = tick; m->tick = tick;
m->touch = touch; m->touch = touch;
@ -93,7 +91,7 @@ static void tick(void)
m->shudderTimer = 2; m->shudderTimer = 2;
} }
if (m->action != nothing) if (!m->isMissionTarget)
{ {
m->starTimer--; m->starTimer--;
if (m->starTimer <= 0) if (m->starTimer <= 0)
@ -110,7 +108,7 @@ static void touch(Entity *other)
m = (MIA*)self; m = (MIA*)self;
if (m->action == nothing && other == (Entity*)world.bob) if (m->isMissionTarget && other == (Entity*)world.bob)
{ {
m->action = preTeleport; m->action = preTeleport;
m->teleportTimer = FPS * 3; m->teleportTimer = FPS * 3;
@ -152,11 +150,6 @@ static void teleport(void)
} }
} }
static void nothing(void)
{
}
static void load(cJSON *root) static void load(cJSON *root)
{ {
MIA *m; MIA *m;

View File

@ -134,8 +134,7 @@ static void bobPickupItem(void)
{ {
if (i->thinkTime == 0) if (i->thinkTime == 0)
{ {
i->alive = ALIVE_DEAD; addItem(i);
addKey(i->name);
game.keysFound++; game.keysFound++;
updateObjective("KEY"); updateObjective("KEY");
@ -150,17 +149,13 @@ static void bobPickupItem(void)
} }
else if (i->canBeCarried) else if (i->canBeCarried)
{ {
if (numCarriedItems() < MAX_ITEMS) if (addItem(i))
{ {
i->flags |= EF_GONE;
if (!i->collected) if (!i->collected)
{ {
updateObjective(i->name); updateObjective(i->name);
i->collected = 1; i->collected = 1;
} }
addBobItem(i);
setGameplayMessage(MSG_STANDARD, _("Picked up a %s"), i->name); setGameplayMessage(MSG_STANDARD, _("Picked up a %s"), i->name);

View File

@ -26,9 +26,8 @@ extern void setGameplayMessage(int type, char *format, ...);
extern void addTeleportStars(Entity *e); extern void addTeleportStars(Entity *e);
extern void initEntity(Entity *e); extern void initEntity(Entity *e);
extern Sprite *getSprite(char *name); extern Sprite *getSprite(char *name);
extern void addBobItem(Item *i); extern int addItem(Item *i);
extern int numCarriedItems(void); extern int numCarriedItems(void);
extern void addKey(char *name);
extern void updateObjective(char *targetName); extern void updateObjective(char *targetName);
extern Entity *self; extern Entity *self;

View File

@ -218,33 +218,33 @@ static void openWithKey(void)
s = (Structure*)self; s = (Structure*)self;
if (hasItem(s->requiredItem)) if (hasItem(s->requiredItem) || dev.cheatKeys)
{ {
if (s->thinkTime <= 0) removeItem(s->requiredItem);
{
setGameplayMessage(MSG_GAMEPLAY, _("%s required"), s->requiredItem);
playSound(SND_DENIED, CH_MECHANICAL); setGameplayMessage(MSG_GAMEPLAY, _("%s removed"), s->requiredItem);
STRNCPY(s->requiredItem, "", MAX_NAME_LENGTH);
s->isLocked = 0;
if (s->state != DOOR_OPEN)
{
playSound(SND_DOOR_START, CH_MECHANICAL);
} }
s->thinkTime = 2; s->state = DOOR_OPEN;
return; return;
} }
removeItem(s->requiredItem); if (s->thinkTime <= 0)
setGameplayMessage(MSG_GAMEPLAY, _("%s removed"), s->requiredItem);
STRNCPY(s->requiredItem, "", MAX_NAME_LENGTH);
s->isLocked = 0;
if (s->state != DOOR_OPEN)
{ {
playSound(SND_DOOR_START, CH_MECHANICAL); setGameplayMessage(MSG_GAMEPLAY, _("%s required"), s->requiredItem);
playSound(SND_DENIED, CH_MECHANICAL);
} }
s->state = DOOR_OPEN; s->thinkTime = 2;
} }
static int isOpening(void) static int isOpening(void)

View File

@ -64,23 +64,84 @@ void addDefeatedTarget(char *name)
} }
} }
void addKey(char *name) int addItem(Entity *item)
{ {
int i;
for (i = 0 ; i < MAX_ITEMS ; i++)
{
if (world.bob->items[i] == NULL)
{
world.bob->items[i] = item;
item->flags |= EF_GONE;
return 1;
}
}
return 0;
} }
int hasItem(char *name) int hasItem(char *name)
{ {
int i;
Item *item;
for (i = 0 ; i < MAX_ITEMS ; i++)
{
item = (Item*)world.bob->items[i];
if (item != NULL && strcmp(item->name, name) == 0)
{
return 1;
}
}
return 0; return 0;
} }
Entity *getItem(char *name) Entity *getItem(char *name)
{ {
int i;
Item *item;
for (i = 0 ; i < MAX_ITEMS ; i++)
{
item = (Item*)world.bob->items[i];
if (item != NULL && strcmp(item->name, name) == 0)
{
return world.bob->items[i];
}
}
return NULL; return NULL;
} }
void removeItem(char *name) void removeItem(char *name)
{ {
int i;
Item *item;
for (i = 0 ; i < MAX_ITEMS ; i++)
{
item = (Item*)world.bob->items[i];
if (item != NULL && strcmp(item->name, name) == 0)
{
item->flags &= ~EF_GONE;
item->alive = ALIVE_DEAD;
}
}
}
void dropCarriedItems(void)
{
int i;
for (i = 0 ; i < MAX_ITEMS ; i++)
{
}
} }
static void loadMetaInfo(void) static void loadMetaInfo(void)

View File

@ -24,3 +24,4 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern char *readFile(const char *filename); extern char *readFile(const char *filename);
extern Game game; extern Game game;
extern World world;

View File

@ -214,7 +214,7 @@ struct Bob {
int power, powerMax; int power, powerMax;
int jpEffectTimer; int jpEffectTimer;
PointF checkpoints[MAX_CHECKPOINTS]; PointF checkpoints[MAX_CHECKPOINTS];
Item itemHead, *itemTail; Entity *items[MAX_ITEMS];
}; };
struct Structure { struct Structure {

View File

@ -67,6 +67,9 @@ void initWorld(void)
app.delegate.draw = draw; app.delegate.draw = draw;
startMission(); startMission();
world.bob->x = 166 * MAP_TILE_SIZE;
world.bob->y = 98 * MAP_TILE_SIZE;
} }
static void logic(void) static void logic(void)