projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added support for opening URLs for global animation event actions
[rocksndiamonds.git]
/
src
/
tools.c
diff --git
a/src/tools.c
b/src/tools.c
index 9fe777c90e0f0b180ff7c6ea1936f83176fb11ae..67c870083e2d4ee6456d0900a6e36c432a56a474 100644
(file)
--- a/
src/tools.c
+++ b/
src/tools.c
@@
-512,6
+512,10
@@
static void DrawMaskedBorderExt_Rect(int x, int y, int width, int height,
Bitmap *src_bitmap = getGlobalBorderBitmapFromStatus(global.border_status);
Bitmap *dst_bitmap = gfx.masked_border_bitmap_ptr;
Bitmap *src_bitmap = getGlobalBorderBitmapFromStatus(global.border_status);
Bitmap *dst_bitmap = gfx.masked_border_bitmap_ptr;
+ // may happen for "border.draw_masked.*" with undefined "global.border.*"
+ if (src_bitmap == NULL)
+ return;
+
if (x == -1 && y == -1)
return;
if (x == -1 && y == -1)
return;
@@
-1490,8
+1494,9
@@
int getGraphicAnimationFrameXY(int graphic, int lx, int ly)
int ysize = MAX(1, g->anim_frames / xsize);
int xoffset = g->anim_start_frame % xsize;
int yoffset = g->anim_start_frame % ysize;
int ysize = MAX(1, g->anim_frames / xsize);
int xoffset = g->anim_start_frame % xsize;
int yoffset = g->anim_start_frame % ysize;
- int x = (lx + xoffset + xsize) % xsize;
- int y = (ly + yoffset + ysize) % ysize;
+ // may be needed if screen field is significantly larger than playfield
+ int x = (lx + xoffset + SCR_FIELDX * xsize) % xsize;
+ int y = (ly + yoffset + SCR_FIELDY * ysize) % ysize;
int sync_frame = y * xsize + x;
return sync_frame % g->anim_frames;
int sync_frame = y * xsize + x;
return sync_frame % g->anim_frames;
@@
-1499,16
+1504,19
@@
int getGraphicAnimationFrameXY(int graphic, int lx, int ly)
else if (graphic_info[graphic].anim_mode & ANIM_RANDOM_STATIC)
{
struct GraphicInfo *g = &graphic_info[graphic];
else if (graphic_info[graphic].anim_mode & ANIM_RANDOM_STATIC)
{
struct GraphicInfo *g = &graphic_info[graphic];
- int x = (lx + lev_fieldx) % lev_fieldx;
- int y = (ly + lev_fieldy) % lev_fieldy;
+ // may be needed if screen field is significantly larger than playfield
+ int x = (lx + SCR_FIELDX * lev_fieldx) % lev_fieldx;
+ int y = (ly + SCR_FIELDY * lev_fieldy) % lev_fieldy;
int sync_frame = GfxRandomStatic[x][y];
return sync_frame % g->anim_frames;
}
int sync_frame = GfxRandomStatic[x][y];
return sync_frame % g->anim_frames;
}
+ else
+ {
+ int sync_frame = (IN_LEV_FIELD(lx, ly) ? GfxFrame[lx][ly] : -1);
- int sync_frame = (IN_LEV_FIELD(lx, ly) ? GfxFrame[lx][ly] : -1);
-
- return getGraphicAnimationFrame(graphic, sync_frame);
+ return getGraphicAnimationFrame(graphic, sync_frame);
+ }
}
void getGraphicSourceBitmap(int graphic, int tilesize, Bitmap **bitmap)
}
void getGraphicSourceBitmap(int graphic, int tilesize, Bitmap **bitmap)
@@
-2519,6
+2527,11
@@
void DrawScreenGraphic(int x, int y, int graphic, int frame)
}
}
}
}
+void DrawLevelGraphic(int x, int y, int graphic, int frame)
+{
+ DrawScreenGraphic(SCREENX(x), SCREENY(y), graphic, frame);
+}
+
void DrawScreenElement(int x, int y, int element)
{
int mask_mode = NO_MASKING;
void DrawScreenElement(int x, int y, int element)
{
int mask_mode = NO_MASKING;
@@
-9941,6
+9954,16
@@
void ChangeViewportPropertiesIfNeeded(void)
}
}
}
}
+void OpenURL(char *url)
+{
+ SDL_OpenURL(url);
+}
+
+void OpenURLFromHash(SetupFileHash *hash, int hash_key)
+{
+ OpenURL(getHashEntry(hash, int2str(hash_key, 0)));
+}
+
// ============================================================================
// tests
// ============================================================================
// tests