X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame_em%2Flogic.c;h=a1afd71355f05055cbc43c4401ffa2a6603ff18c;hb=60e76fc5451a6caed053db7c94dce85daf845cb6;hp=6183555a4f7d1a19648817a1b4e37166aba96470;hpb=00c609128587f2224bf5d00272806c5f25a864a5;p=rocksndiamonds.git diff --git a/src/game_em/logic.c b/src/game_em/logic.c index 6183555a..a1afd713 100644 --- a/src/game_em/logic.c +++ b/src/game_em/logic.c @@ -85,7 +85,7 @@ static boolean player_killed(struct PLAYER *ply) if (lev.killed_out_of_time && setup.time_limit) return TRUE; - switch(cave[x][y-1]) + switch (cave[x][y-1]) { case Xbug_1_n: case Xbug_1_e: @@ -106,7 +106,7 @@ static boolean player_killed(struct PLAYER *ply) return TRUE; } - switch(cave[x+1][y]) + switch (cave[x+1][y]) { case Xbug_1_n: case Xbug_1_e: @@ -127,7 +127,7 @@ static boolean player_killed(struct PLAYER *ply) return TRUE; } - switch(cave[x][y+1]) + switch (cave[x][y+1]) { case Xbug_1_n: case Xbug_1_e: @@ -148,7 +148,7 @@ static boolean player_killed(struct PLAYER *ply) return TRUE; } - switch(cave[x-1][y]) + switch (cave[x-1][y]) { case Xbug_1_n: case Xbug_1_e: @@ -169,7 +169,7 @@ static boolean player_killed(struct PLAYER *ply) return TRUE; } - switch(cave[x][y]) + switch (cave[x][y]) { case Xblank: case Xacid_splash_e: @@ -202,7 +202,7 @@ static void kill_player(struct PLAYER *ply) ply->alive = 0; - switch(cave[x][y-1]) + switch (cave[x][y-1]) { case Xbug_1_n: case Xbug_1_e: @@ -227,7 +227,7 @@ static void kill_player(struct PLAYER *ply) break; } - switch(cave[x+1][y]) + switch (cave[x+1][y]) { case Xbug_1_n: case Xbug_1_e: @@ -252,7 +252,7 @@ static void kill_player(struct PLAYER *ply) break; } - switch(cave[x][y+1]) + switch (cave[x][y+1]) { case Xbug_1_n: case Xbug_1_e: @@ -277,7 +277,7 @@ static void kill_player(struct PLAYER *ply) break; } - switch(cave[x-1][y]) + switch (cave[x-1][y]) { case Xbug_1_n: case Xbug_1_e: @@ -302,7 +302,7 @@ static void kill_player(struct PLAYER *ply) break; } - switch(cave[x][y]) + switch (cave[x][y]) { case Xexit_1: case Xexit_2: @@ -317,7 +317,7 @@ static void kill_player(struct PLAYER *ply) break; } - switch(cave[x][y]) + switch (cave[x][y]) { #ifdef USE_CHANGED_ACID_STUFF case Xacid_1: @@ -357,7 +357,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) { int element = cave[x][y]; - switch(cave[x][y]) + switch (cave[x][y]) { /* fire is released */ case Xblank: @@ -564,7 +564,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; - switch(cave[x+dx][y]) + switch (cave[x+dx][y]) { case Xblank: case Xacid_splash_e: @@ -603,7 +603,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; - switch(cave[x+dx][y]) + switch (cave[x+dx][y]) { case Xblank: case Xacid_splash_e: @@ -642,7 +642,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; - switch(cave[x+dx][y]) + switch (cave[x+dx][y]) { case Xblank: case Xacid_splash_e: @@ -681,7 +681,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) if (dy) break; - switch(cave[x+dx][y]) + switch (cave[x+dx][y]) { case Xblank: case Xacid_splash_e: @@ -742,7 +742,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) break; case Xballoon: - switch(cave[x+dx][y+dy]) + switch (cave[x+dx][y+dy]) { case Xblank: case Xacid_splash_e: @@ -789,7 +789,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) case Xandroid_2_s: case Xandroid_1_w: case Xandroid_2_w: - switch(cave[x+dx][y+dy]) + switch (cave[x+dx][y+dy]) { case Xblank: case Xacid_splash_e: @@ -972,7 +972,7 @@ static boolean player_digfield(struct PLAYER *ply, int dx, int dy) { int element = cave[x][y]; - switch(cave[x][y]) + switch (cave[x][y]) { /* fire is pressed */ @@ -1228,7 +1228,7 @@ static void check_player(struct PLAYER *ply) static void set_nearest_player_xy(int x, int y, int *dx, int *dy) { - int distance, distance_shortest = EM_MAX_CAVE_WIDTH + EM_MAX_CAVE_HEIGHT; + int distance, distance_shortest = CAVE_WIDTH + CAVE_HEIGHT; int i; /* default values if no players are alive anymore */ @@ -6210,9 +6210,9 @@ void logic_1(void) int start_check_nr; int i; - cave = Cave; - next = Next; - boom = Boom; + cave = lev.cave; + next = lev.next; + boom = lev.boom; game_em.any_player_moving = FALSE; game_em.any_player_snapping = FALSE; @@ -6228,6 +6228,16 @@ void logic_1(void) for (i = 0; i < MAX_PLAYERS; i++) { + /* check for wrap-around movement */ + if (ply[i].x < lev.left || + ply[i].x > lev.right - 1) + { + ply[i].x = (ply[i].x < lev.left ? lev.right - 1 : lev.left); + + game.centered_player_nr_next = i; + game.set_centered_player = TRUE; + } + ply[i].oldx = ply[i].x; ply[i].oldy = ply[i].y; ply[i].anim = PLY_still; @@ -6266,15 +6276,15 @@ void logic_2(void) { int x, y; - cave = Cave; - next = Next; - boom = Boom; + cave = lev.cave; + next = lev.next; + boom = lev.boom; seed = RandomEM; score = 0; - for (y = 1; y < HEIGHT - 1; y++) - for (x = 0; x < WIDTH; x++) + for (y = lev.top; y < lev.bottom; y++) + for (x = lev.left; x < lev.right; x++) handle_tile(x, y); if (ply[0].alive || ply[1].alive || ply[2].alive || ply[3].alive) @@ -6285,10 +6295,10 @@ void logic_2(void) RandomEM = seed; /* triple buffering */ - void *temp = Cave; - Cave = Next; - Next = Draw; - Draw = temp; + void *temp = lev.cave; + lev.cave = lev.next; + lev.next = lev.draw; + lev.draw = temp; } void logic_3(void) @@ -6298,9 +6308,9 @@ void logic_3(void) int count; unsigned int random; - cave = Cave; - next = Next; - boom = Boom; + cave = lev.cave; + next = lev.next; + boom = lev.boom; /* update variables */ @@ -6334,10 +6344,12 @@ void logic_3(void) for (count = lev.amoeba_time; count--;) { - x = (random >> 10) % (WIDTH - 2); - y = (random >> 20) % (HEIGHT - 2); + x = lev.left - 1 + (random >> 10) % (CAVE_WIDTH + 2); + y = lev.top - 1 + (random >> 20) % (CAVE_HEIGHT + 2); - Lamoeba(x, y); + if (x >= lev.left && x < lev.right && + y >= lev.top && y < lev.bottom) + Lamoeba(x, y); random = random * 129 + 1; } @@ -6346,13 +6358,13 @@ void logic_3(void) /* handle explosions */ - for (y = 1; y < HEIGHT - 1; y++) - for (x = 1; x < WIDTH - 1; x++) + for (y = lev.top; y < lev.bottom; y++) + for (x = lev.left; x < lev.right; x++) Lexplode(x, y); /* triple buffering */ - for (y = 0; y < HEIGHT; y++) - for (x = 0; x < WIDTH; x++) - Next[x][y] = Cave[x][y]; + for (y = lev.top; y < lev.bottom; y++) + for (x = lev.left; x < lev.right; x++) + next[x][y] = cave[x][y]; }