summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-10-09 02:52:49 +1100
committer Vas Crabb <vas@vastheman.com>2020-10-09 02:52:49 +1100
commit740011e4d1db8a9468f917ef518e1e7a1c95cde1 (patch)
treecb9d82e642005bbb68e8637cdf24d5dc7bcee25b
parent7fc54760e16341bd1f13fa63663e2cb0a56cb035 (diff)
Allow layout files to embed image data.
Also improved symmetry of disk components, fixed positioning of components when fitting to the pixel grid, and fixed inherited color when item has no color specified. Removed the dotmatrix components from complay.py - there are more flexible ways to achieve the same thing.
-rwxr-xr-xscripts/build/complay.py30
-rw-r--r--src/emu/rendlay.cpp199
-rw-r--r--src/mame/layout/brkball.lay13
-rw-r--r--src/mame/layout/esq2by16.lay136
-rw-r--r--src/mame/layout/hp9825.lay42
-rw-r--r--src/mame/layout/sc2_dmd.lay12
-rw-r--r--src/mame/layout/sc2copcl7.lay12
-rw-r--r--src/mame/layout/sc2cpe.lay12
-rw-r--r--src/mame/layout/sc2prem2.lay12
-rw-r--r--src/mame/layout/sc2prom.lay12
-rw-r--r--src/mame/layout/sc2ptytm1.lay12
-rw-r--r--src/mame/layout/sc2town2.lay12
-rw-r--r--src/mame/layout/sc4_dmd.lay11
-rw-r--r--src/mame/layout/tecnbras.lay348
-rw-r--r--src/mame/layout/tmtennis.lay66
15 files changed, 446 insertions, 483 deletions
diff --git a/scripts/build/complay.py b/scripts/build/complay.py
index 3e9d6ed693c..6903418e242 100755
--- a/scripts/build/complay.py
+++ b/scripts/build/complay.py
@@ -96,7 +96,7 @@ class LayoutChecker(Minifyer):
BADTAGPATTERN = re.compile('[^abcdefghijklmnopqrstuvwxyz0123456789_.:^$]')
VARPATTERN = re.compile('^.*~[0-9A-Za-z_]+~.*$')
FLOATCHARS = re.compile('^.*[.eE].*$')
- SHAPES = frozenset(('disk', 'dotmatrix', 'dotmatrix5dot', 'dotmatrixdot', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect'))
+ SHAPES = frozenset(('disk', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect'))
ORIENTATIONS = frozenset((0, 90, 180, 270))
YESNO = frozenset(('yes', 'no'))
BLENDMODES = frozenset(('none', 'alpha', 'multiply', 'add'))
@@ -291,7 +291,10 @@ class LayoutChecker(Minifyer):
self.handleError('Element %s attribute state "%s" is negative' % (name, attrs['state']))
if (statemask is not None) and (stateval & ~statemask):
self.handleError('Element %s attribute state "%s" has bits set that are clear in attribute statemask "%s"' % (name, attrs['state'], attrs['statemask']))
- self.handlers.append((self.componentStartHandler, self.componentEndHandler))
+ if 'image' == name:
+ self.handlers.append((self.imageComponentStartHandler, self.imageComponentEndHandler))
+ else:
+ self.handlers.append((self.componentStartHandler, self.componentEndHandler))
self.have_bounds.append({ })
self.have_color.append({ })
@@ -448,8 +451,8 @@ class LayoutChecker(Minifyer):
self.handleError('Element simplecounter attribute align "%s" not in valid range 0-2' % (attrs['align'], ))
self.checkComponent(name, attrs)
elif 'image' == name:
- if 'file' not in attrs:
- self.handleError('Element image missing attribute file')
+ self.have_file = 'file' in attrs
+ self.have_data = None
self.checkComponent(name, attrs)
elif 'reel' == name:
# TODO: validate symbollist and improve validation of other attributes
@@ -499,6 +502,25 @@ class LayoutChecker(Minifyer):
self.have_color.pop()
self.handlers.pop()
+ def imageComponentStartHandler(self, name, attrs):
+ if 'data' == name:
+ if self.have_data is not None:
+ self.handleError('Element image has multiple data child elements (previous %s)' % (self.have_data))
+ else:
+ self.have_data = self.formatLocation()
+ if self.have_file:
+ self.handleError('Element image has attribute file and child element data')
+ self.ignored_depth = 1
+ else:
+ self.componentStartHandler(name, attrs)
+
+ def imageComponentEndHandler(self, name):
+ if (not self.have_file) and (self.have_data is None):
+ self.handleError('Element image missing attribute file or child element data')
+ del self.have_file
+ del self.have_data
+ self.componentEndHandler(name)
+
def groupViewStartHandler(self, name, attrs):
if 'element' == name:
if 'ref' not in attrs:
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 2f57c7ade1d..25604722212 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -1521,14 +1521,14 @@ void layout_element::element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, c
// get the local scaled bounds
render_bounds const compbounds(curcomp->bounds(elemtex.m_state));
rectangle bounds(
- render_round_nearest(compbounds.x0 * dest.width()),
- render_round_nearest(compbounds.x1 * dest.width()),
- render_round_nearest(compbounds.y0 * dest.height()),
- render_round_nearest(compbounds.y1 * dest.height()));
- bounds &= dest.cliprect();
+ s32(compbounds.x0 * float(dest.width()) + 0.5F),
+ s32(floorf(compbounds.x1 * float(dest.width()) - 0.5F)),
+ s32(compbounds.y0 * float(dest.height()) + 0.5F),
+ s32(floorf(compbounds.y1 * float(dest.height()) - 0.5F)));
// based on the component type, add to the texture
- curcomp->draw(elemtex.m_element->machine(), dest, bounds, elemtex.m_state);
+ if (!bounds.empty())
+ curcomp->draw(elemtex.m_element->machine(), dest, bounds, elemtex.m_state);
}
}
}
@@ -1684,44 +1684,29 @@ private:
void load_image(running_machine &machine)
{
- // attempt to open the file
- LOGMASKED(LOG_IMAGE_LOAD, "Image component attempt to load image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
+ // if we have a filename, go with that
emu_file file(machine.options().art_path(), OPEN_FLAG_READ);
- osd_file::error const imgerr = file.open(m_dirname.empty() ? m_imagefile : (m_dirname + PATH_SEPARATOR + m_imagefile));
- if (osd_file::error::NONE == imgerr)
+ if (!m_imagefile.empty())
{
- ru_imgformat const format = render_detect_image(file);
- switch (format)
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component attempt to load image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
+ osd_file::error const imgerr = file.open(m_dirname.empty() ? m_imagefile : (m_dirname + PATH_SEPARATOR + m_imagefile));
+ if (osd_file::error::NONE == imgerr)
{
- case RENDUTIL_IMGFORMAT_ERROR:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component error detecting image file format\n");
- break;
-
- case RENDUTIL_IMGFORMAT_PNG:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component detected PNG file format\n");
- m_hasalpha = render_load_png(m_bitmap, file);
- break;
-
- case RENDUTIL_IMGFORMAT_JPEG:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component detected JPEG file format\n");
- render_load_jpeg(m_bitmap, file);
- break;
-
- case RENDUTIL_IMGFORMAT_MSDIB:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component detected Microsoft DIB file format\n");
- render_load_msdib(m_bitmap, file);
- break;
-
- default:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component failed to detect image file format, trying SVG\n");
- load_svg(file);
- break;
+ if (!load_bitmap(file))
+ {
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component will attempt to parse file as SVG\n");
+ load_svg(file);
+ }
+ file.close();
+ }
+ else
+ {
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component unable to open image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
}
- file.close();
}
else
{
- LOGMASKED(LOG_IMAGE_LOAD, "Image component unable to open image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
+ load_image_data();
}
// load the alpha bitmap if specified
@@ -1775,13 +1760,104 @@ private:
m_data.clear();
}
- void load_svg(util::core_file &file)
+ void load_image_data()
{
- if (!m_rasterizer)
+ // in-place Base64 decode
+ static constexpr char base64chars[] =
+ "\t\n\v\f\r +/0123456789"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz";
+ static constexpr char base64tail[] =
+ "\t\n\v\f\r =";
+ std::string::size_type const tail(m_data.find_first_not_of(base64chars));
+ std::string::size_type const end(m_data.find_first_not_of(base64tail, tail));
+ if (std::string::npos == end)
{
- osd_printf_warning("No SVG rasteriser available, won't attempt to parse component image '%s' as SVG\n", m_imagefile);
- return;
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component decoding Base64 image m_data\n");
+ char *dst(&m_data[0]);
+ unsigned trailing(0U);
+ for (std::string::size_type i = 0U; (m_data.size() > i) && ('=' != m_data[i]); ++i)
+ {
+ u8 sym;
+ if (('A' <= m_data[i]) && ('Z' >= m_data[i]))
+ sym = m_data[i] - 'A';
+ else if (('a' <= m_data[i]) && ('z' >= m_data[i]))
+ sym = m_data[i] - 'a' + 26;
+ else if (('0' <= m_data[i]) && ('9' >= m_data[i]))
+ sym = m_data[i] - '0' + 52;
+ else if ('+' == m_data[i])
+ sym = 62;
+ else if ('/' == m_data[i])
+ sym = 63;
+ else
+ continue;
+ if (trailing)
+ *dst |= (sym << 2) >> trailing;
+ else
+ *dst = sym << 2;
+ if (trailing >= 2U)
+ ++dst;
+ trailing = (trailing + 6U) & 7U;
+ if (trailing)
+ *dst = sym << (8U - trailing);
+ }
+ m_data.resize(dst - &m_data[0]);
}
+
+ // make a file wrapper for the data and see if it looks like a bitmap
+ util::core_file::ptr file;
+ osd_file::error const filerr(util::core_file::open_ram(m_data.c_str(), m_data.size(), OPEN_FLAG_READ, file));
+ bool const bitmapdata((osd_file::error::NONE == filerr) && file && load_bitmap(*file));
+ file.reset();
+
+ // if it didn't look like a bitmap, see if it looks like it might be XML and hence SVG
+ if (!bitmapdata)
+ {
+ bool const utf16be((0xfe == u8(m_data[0])) && (0xff == u8(m_data[1])));
+ bool const utf16le((0xff == u8(m_data[0])) && (0xfe == u8(m_data[1])));
+ bool const utf8((0xef == u8(m_data[0])) && (0xbb == u8(m_data[1])) && (0xbf == u8(m_data[2])));
+ std::string::size_type const found(m_data.find_first_not_of("\t\n\v\f\r "));
+ bool const xmltag((std::string::npos != found) && ('<' == m_data[found]));
+ if (utf16be || utf16le || utf8 || xmltag)
+ {
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component will attempt to parse data as SVG\n");
+ parse_svg(&m_data[0]);
+ }
+ }
+ }
+
+ bool load_bitmap(util::core_file &file)
+ {
+ ru_imgformat const format = render_detect_image(file);
+ switch (format)
+ {
+ case RENDUTIL_IMGFORMAT_ERROR:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component error detecting image file format\n");
+ return false;
+
+ case RENDUTIL_IMGFORMAT_PNG:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component detected PNG file format\n");
+ m_hasalpha = render_load_png(m_bitmap, file);
+ return true;
+
+ case RENDUTIL_IMGFORMAT_JPEG:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component detected JPEG file format\n");
+ render_load_jpeg(m_bitmap, file);
+ return true;
+
+ case RENDUTIL_IMGFORMAT_MSDIB:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component detected Microsoft DIB file format\n");
+ render_load_msdib(m_bitmap, file);
+ return true;
+
+ default:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component failed to detect bitmap file format\n");
+ return false;
+ }
+ }
+
+ void load_svg(util::core_file &file)
+ {
u64 len(file.size());
if ((std::numeric_limits<size_t>::max() - 1) < len)
{
@@ -1807,8 +1883,17 @@ private:
ptr += read;
len -= read;
}
- m_svg.reset(nsvgParse(svgbuf.get(), "px", 72));
- svgbuf.reset();
+ parse_svg(svgbuf.get());
+ }
+
+ void parse_svg(char *svgdata)
+ {
+ if (!m_rasterizer)
+ {
+ osd_printf_warning("No SVG rasteriser available, won't attempt to parse component image '%s' as SVG\n", m_imagefile);
+ return;
+ }
+ m_svg.reset(nsvgParse(svgdata, "px", 72));
if (!m_svg)
{
osd_printf_warning("Failed to parse component image '%s' as SVG\n", m_imagefile);
@@ -1922,8 +2007,8 @@ protected:
u32 const inva(255 - a);
// find the center
- float const xcenter = float(bounds.xcenter());
- float const ycenter = float(bounds.ycenter());
+ float const xcenter = float(bounds.left() + bounds.right()) * 0.5F;
+ float const ycenter = float(bounds.top() + bounds.bottom()) * 0.5F;
float const xradius = float(bounds.width()) * 0.5F;
float const yradius = float(bounds.height()) * 0.5F;
float const ooyradius2 = 1.0F / (yradius * yradius);
@@ -1932,22 +2017,21 @@ protected:
for (u32 y = bounds.top(); y <= bounds.bottom(); ++y)
{
// compute left/right coordinates
- float const ycoord = ycenter - (float(y) + 0.5F);
+ float const ycoord = ycenter - float(y);
float const xval = xradius * sqrtf(1.0F - (ycoord * ycoord) * ooyradius2);
-
s32 const left = s32(xcenter - xval + 0.5F);
- s32 const right = s32(xcenter + xval + 0.5F);
+ s32 const right = bounds.right() - left + bounds.left();
// draw this scanline
if (255 <= a)
{
// optimise opaque pixels
- std::fill_n(&dest.pix(y, left), right - left, f);
+ std::fill_n(&dest.pix(y, left), right - left + 1, f);
}
else if (a)
{
- u32 *dst(&dest.pix(y, bounds.left()));
- for (u32 x = left; x < right; ++x, ++dst)
+ u32 *dst(&dest.pix(y, left));
+ for (s32 x = left; x <= right; ++x, ++dst)
{
// we're translucent, add in the destination pixel contribution
rgb_t const dpix(*dst);
@@ -4354,9 +4438,16 @@ layout_view::item::color_vector layout_view::item::make_color(
itemnode.get_name()));
}
}
- for (emu::render::detail::color_step &step : result)
- step.color *= mult;
- set_color_deltas(result);
+ if (result.empty())
+ {
+ result.emplace_back(emu::render::detail::color_step{ 0, mult, { 0.0F, 0.0F, 0.0F, 0.0F } });
+ }
+ else
+ {
+ for (emu::render::detail::color_step &step : result)
+ step.color *= mult;
+ set_color_deltas(result);
+ }
return result;
}
diff --git a/src/mame/layout/brkball.lay b/src/mame/layout/brkball.lay
index 809b5901cf2..e895f502a65 100644
--- a/src/mame/layout/brkball.lay
+++ b/src/mame/layout/brkball.lay
@@ -7,10 +7,16 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
+
<group name="dmd">
<repeat count="21">
<param name="s" start="0" increment="65" />
@@ -20,6 +26,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/esq2by16.lay b/src/mame/layout/esq2by16.lay
index aa05f652938..546803dc527 100644
--- a/src/mame/layout/esq2by16.lay
+++ b/src/mame/layout/esq2by16.lay
@@ -32,30 +32,64 @@ license:CC0
</rect>
</element>
-
- <element name="Page1">
- <dotmatrix5dot>
- <color red="0.0" green="1.0" blue="1.0" />
- </dotmatrix5dot>
- </element>
-
- <element name="Page2">
- <dotmatrix5dot>
- <color red="0.0" green="1.0" blue="0.0" />
- </dotmatrix5dot>
- </element>
-
- <element name="Page3">
- <dotmatrix5dot>
- <color red="1.0" green="1.0" blue="0.0" />
- </dotmatrix5dot>
+ <element name="dotrow">
+ <rect>
+ <bounds x="-0.1" width="5.6" y="-0.1" height="1.2" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <disk state="0" statemask="0x01">
+ <bounds x="0.0" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x02">
+ <bounds x="1.1" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x04">
+ <bounds x="2.2" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x08">
+ <bounds x="3.3" />
+ <color red="0.125" green="0.125" blue="0.125" /></disk>
+ <disk state="0" statemask="0x10">
+ <bounds x="4.4" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk statemask="0x01">
+ <bounds x="0.0" />
+ </disk>
+ <disk statemask="0x02">
+ <bounds x="1.1" />
+ </disk>
+ <disk statemask="0x04">
+ <bounds x="2.2" />
+ </disk>
+ <disk statemask="0x08">
+ <bounds x="3.3" />
+ </disk>
+ <disk statemask="0x10">
+ <bounds x="4.4" />
+ </disk>
</element>
- <element name="Page4">
- <dotmatrix5dot>
- <color red="0.0" green="0.0" blue="1.0" />
- </dotmatrix5dot>
- </element>
+ <group name="page">
+ <repeat count="2">
+ <param name="origin" start="~start~" increment="112" />
+ <param name="row" start="0" increment="10" />
+ <repeat count="16">
+ <param name="char" start="~origin~" increment="7" />
+ <param name="x" start="0" increment="6" />
+ <repeat count="7">
+ <param name="n" start="~char~" increment="1" />
+ <param name="y" start="~row~" increment="1" />
+ <element name="pg_~n~" ref="dotrow" state="0">
+ <bounds x="~x~" y="~y~" width="5" height="1" />
+ </element>
+ </repeat>
+ </repeat>
+ </repeat>
+ </group>
<view name="Default Layout">
<!-- Background -->
@@ -81,41 +115,29 @@ license:CC0
<element name="rLed_14" ref="rLeds"> <bounds x="280" y="20" width="5" height="3" /> </element>
<element name="rLed_15" ref="rLeds"> <bounds x="290" y="20" width="5" height="3" /> </element>
- <repeat count="3">
- <param name="page" start="3" increment="-1" />
- <param name="start" start="3000" increment="-1000" />
- <param name="baseline" start="0" increment="20" />
- <repeat count="2">
- <param name="origin" start="~start~" increment="112" />
- <param name="row" start="~baseline~" increment="10" />
- <repeat count="16">
- <param name="char" start="~origin~" increment="7" />
- <param name="x" start="0" increment="6" />
- <repeat count="7">
- <param name="n" start="~char~" increment="1" />
- <param name="y" start="~row~" increment="1" />
- <element name="pg_~n~" ref="Page~page~" state="0">
- <bounds x="~x~" y="~y~" width="5" height="1" />
- </element>
- </repeat>
- </repeat>
- </repeat>
- </repeat>
- <repeat count="2">
- <param name="origin" start="4000" increment="112" />
- <param name="row" start="80" increment="10" />
- <repeat count="16">
- <param name="char" start="~origin~" increment="7" />
- <param name="x" start="0" increment="6" />
- <repeat count="7">
- <param name="n" start="~char~" increment="1" />
- <param name="y" start="~row~" increment="1" />
- <element name="pg_~n~" ref="Page4" state="0">
- <bounds x="~x~" y="~y~" width="5" height="1" />
- </element>
- </repeat>
- </repeat>
- </repeat>
+ <param name="start" value="3000" />
+ <group ref="page">
+ <bounds x="0" y="0" width="95" height="17" />
+ <color red="1.0" green="1.0" blue="0.0" />
+ </group>
+
+ <param name="start" value="2000" />
+ <group ref="page">
+ <bounds x="0" y="20" width="95" height="17" />
+ <color red="0.0" green="1.0" blue="0.0" />
+ </group>
+
+ <param name="start" value="1000" />
+ <group ref="page">
+ <bounds x="0" y="40" width="95" height="17" />
+ <color red="0.0" green="1.0" blue="1.0" />
+ </group>
+
+ <param name="start" value="4000" />
+ <group ref="page">
+ <bounds x="0" y="80" width="95" height="17" />
+ <color red="0.0" green="0.0" blue="1.0" />
+ </group>
</view>
</mamelayout>
diff --git a/src/mame/layout/hp9825.lay b/src/mame/layout/hp9825.lay
index 98341bd0bff..78db4e34edf 100644
--- a/src/mame/layout/hp9825.lay
+++ b/src/mame/layout/hp9825.lay
@@ -6,9 +6,44 @@ Hewlett-Packard 9825 Layout
-->
<mamelayout version="2">
<element name="dotmatrix5dot">
- <dotmatrix5dot>
- <color red="1.0" green="0" blue="0" />
- </dotmatrix5dot>
+ <rect>
+ <bounds x="-0.1" width="5.6" y="-0.1" height="1.2" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <disk state="0" statemask="0x01">
+ <bounds x="0.0" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk state="0" statemask="0x02">
+ <bounds x="1.1" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk state="0" statemask="0x04">
+ <bounds x="2.2" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk state="0" statemask="0x08">
+ <bounds x="3.3" />
+ <color red="0.25" green="0.25" blue="0.25" /></disk>
+ <disk state="0" statemask="0x10">
+ <bounds x="4.4" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk statemask="0x01">
+ <bounds x="0.0" />
+ </disk>
+ <disk statemask="0x02">
+ <bounds x="1.1" />
+ </disk>
+ <disk statemask="0x04">
+ <bounds x="2.2" />
+ </disk>
+ <disk statemask="0x08">
+ <bounds x="3.3" />
+ </disk>
+ <disk statemask="0x10">
+ <bounds x="4.4" />
+ </disk>
</element>
<element name="run_light" defstate="0">
@@ -34,6 +69,7 @@ Hewlett-Packard 9825 Layout
<param name="rowidx" start="0" increment="1" />
<element name="char_~digitidx~_~rowidx~" ref="dotmatrix5dot" state="0">
<bounds x="~digit_x~" y="~rowidx~" width="5" height="1" />
+ <color red="1.0" green="0.0" blue="0.0" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2_dmd.lay b/src/mame/layout/sc2_dmd.lay
index 0d3b9b1f41e..75f1c28825b 100644
--- a/src/mame/layout/sc2_dmd.lay
+++ b/src/mame/layout/sc2_dmd.lay
@@ -18,9 +18,14 @@ license:CC0
</rect>
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<element name="Steppers" defstate="0">
<simplecounter maxstate="999" digits="3">
@@ -38,6 +43,7 @@ license:CC0
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2copcl7.lay b/src/mame/layout/sc2copcl7.lay
index d8588a2a311..32e8a52e26d 100644
--- a/src/mame/layout/sc2copcl7.lay
+++ b/src/mame/layout/sc2copcl7.lay
@@ -2099,9 +2099,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -2112,6 +2117,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2cpe.lay b/src/mame/layout/sc2cpe.lay
index d52439a3590..eceb3fd15c8 100644
--- a/src/mame/layout/sc2cpe.lay
+++ b/src/mame/layout/sc2cpe.lay
@@ -2125,9 +2125,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -2138,6 +2143,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2prem2.lay b/src/mame/layout/sc2prem2.lay
index 71b79ae888a..d376251548e 100644
--- a/src/mame/layout/sc2prem2.lay
+++ b/src/mame/layout/sc2prem2.lay
@@ -2185,9 +2185,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -2198,6 +2203,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2prom.lay b/src/mame/layout/sc2prom.lay
index 63c9b8d1679..369aef18a6e 100644
--- a/src/mame/layout/sc2prom.lay
+++ b/src/mame/layout/sc2prom.lay
@@ -1609,9 +1609,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -1622,6 +1627,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2ptytm1.lay b/src/mame/layout/sc2ptytm1.lay
index 1cde0618a3b..3b39ac670ba 100644
--- a/src/mame/layout/sc2ptytm1.lay
+++ b/src/mame/layout/sc2ptytm1.lay
@@ -1153,9 +1153,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -1166,6 +1171,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2town2.lay b/src/mame/layout/sc2town2.lay
index d0595ea60ea..14c06cd4514 100644
--- a/src/mame/layout/sc2town2.lay
+++ b/src/mame/layout/sc2town2.lay
@@ -1887,9 +1887,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -1900,6 +1905,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc4_dmd.lay b/src/mame/layout/sc4_dmd.lay
index b42cda68acd..6d965bdb4ea 100644
--- a/src/mame/layout/sc4_dmd.lay
+++ b/src/mame/layout/sc4_dmd.lay
@@ -87,9 +87,14 @@ license:CC0
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0" blue="0" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="0.0" blue="0.0" />
+ <color state="0" red="0.125" green="0.0" blue="0.0" />
+ </disk>
</element>
<element name="digit" defstate="10">
<led7seg>
diff --git a/src/mame/layout/tecnbras.lay b/src/mame/layout/tecnbras.lay
index c65cea29235..da18525567f 100644
--- a/src/mame/layout/tecnbras.lay
+++ b/src/mame/layout/tecnbras.lay
@@ -4,9 +4,45 @@ license:CC0
-->
<mamelayout version="2">
<element name="dotmatrix5dot">
- <dotmatrix5dot>
- <color red="1.0" green="0" blue="0" />
- </dotmatrix5dot>
+ <rect>
+ <bounds x="-0.1" width="5.6" y="-0.1" height="1.2" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <disk state="0" statemask="0x01">
+ <bounds x="0.0" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x02">
+ <bounds x="1.1" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x04">
+ <bounds x="2.2" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x08">
+ <bounds x="3.3" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x10">
+ <bounds x="4.4" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk statemask="0x01">
+ <bounds x="0.0" />
+ </disk>
+ <disk statemask="0x02">
+ <bounds x="1.1" />
+ </disk>
+ <disk statemask="0x04">
+ <bounds x="2.2" />
+ </disk>
+ <disk statemask="0x08">
+ <bounds x="3.3" />
+ </disk>
+ <disk statemask="0x10">
+ <bounds x="4.4" />
+ </disk>
</element>
<element name="background">
<rect>
@@ -18,299 +54,17 @@ license:CC0
<element ref="background">
<bounds left="00" top="00" right="70" bottom="7" />
</element>
- <element name="dmd_0" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="0" width="5" height="1" />
- </element>
- <element name="dmd_1" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="1" width="5" height="1" />
- </element>
- <element name="dmd_2" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="2" width="5" height="1" />
- </element>
- <element name="dmd_3" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="3" width="5" height="1" />
- </element>
- <element name="dmd_4" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="4" width="5" height="1" />
- </element>
- <element name="dmd_5" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="5" width="5" height="1" />
- </element>
- <element name="dmd_6" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="6" width="5" height="1" />
- </element>
- <element name="dmd_7" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="0" width="5" height="1" />
- </element>
- <element name="dmd_8" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="1" width="5" height="1" />
- </element>
- <element name="dmd_9" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="2" width="5" height="1" />
- </element>
- <element name="dmd_10" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="3" width="5" height="1" />
- </element>
- <element name="dmd_11" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="4" width="5" height="1" />
- </element>
- <element name="dmd_12" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="5" width="5" height="1" />
- </element>
- <element name="dmd_13" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="6" width="5" height="1" />
- </element>
- <element name="dmd_14" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="0" width="5" height="1" />
- </element>
- <element name="dmd_15" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="1" width="5" height="1" />
- </element>
- <element name="dmd_16" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="2" width="5" height="1" />
- </element>
- <element name="dmd_17" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="3" width="5" height="1" />
- </element>
- <element name="dmd_18" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="4" width="5" height="1" />
- </element>
- <element name="dmd_19" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="5" width="5" height="1" />
- </element>
- <element name="dmd_20" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="6" width="5" height="1" />
- </element>
- <element name="dmd_21" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="0" width="5" height="1" />
- </element>
- <element name="dmd_22" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="1" width="5" height="1" />
- </element>
- <element name="dmd_23" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="2" width="5" height="1" />
- </element>
- <element name="dmd_24" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="3" width="5" height="1" />
- </element>
- <element name="dmd_25" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="4" width="5" height="1" />
- </element>
- <element name="dmd_26" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="5" width="5" height="1" />
- </element>
- <element name="dmd_27" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="6" width="5" height="1" />
- </element>
- <element name="dmd_28" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="0" width="5" height="1" />
- </element>
- <element name="dmd_29" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="1" width="5" height="1" />
- </element>
- <element name="dmd_30" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="2" width="5" height="1" />
- </element>
- <element name="dmd_31" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="3" width="5" height="1" />
- </element>
- <element name="dmd_32" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="4" width="5" height="1" />
- </element>
- <element name="dmd_33" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="5" width="5" height="1" />
- </element>
- <element name="dmd_34" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="6" width="5" height="1" />
- </element>
- <element name="dmd_35" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="0" width="5" height="1" />
- </element>
- <element name="dmd_36" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="1" width="5" height="1" />
- </element>
- <element name="dmd_37" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="2" width="5" height="1" />
- </element>
- <element name="dmd_38" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="3" width="5" height="1" />
- </element>
- <element name="dmd_39" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="4" width="5" height="1" />
- </element>
- <element name="dmd_40" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="5" width="5" height="1" />
- </element>
- <element name="dmd_41" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="6" width="5" height="1" />
- </element>
- <element name="dmd_42" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="0" width="5" height="1" />
- </element>
- <element name="dmd_43" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="1" width="5" height="1" />
- </element>
- <element name="dmd_44" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="2" width="5" height="1" />
- </element>
- <element name="dmd_45" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="3" width="5" height="1" />
- </element>
- <element name="dmd_46" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="4" width="5" height="1" />
- </element>
- <element name="dmd_47" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="5" width="5" height="1" />
- </element>
- <element name="dmd_48" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="6" width="5" height="1" />
- </element>
- <element name="dmd_49" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="0" width="5" height="1" />
- </element>
- <element name="dmd_50" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="1" width="5" height="1" />
- </element>
- <element name="dmd_51" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="2" width="5" height="1" />
- </element>
- <element name="dmd_52" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="3" width="5" height="1" />
- </element>
- <element name="dmd_53" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="4" width="5" height="1" />
- </element>
- <element name="dmd_54" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="5" width="5" height="1" />
- </element>
- <element name="dmd_55" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="6" width="5" height="1" />
- </element>
- <element name="dmd_56" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="0" width="5" height="1" />
- </element>
- <element name="dmd_57" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="1" width="5" height="1" />
- </element>
- <element name="dmd_58" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="2" width="5" height="1" />
- </element>
- <element name="dmd_59" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="3" width="5" height="1" />
- </element>
- <element name="dmd_60" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="4" width="5" height="1" />
- </element>
- <element name="dmd_61" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="5" width="5" height="1" />
- </element>
- <element name="dmd_62" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="6" width="5" height="1" />
- </element>
- <element name="dmd_63" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="0" width="5" height="1" />
- </element>
- <element name="dmd_64" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="1" width="5" height="1" />
- </element>
- <element name="dmd_65" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="2" width="5" height="1" />
- </element>
- <element name="dmd_66" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="3" width="5" height="1" />
- </element>
- <element name="dmd_67" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="4" width="5" height="1" />
- </element>
- <element name="dmd_68" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="5" width="5" height="1" />
- </element>
- <element name="dmd_69" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="6" width="5" height="1" />
- </element>
- <element name="dmd_70" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="0" width="5" height="1" />
- </element>
- <element name="dmd_71" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="1" width="5" height="1" />
- </element>
- <element name="dmd_72" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="2" width="5" height="1" />
- </element>
- <element name="dmd_73" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="3" width="5" height="1" />
- </element>
- <element name="dmd_74" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="4" width="5" height="1" />
- </element>
- <element name="dmd_75" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="5" width="5" height="1" />
- </element>
- <element name="dmd_76" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="6" width="5" height="1" />
- </element>
- <element name="dmd_77" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="0" width="5" height="1" />
- </element>
- <element name="dmd_78" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="1" width="5" height="1" />
- </element>
- <element name="dmd_79" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="2" width="5" height="1" />
- </element>
- <element name="dmd_80" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="3" width="5" height="1" />
- </element>
- <element name="dmd_81" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="4" width="5" height="1" />
- </element>
- <element name="dmd_82" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="5" width="5" height="1" />
- </element>
- <element name="dmd_83" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="6" width="5" height="1" />
- </element>
- <element name="dmd_84" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="0" width="5" height="1" />
- </element>
- <element name="dmd_85" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="1" width="5" height="1" />
- </element>
- <element name="dmd_86" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="2" width="5" height="1" />
- </element>
- <element name="dmd_87" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="3" width="5" height="1" />
- </element>
- <element name="dmd_88" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="4" width="5" height="1" />
- </element>
- <element name="dmd_89" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="5" width="5" height="1" />
- </element>
- <element name="dmd_90" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="6" width="5" height="1" />
- </element>
- <element name="dmd_91" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="0" width="5" height="1" />
- </element>
- <element name="dmd_92" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="1" width="5" height="1" />
- </element>
- <element name="dmd_93" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="2" width="5" height="1" />
- </element>
- <element name="dmd_94" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="3" width="5" height="1" />
- </element>
- <element name="dmd_95" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="4" width="5" height="1" />
- </element>
- <element name="dmd_96" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="5" width="5" height="1" />
- </element>
- <element name="dmd_97" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="6" width="5" height="1" />
- </element>
+ <repeat count="14">
+ <param name="char" start="0" increment="7" />
+ <param name="x" start="0" increment="5" />
+ <repeat count="7">
+ <param name="n" start="~char~" increment="1" />
+ <param name="y" start="0" increment="1" />
+ <element name="dmd_~n~" ref="dotmatrix5dot" state="0">
+ <bounds x="~x~" y="~y~" width="5" height="1" />
+ <color red="1.0" green="0.0" blue="0.0" />
+ </element>
+ </repeat>
+ </repeat>
</view>
</mamelayout>
diff --git a/src/mame/layout/tmtennis.lay b/src/mame/layout/tmtennis.lay
index db4e50b1aee..aa6a2b48e1a 100644
--- a/src/mame/layout/tmtennis.lay
+++ b/src/mame/layout/tmtennis.lay
@@ -6,54 +6,38 @@ license:CC0
<!-- define elements -->
- <element name="green"><rect><color red="0" green="0.5" blue="0" /></rect></element>
- <element name="greena"><rect><color red="0" green="1" blue="0" /></rect></element>
- <element name="greend"><rect><color red="0" green="1" blue="0" /></rect></element>
-
+ <element name="court">
+ <image><data><![CDATA[
+ <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="700" height="249" viewBox="0 0 700 249" version="1.1" id="svg1">
+ <path id="path1" d="m 1.5,247.5 h 697 l -95,-208 h -507 z"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path2" d="M 88,58.5 H 612"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path3" d="M 12,224.5 H 688"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path4" d="m 138.5,224.5 47,-166"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path5" d="m 561.5,224.5 -47,-166"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path6" d="M 163,136.5 H 537"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path7" d="M 350,247.5 V 38.5"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <rect id="rect1" width="12" height="39" x="344" y="0" style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none" />
+ <rect id="rect2" width="12" height="42" x="344" y="206" style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none" />
+ </svg>
+ ]]></data></image>
+ </element>
<!-- build screen -->
<view name="Internal Layout">
- <screen index="0"><bounds x="10" y="10" width="64" height="13.9" /></screen>
-
- <!-- draw the tennis court -->
-
- <repeat count="201">
- <param name="x" start="6.9" increment="0.0475" />
- <param name="y" start="27" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
-
- <repeat count="201">
- <param name="x" start="76.8" increment="-0.0475" />
- <param name="y" start="27" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
- <repeat count="159">
- <param name="x" start="20.7" increment="0.029" />
- <param name="y" start="24.7" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
+ <screen index="0" blend="add"><bounds x="3" y="7.6" width="64" height="13.9" /></screen>
- <repeat count="159">
- <param name="x" start="63" increment="-0.029" />
- <param name="y" start="24.7" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
-
- <element ref="greena"><bounds x="41.85" y="6" width="0.3" height="20" /><color alpha="0.5" /></element>
-
- <element ref="green"><bounds x="16.5" y="6.1" width="51" height="0.3" /></element>
- <element ref="green"><bounds x="15.7" y="8" width="52.6" height="0.3" /></element>
-
- <element ref="green"><bounds x="23.35" y="15.9" width="37.3" height="0.3" /></element>
-
- <element ref="green"><bounds x="8.1" y="24.8" width="67.8" height="0.3" /></element>
- <element ref="green"><bounds x="7" y="27" width="70" height="0.3" /></element>
+ <!-- draw the tennis court -->
- <element ref="green"><bounds x="41.4" y="2.3" width="1.2" height="3.9" /></element>
- <element ref="green"><bounds x="41.4" y="23" width="1.2" height="4.2" /></element>
+ <element ref="court"><bounds width="70" height="24.9" /><color alpha="0.5" /></element>
</view>
</mamelayout>