summaryrefslogtreecommitdiff
path: root/src/base/item.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/item.c')
-rw-r--r--src/base/item.c281
1 files changed, 93 insertions, 188 deletions
diff --git a/src/base/item.c b/src/base/item.c
index bd61728..56ad293 100644
--- a/src/base/item.c
+++ b/src/base/item.c
@@ -63,7 +63,6 @@ void initItem()
g_item[BONUS_4X] = addImageData("item.bonus.4x.png", IMAGE_ALPHA, "item_4x_speed", IMAGE_GROUP_BASE);
g_item[BONUS_HIDDEN] = addImageData("item.bonus.hidden.png", IMAGE_ALPHA, "item_hidden_speed", IMAGE_GROUP_BASE);
#endif
-
isItemInit = TRUE;
}
@@ -73,9 +72,7 @@ item_t* newItem(int x, int y, int type, int author_id)
new = malloc( sizeof(item_t) );
assert( new != NULL );
-
new->type = type;
-
new->id = getNewID();
new->x = x;
new->y = y;
@@ -85,9 +82,7 @@ item_t* newItem(int x, int y, int type, int author_id)
new->img = g_item[type];
#endif
new->author_id = author_id;
-
- switch( type )
- {
+ switch (type) {
case GUN_DUAL_SIMPLE :
case GUN_SCATTER :
case GUN_TOMMY :
@@ -96,29 +91,25 @@ item_t* newItem(int x, int y, int type, int author_id)
case GUN_BOMBBALL :
new->w = ITEM_GUN_WIDTH;
new->h = ITEM_GUN_HEIGHT;
- break;
-
+ break;
case ITEM_MINE :
new->w = ITEM_MINE_WIDTH;
new->h = ITEM_MINE_HEIGHT;
- break;
-
+ break;
case ITEM_EXPLOSION :
#ifndef NO_SOUND
playSound("explozion", SOUND_GROUP_BASE);
#endif
new->w = ITEM_EXPLOSION_WIDTH;
new->h = ITEM_EXPLOSION_HEIGHT;
- break;
-
+ break;
case ITEM_BIG_EXPLOSION :
#ifndef NO_SOUND
playSound("explozion", SOUND_GROUP_BASE);
#endif
new->w = ITEM_BIG_EXPLOSION_WIDTH;
new->h = ITEM_BIG_EXPLOSION_HEIGHT;
- break;
-
+ break;
case BONUS_SPEED :
case BONUS_SHOT :
case BONUS_TELEPORT :
@@ -127,9 +118,8 @@ item_t* newItem(int x, int y, int type, int author_id)
case BONUS_HIDDEN :
new->w = ITEM_BONUS_WIDTH;
new->h = ITEM_BONUS_HEIGHT;
- break;
+ break;
}
-
return new;
}
@@ -138,7 +128,6 @@ void getStatusItem(void *p, int *id, int *x, int *y ,int *w, int *h)
item_t *item;
item = p;
-
*id = item->id;
*x = item->x;
*y = item->y;
@@ -191,56 +180,61 @@ void addNewItem(space_t *spaceItem, int author_id)
type = GUN_DUAL_SIMPLE;
#ifndef PUBLIC_SERVER
- do{
+ do {
#endif
- switch( random() % 12 )
- {
- case 0 : type = GUN_DUAL_SIMPLE;
- break;
- case 1 : type = GUN_SCATTER;
- break;
- case 2 : type = GUN_TOMMY;
- break;
- case 3 : type = GUN_MINE;
- break;
- case 4 : type = GUN_LASSER;
- break;
- case 5 : type = GUN_BOMBBALL;
- break;
- case 6 : type = BONUS_SPEED;
- break;
- case 7 : type = BONUS_SHOT;
- break;
- case 8 : type = BONUS_TELEPORT;
- break;
- case 9 : type = BONUS_GHOST;
- break;
- case 10 : type = BONUS_4X;
- break;
- case 11 : type = BONUS_HIDDEN;
- break;
+ switch (random() % 12) {
+ case 0 :
+ type = GUN_DUAL_SIMPLE;
+ break;
+ case 1 :
+ type = GUN_SCATTER;
+ break;
+ case 2 :
+ type = GUN_TOMMY;
+ break;
+ case 3 :
+ type = GUN_MINE;
+ break;
+ case 4 :
+ type = GUN_LASSER;
+ break;
+ case 5 :
+ type = GUN_BOMBBALL;
+ break;
+ case 6 :
+ type = BONUS_SPEED;
+ break;
+ case 7 :
+ type = BONUS_SHOT;
+ break;
+ case 8 :
+ type = BONUS_TELEPORT;
+ break;
+ case 9 :
+ type = BONUS_GHOST;
+ break;
+ case 10 :
+ type = BONUS_4X;
+ break;
+ case 11 :
+ type = BONUS_HIDDEN;
+ break;
}
-
#ifndef PUBLIC_SERVER
- }while( isSettingItem(type) == FALSE ||
- (getNetTypeGame() == NET_GAME_TYPE_NONE && type == BONUS_HIDDEN) );
+ } while (isSettingItem(type) == FALSE ||
+ (getNetTypeGame() == NET_GAME_TYPE_NONE
+ && type == BONUS_HIDDEN));
#endif
-
item = newItem(new_x, new_y, type, author_id);
addObjectToSpace(spaceItem, item);
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_additem_server(PROTO_SEND_ALL, NULL, item);
- }
}
-#ifndef PUBLIC_SERVER
-
+#ifndef PUBLIC_SERVER
void drawItem(item_t *p)
{
- assert( p != NULL );
-
+ assert(p != NULL);
addLayer(p->img, p->x, p->y, p->frame * p->w, 0, p->w, p->h, TUX_LAYER);
}
@@ -249,10 +243,8 @@ void drawListItem(list_t *listItem)
item_t *thisItem;
int i;
- assert( listItem != NULL );
-
- for( i = 0 ; i < listItem->count ; i++ )
- {
+ assert(listItem != NULL);
+ for (i = 0; i < listItem->count; i++) {
thisItem = (item_t *)listItem->list[i];
assert( thisItem != NULL );
drawItem(thisItem);
@@ -266,44 +258,30 @@ static void action_itemevent(space_t *space, item_t *item, void *p)
my_time_t currentTime;
currentTime = getMyTime();
-
item->count++;
-
- if( item->count == ITEM_MAX_COUNT )
- {
+ if (item->count == ITEM_MAX_COUNT) {
item->count = 0;
item->frame++;
}
-
- switch( item->type )
- {
+ switch (item->type) {
case GUN_TOMMY :
case GUN_DUAL_SIMPLE :
case GUN_SCATTER :
case GUN_LASSER :
case GUN_MINE :
case GUN_BOMBBALL :
- if( item->frame == ITEM_GUN_MAX_FRAME )
- {
+ if (item->frame == ITEM_GUN_MAX_FRAME)
item->frame = 0;
- }
- break;
-
+ break;
case ITEM_MINE :
- if( item->frame == ITEM_MINE_MAX_FRAME )
- {
+ if(item->frame == ITEM_MINE_MAX_FRAME)
item->frame = 0;
- }
- break;
-
+ break;
case ITEM_EXPLOSION :
case ITEM_BIG_EXPLOSION :
- if( item->frame == ITEM_EXPLOSION_MAX_FRAME )
- {
+ if(item->frame == ITEM_EXPLOSION_MAX_FRAME)
delObjectFromSpaceWithObject(space, item, destroyItem);
- }
- break;
-
+ break;
case BONUS_SPEED :
case BONUS_SHOT :
case BONUS_TELEPORT :
@@ -311,10 +289,8 @@ static void action_itemevent(space_t *space, item_t *item, void *p)
case BONUS_4X :
case BONUS_HIDDEN :
if( item->frame == ITEM_GUN_MAX_FRAME )
- {
item->frame = 0;
- }
- break;
+ break;
}
}
@@ -325,33 +301,21 @@ void eventListItem(space_t *spaceItem)
static void mineExplosion(space_t *spaceItem, item_t *item)
{
- if( getNetTypeGame() != NET_GAME_TYPE_CLIENT )
- {
+ if (getNetTypeGame() != NET_GAME_TYPE_CLIENT) {
int x, y;
item_t *item_explosion;
x = ( item->x + item->w/2 ) - ITEM_BIG_EXPLOSION_WIDTH/2;
y = ( item->y + item->h/2 ) - ITEM_BIG_EXPLOSION_HEIGHT/2;
-
item_explosion = newItem(x, y, ITEM_BIG_EXPLOSION, item->author_id);
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_additem_server(PROTO_SEND_ALL, NULL, item_explosion);
- }
-
addObjectToSpace(spaceItem, item_explosion );
}
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
- proto_send_del_server(PROTO_SEND_ALL, NULL, item->id);
- }
-
- if( getNetTypeGame() != NET_GAME_TYPE_CLIENT )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
+ proto_send_del_server(PROTO_SEND_ALL, NULL, item->id);
+ if (getNetTypeGame() != NET_GAME_TYPE_CLIENT)
delObjectFromSpaceWithObject(spaceItem, item, destroyItem);
- }
}
static void action_item(space_t *space, item_t *item, int *isDel)
@@ -359,20 +323,15 @@ static void action_item(space_t *space, item_t *item, int *isDel)
arena_t *arena;
arena = getCurrentArena();
-
- switch( item->type )
- {
+ switch(item->type) {
case ITEM_MINE :
if( getNetTypeGame() != NET_GAME_TYPE_CLIENT )
- {
mineExplosion(space, item);
- }
- break;
-
+ break;
case ITEM_EXPLOSION :
case ITEM_BIG_EXPLOSION :
*isDel = 1;
- break;
+ break;
}
}
@@ -381,58 +340,38 @@ static void action_shot(space_t *space, shot_t *shot, space_t *spaceItem)
int isDel = 0;
actionSpaceFromLocation(spaceItem, action_item, &isDel, shot->x, shot->y, shot->w, shot->h);
-
- if( isDel )
- {
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (isDel) {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_del_server(PROTO_SEND_ALL, NULL, shot->id);
- }
-
delObjectFromSpaceWithObject(space, shot, destroyShot);
}
}
void eventConflictShotWithItem(arena_t *arena)
{
- if( getNetTypeGame() == NET_GAME_TYPE_CLIENT )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_CLIENT)
return;
- }
-
actionSpace(arena->spaceShot, action_shot, arena->spaceItem);
}
static void eventTuxIsDeadWithItem(tux_t *tux, item_t *item)
{
- if( tux->bonus == BONUS_GHOST )
- {
+ if (tux->bonus == BONUS_GHOST)
return;
- }
-
- if( tux->bonus == BONUS_TELEPORT )
- {
+ if (tux->bonus == BONUS_TELEPORT) {
tuxTeleport(tux);
return;
}
-
- if( item->author_id != tux->id )
- {
+ if (item->author_id != tux->id) {
tux_t *author;
author = getObjectFromSpaceWithID(getCurrentArena()->spaceTux, item->author_id);
-
- if( author != NULL )
- {
+ if (author != NULL) {
author->score++;
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_newtux_server(PROTO_SEND_ALL, NULL, author);
- }
}
}
-
countRoundInc();
eventTuxIsDead(tux);
}
@@ -442,14 +381,10 @@ static void tuxGiveBonus(tux_t *tux, item_t *item)
#ifndef NO_SOUND
playSound("item_bonus", SOUND_GROUP_BASE);
#endif
-
tux->bonus = item->type;
tux->bonus_time = TUX_MAX_BONUS;
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_newtux_server(PROTO_SEND_ALL, NULL, tux);
- }
}
static void tuxGiveGun(tux_t *tux, item_t *item)
@@ -457,21 +392,16 @@ static void tuxGiveGun(tux_t *tux, item_t *item)
#ifndef NO_SOUND
playSound("item_gun", SOUND_GROUP_BASE);
#endif
-
tux->pickup_time = 0;
tux->shot[ item->type ] += GUN_MAX_SHOT;
tux->gun = item->type;
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_newtux_server(PROTO_SEND_ALL, NULL, tux);
- }
}
static void action_giveitem(space_t *space, item_t *item, tux_t *tux)
{
- switch( item->type )
- {
+ switch (item->type) {
case GUN_TOMMY :
case GUN_DUAL_SIMPLE :
case GUN_SCATTER :
@@ -479,34 +409,23 @@ static void action_giveitem(space_t *space, item_t *item, tux_t *tux)
case GUN_MINE :
case GUN_BOMBBALL :
tuxGiveGun(tux, item);
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_del_server(PROTO_SEND_ALL, NULL, item->id);
- }
-
delObjectFromSpaceWithObject(space, item, destroyItem);
-
#ifdef PUBLIC_SERVER
addNewItem(space, ID_UNKNOWN);
#endif
- break;
+ break;
case ITEM_MINE :
- if( tux->bonus != BONUS_GHOST )
- {
+ if (tux->bonus != BONUS_GHOST)
mineExplosion(space, item);
- }
- break;
-
+ break;
case ITEM_EXPLOSION :
case ITEM_BIG_EXPLOSION :
- if( tux->bonus != BONUS_GHOST )
- {
+ if (tux->bonus != BONUS_GHOST)
eventTuxIsDeadWithItem(tux, item);
- }
- break;
-
+ break;
case BONUS_SPEED :
case BONUS_SHOT :
case BONUS_TELEPORT :
@@ -514,18 +433,13 @@ static void action_giveitem(space_t *space, item_t *item, tux_t *tux)
case BONUS_4X :
case BONUS_HIDDEN :
tuxGiveBonus(tux, item);
-
- if( getNetTypeGame() == NET_GAME_TYPE_SERVER )
- {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER)
proto_send_del_server(PROTO_SEND_ALL, NULL, item->id);
- }
-
delObjectFromSpaceWithObject(space, item, destroyItem);
-
#ifdef PUBLIC_SERVER
addNewItem(space, ID_UNKNOWN);
#endif
- break;
+ break;
}
}
@@ -533,28 +447,19 @@ void eventGiveTuxListItem(tux_t *tux, space_t *spaceItem)
{
int x, y, w, h;
- assert( spaceItem != NULL );
- assert( tux != NULL );
-
- if( getNetTypeGame() == NET_GAME_TYPE_CLIENT )
- {
+ assert(spaceItem != NULL);
+ assert(tux != NULL);
+ if (getNetTypeGame() == NET_GAME_TYPE_CLIENT)
return;
- }
-
- if( tux->status == TUX_STATUS_DEAD )
- {
+ if (tux->status == TUX_STATUS_DEAD)
return;
- }
-
getTuxProportion(tux, &x, &y, &w, &h);
-
actionSpaceFromLocation(spaceItem, action_giveitem, tux, x, y, w, h);
}
void destroyItem(item_t *p)
{
- assert( p != NULL );
-
+ assert(p != NULL);
delID(p->id);
free(p);
}