summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base/tux.c8
-rw-r--r--src/modules/modMove.c14
-rw-r--r--src/modules/modPipe.c39
3 files changed, 61 insertions, 0 deletions
diff --git a/src/base/tux.c b/src/base/tux.c
index 171046c..746679d 100644
--- a/src/base/tux.c
+++ b/src/base/tux.c
@@ -429,6 +429,10 @@ static void action_tux(space_t * space, tux_t * tux, shot_t * shot)
}
}
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER) {
+ proto_send_del_server(PROTO_SEND_ALL, NULL, shot->id);
+ }
+
delObjectFromSpaceWithObject(arena->spaceShot, shot, destroyShot);
}
@@ -439,6 +443,10 @@ static void action_shot(space_t * space, shot_t * shot, space_t * spaceTux)
void eventConflictTuxWithShot(arena_t * arena)
{
+ if (getNetTypeGame() == NET_GAME_TYPE_CLIENT) { // na skusku
+ return;
+ }
+
actionSpace(arena->spaceShot, action_shot, arena->spaceTux);
}
diff --git a/src/modules/modMove.c b/src/modules/modMove.c
index 55366ff..5059d73 100644
--- a/src/modules/modMove.c
+++ b/src/modules/modMove.c
@@ -109,8 +109,10 @@ static void transformShot(shot_t * shot, int position)
shot->py = +speed;
break;
}
+
shot->position = position;
shot->isCanKillAuthor = TRUE;
+
if (shot->gun == GUN_LASSER)
export_fce->fce_transformOnlyLasser(shot);
}
@@ -133,7 +135,9 @@ move_shot(shot_t * shot, int position, int src_x, int src_y,
offset = shot->y - src_y;
break;
}
+
transformShot(shot, position);
+
switch (shot->position) {
case TUX_UP:
new_x = dist_x + offset;
@@ -152,6 +156,7 @@ move_shot(shot_t * shot, int position, int src_x, int src_y,
new_y = dist_y + dist_h + 5;
break;
}
+
moveObjectInSpace(export_fce->fce_getCurrentArena()->spaceShot, shot,
new_x, new_y);
if (export_fce->fce_getNetTypeGame() == NET_GAME_TYPE_SERVER) {
@@ -169,6 +174,7 @@ int init(export_fce_t * p)
export_fce = p;
export_fce->fce_addToShareFce("move_tux", (void *) move_tux);
export_fce->fce_addToShareFce("move_shot", (void *) move_shot);
+
return 0;
}
@@ -180,9 +186,11 @@ static void proto_movetux(char *msg)
tux_t *tux;
assert(msg != NULL);
+
sscanf(msg, "%s %d %d %d", cmd, &id, &x, &y);
space = export_fce->fce_getCurrentArena()->spaceTux;
tux = getObjectFromSpaceWithID(space, id);
+
if (tux != NULL)
moveObjectInSpace(space, tux, x, y);
}
@@ -195,16 +203,21 @@ static void proto_moveshot(char *msg)
shot_t *shot;
assert(msg != NULL);
+
sscanf(msg, "%s %d %d %d %d %d %d",
cmd, &shot_id, &x, &y, &px, &py, &position);
+
space = export_fce->fce_getCurrentArena()->spaceShot;
+
if ((shot = getObjectFromSpaceWithID(space, shot_id)) == NULL)
return;
+
moveObjectInSpace(space, shot, x, y);
shot->isCanKillAuthor = 1;
shot->position = position;
shot->px = px;
shot->py = py;
+
if (shot->gun == GUN_LASSER)
export_fce->fce_transformOnlyLasser(shot);
}
@@ -236,6 +249,7 @@ void recvMsg(char *msg)
{
if (export_fce->fce_getNetTypeGame() == NET_GAME_TYPE_SERVER)
return;
+
if (strncmp(msg, "movetux", 7) == 0)
proto_movetux(msg);
if (strncmp(msg, "moveshot", 8) == 0)
diff --git a/src/modules/modPipe.c b/src/modules/modPipe.c
index 9049731..76554b2 100644
--- a/src/modules/modPipe.c
+++ b/src/modules/modPipe.c
@@ -11,6 +11,8 @@
#include "list.h"
#include "gun.h"
#include "space.h"
+#include "proto.h"
+#include "serverSendMsg.h"
#ifndef PUBLIC_SERVER
# include "interface.h"
@@ -258,6 +260,8 @@ static int negPosition(int n)
return -1; // no warnning
}
+
+#if 0 //zaloha
static void action_eventpipe(space_t * space, pipe_t * pipe, shot_t * shot)
{
arena_t *arena;
@@ -285,6 +289,32 @@ static void action_eventpipe(space_t * space, pipe_t * pipe, shot_t * shot)
}
}
}
+#endif
+
+static void action_eventpipe(space_t * space, pipe_t * pipe, shot_t * shot)
+{
+ arena_t *arena;
+ tux_t *author;
+
+ arena = export_fce->fce_getCurrentArena();
+
+ author = getObjectFromSpaceWithID(arena->spaceTux, shot->author_id);
+
+ if (author != NULL &&
+ author->bonus == BONUS_GHOST && author->bonus_time > 0) {
+ return;
+ }
+
+ if (negPosition(shot->position) == pipe->position ) {
+ moveShotFromPipe(shot, pipe);
+ } else {
+ if (shot->gun == GUN_BOMBBALL) {
+ export_fce->fce_boundBombBall(shot);
+ } else {
+ shot->del = TRUE;
+ }
+ }
+}
static void
action_eventshot(space_t * space, shot_t * shot, space_t * spacePipe)
@@ -293,6 +323,10 @@ action_eventshot(space_t * space, shot_t * shot, space_t * spacePipe)
shot->y, shot->w, shot->h);
if (shot->del == TRUE) {
+ if (getNetTypeGame() == NET_GAME_TYPE_SERVER) {
+ proto_send_del_server(PROTO_SEND_ALL, NULL, shot->id);
+ }
+
delObjectFromSpaceWithObject(space, shot, export_fce->fce_destroyShot);
}
}
@@ -303,6 +337,11 @@ int event()
return 0;
}
+ // na skusku
+ if (export_fce->fce_getNetTypeGame() == NET_GAME_TYPE_CLIENT) {
+ return 0;
+ }
+
actionSpace(export_fce->fce_getCurrentArena()->spaceShot,
action_eventshot, spacePipe);