projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-20030627-1-src
[rocksndiamonds.git]
/
src
/
tools.c
diff --git
a/src/tools.c
b/src/tools.c
index 4fe2668937485e97ab2235f780cd78a38a3947c3..974765111a020583fdfddb12566c784b84a37c0a 100644
(file)
--- a/
src/tools.c
+++ b/
src/tools.c
@@
-483,7
+483,13
@@
void DrawLevelGraphicAnimation(int x, int y, int graphic)
void DrawLevelElementAnimation(int x, int y, int element)
{
void DrawLevelElementAnimation(int x, int y, int element)
{
+#if 1
+ int graphic = el_act_dir2img(element, GfxAction[x][y], MovDir[x][y]);
+
+ DrawGraphicAnimation(SCREENX(x), SCREENY(y), graphic);
+#else
DrawGraphicAnimation(SCREENX(x), SCREENY(y), el2img(element));
DrawGraphicAnimation(SCREENX(x), SCREENY(y), el2img(element));
+#endif
}
inline void DrawLevelGraphicAnimationIfNeeded(int x, int y, int graphic)
}
inline void DrawLevelGraphicAnimationIfNeeded(int x, int y, int graphic)
@@
-594,6
+600,9
@@
void DrawPlayer(struct PlayerInfo *player)
if (player->Pushing && IN_SCR_FIELD(SCREENX(next_jx), SCREENY(next_jy)))
{
if (player->Pushing && IN_SCR_FIELD(SCREENX(next_jx), SCREENY(next_jy)))
{
+#if 1
+ DrawLevelElement(next_jx, next_jy, EL_EMPTY);
+#else
if (player->GfxPos)
{
if (Feld[next_jx][next_jy] == EL_SOKOBAN_FIELD_FULL)
if (player->GfxPos)
{
if (Feld[next_jx][next_jy] == EL_SOKOBAN_FIELD_FULL)
@@
-603,6
+612,7
@@
void DrawPlayer(struct PlayerInfo *player)
}
else
DrawLevelField(next_jx, next_jy);
}
else
DrawLevelField(next_jx, next_jy);
+#endif
}
}
}
}
@@
-694,14
+704,28
@@
void DrawPlayer(struct PlayerInfo *player)
{
int px = SCREENX(next_jx), py = SCREENY(next_jy);
{
int px = SCREENX(next_jx), py = SCREENY(next_jy);
+ if (Back[next_jx][next_jy])
+ DrawLevelElement(next_jx, next_jy, Back[next_jx][next_jy]);
+
+#if 1
+ if ((sxx || syy) && element == EL_SOKOBAN_OBJECT)
+ DrawGraphicShiftedThruMask(px, py, sxx, syy, IMG_SOKOBAN_OBJECT, 0,
+ NO_CUTTING);
+#else
if ((sxx || syy) &&
(element == EL_SOKOBAN_FIELD_EMPTY ||
Feld[next_jx][next_jy] == EL_SOKOBAN_FIELD_FULL))
DrawGraphicShiftedThruMask(px, py, sxx, syy, IMG_SOKOBAN_OBJECT, 0,
NO_CUTTING);
if ((sxx || syy) &&
(element == EL_SOKOBAN_FIELD_EMPTY ||
Feld[next_jx][next_jy] == EL_SOKOBAN_FIELD_FULL))
DrawGraphicShiftedThruMask(px, py, sxx, syy, IMG_SOKOBAN_OBJECT, 0,
NO_CUTTING);
+#endif
else
{
else
{
+#if 1
+ int element = Feld[jx][jy];
+#else
int element = Feld[next_jx][next_jy];
int element = Feld[next_jx][next_jy];
+#endif
+
int graphic = el2img(element);
int frame = 0;
int graphic = el2img(element);
int frame = 0;
@@
-733,10
+757,14
@@
void DrawPlayer(struct PlayerInfo *player)
if (player_is_moving && last_element == EL_EXPLOSION)
{
if (player_is_moving && last_element == EL_EXPLOSION)
{
+#if 1
+ int graphic = el_act2img(GfxElement[last_jx][last_jy], ACTION_EXPLODING);
+#else
int stored = Store[last_jx][last_jy];
int graphic = (game.emulation != EMU_SUPAPLEX ? IMG_EXPLOSION :
stored == EL_SP_INFOTRON ? IMG_SP_EXPLOSION_INFOTRON :
IMG_SP_EXPLOSION);
int stored = Store[last_jx][last_jy];
int graphic = (game.emulation != EMU_SUPAPLEX ? IMG_EXPLOSION :
stored == EL_SP_INFOTRON ? IMG_SP_EXPLOSION_INFOTRON :
IMG_SP_EXPLOSION);
+#endif
int delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2);
int phase = ExplodePhase[last_jx][last_jy] - 1;
int frame = getGraphicAnimationFrame(graphic, phase - delay);
int delay = (game.emulation == EMU_SUPAPLEX ? 3 : 2);
int phase = ExplodePhase[last_jx][last_jy] - 1;
int frame = getGraphicAnimationFrame(graphic, phase - delay);
@@
-925,11
+953,7
@@
void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic, int frame,
{
Bitmap *src_bitmap;
GC drawing_gc;
{
Bitmap *src_bitmap;
GC drawing_gc;
- int src_x;
- int src_y;
- int offset_x;
- int offset_y;
-
+ int src_x, src_y;
int width = TILEX, height = TILEY;
int cx = 0, cy = 0;
int dest_x, dest_y;
int width = TILEX, height = TILEY;
int cx = 0, cy = 0;
int dest_x, dest_y;
@@
-1004,16
+1028,20
@@
void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic, int frame,
MarkTileDirty(x, y + SIGN(dy));
}
MarkTileDirty(x, y + SIGN(dy));
}
+#if 1
+ getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y);
+#else
src_bitmap = graphic_info[graphic].bitmap;
src_x = graphic_info[graphic].src_x;
src_y = graphic_info[graphic].src_y;
offset_x = graphic_info[graphic].offset_x;
offset_y = graphic_info[graphic].offset_y;
src_bitmap = graphic_info[graphic].bitmap;
src_x = graphic_info[graphic].src_x;
src_y = graphic_info[graphic].src_y;
offset_x = graphic_info[graphic].offset_x;
offset_y = graphic_info[graphic].offset_y;
- drawing_gc = src_bitmap->stored_clip_gc;
-
src_x += frame * offset_x;
src_y += frame * offset_y;
src_x += frame * offset_x;
src_y += frame * offset_y;
+#endif
+
+ drawing_gc = src_bitmap->stored_clip_gc;
src_x += cx;
src_y += cy;
src_x += cx;
src_y += cy;
@@
-1185,7
+1213,7
@@
static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
element = (GfxElement[x][y] != EL_UNDEFINED ? GfxElement[x][y] : Feld[x][y]);
/* crumble field itself */
element = (GfxElement[x][y] != EL_UNDEFINED ? GfxElement[x][y] : Feld[x][y]);
/* crumble field itself */
- if (CAN_BE_CRUMBLED(element))
+ if (CAN_BE_CRUMBLED(element)
&& !IS_MOVING(x, y)
)
{
if (!IN_SCR_FIELD(sx, sy))
return;
{
if (!IN_SCR_FIELD(sx, sy))
return;
@@
-1200,7
+1228,7
@@
static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
element = (IN_LEV_FIELD(xx, yy) ? Feld[xx][yy] : EL_STEELWALL);
/* check if neighbour field is of same type */
element = (IN_LEV_FIELD(xx, yy) ? Feld[xx][yy] : EL_STEELWALL);
/* check if neighbour field is of same type */
- if (CAN_BE_CRUMBLED(element))
+ if (CAN_BE_CRUMBLED(element)
&& !IS_MOVING(xx, yy)
)
continue;
if (i == 1 || i == 2)
continue;
if (i == 1 || i == 2)
@@
-1237,7
+1265,8
@@
static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame)
if (!IN_LEV_FIELD(xx, yy) ||
!IN_SCR_FIELD(sxx, syy) ||
if (!IN_LEV_FIELD(xx, yy) ||
!IN_SCR_FIELD(sxx, syy) ||
- !CAN_BE_CRUMBLED(Feld[xx][yy]))
+ !CAN_BE_CRUMBLED(Feld[xx][yy]) ||
+ IS_MOVING(xx, yy))
continue;
if (i == 1 || i == 2)
continue;
if (i == 1 || i == 2)
@@
-1456,6
+1485,7
@@
void getMicroGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
int src_x = mini_startx + graphic_info[graphic].src_x / 8;
int src_y = mini_starty + graphic_info[graphic].src_y / 8;
int src_x = mini_startx + graphic_info[graphic].src_x / 8;
int src_y = mini_starty + graphic_info[graphic].src_y / 8;
+#if 0
if (src_x + MICRO_TILEX > src_bitmap->width ||
src_y + MICRO_TILEY > src_bitmap->height)
{
if (src_x + MICRO_TILEX > src_bitmap->width ||
src_y + MICRO_TILEY > src_bitmap->height)
{
@@
-1466,6
+1496,7
@@
void getMicroGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
src_x += (TILEX / 2 - MICRO_TILEX / 2);
src_y += (TILEY / 2 - MICRO_TILEY / 2);
}
src_x += (TILEX / 2 - MICRO_TILEX / 2);
src_y += (TILEY / 2 - MICRO_TILEY / 2);
}
+#endif
*bitmap = src_bitmap;
*x = src_x;
*bitmap = src_bitmap;
*x = src_x;