Pick up and store items.
This commit is contained in:
parent
5588abc063
commit
5bfea20534
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue